feat(api): CRUD расписания/каналов + тест-отправка + история проверок
Task 5 Фазы 3: GET/PUT /schedule (дефолт при отсутствии строки, валидация
interval>=60), POST/GET/DELETE /channels (секрет шифруется Cipher, никогда
не возвращается в ответах), POST /channels/{cid}/test через узкий
TestSender-интерфейс (200/502 без утечки секрета), GET /domains/{did}/history
(сначала GetDomain для project-scoping, затем ListCheckRuns — иначе IDOR
через check_runs, который сам по себе не scoped по project).
Добавлены store.GetDomain (обёртка над существующим sqlc-запросом) и
store.ListCheckRuns (новый запрос + sqlc regen) для поддержки истории.
This commit is contained in:
@@ -85,6 +85,8 @@ type API struct {
|
||||
Reg ProviderRegistry
|
||||
Auth AuthStore
|
||||
Sessions SessionManager
|
||||
Schedule ScheduleStore
|
||||
Dispatch TestSender
|
||||
}
|
||||
|
||||
func NewRouter(a *API) http.Handler {
|
||||
@@ -114,6 +116,18 @@ func NewRouter(a *API) http.Handler {
|
||||
r.Post("/apply", a.handleApply)
|
||||
r.Patch("/", a.handleSetDomainTemplate)
|
||||
r.Delete("/", a.handleDeleteDomain)
|
||||
r.Get("/history", a.handleDomainHistory)
|
||||
})
|
||||
})
|
||||
|
||||
r.Get("/schedule", a.handleGetSchedule)
|
||||
r.Put("/schedule", a.handlePutSchedule)
|
||||
r.Route("/channels", func(r chi.Router) {
|
||||
r.Post("/", a.handleCreateChannel)
|
||||
r.Get("/", a.handleListChannels)
|
||||
r.Route("/{cid}", func(r chi.Router) {
|
||||
r.Delete("/", a.handleDeleteChannel)
|
||||
r.Post("/test", a.handleTestChannel)
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user