/
foult080
/
hackaton-app
Обзор
Документация
Войти
/
foult080
/
hackaton-app
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
internal/handler/news_handler.go
97 строк
2 KB
Foult080
refactor(): big refactor from kimi
07 июл 2026, 14:03
07 июл 2026, 14:03
2665fdb
Код
Авторство
О чём код?
package handler import ( "encoding/json" "net/http" "github.com/go-chi/chi/v5" "github.com/kkrit/hackaton/internal/dto" "github.com/kkrit/hackaton/internal/service" "github.com/kkrit/hackaton/pkg/apperror" ) type NewsHandler struct { svc *service.NewsService } func NewNewsHandler(svc *service.NewsService) *NewsHandler { return &NewsHandler{svc: svc} } func (h *NewsHandler) GetAll(w http.ResponseWriter, r *http.Request) { news, err := h.svc.GetAll(r.Context()) if err != nil { Error(w, err) return } JSON(w, http.StatusOK, news) } func (h *NewsHandler) GetLatest(w http.ResponseWriter, r *http.Request) { news, err := h.svc.GetLatest(r.Context()) if err != nil { Error(w, err) return } JSON(w, http.StatusOK, news) } func (h *NewsHandler) GetByID(w http.ResponseWriter, r *http.Request) { id := chi.URLParam(r, "id") news, err := h.svc.GetByID(r.Context(), id) if err != nil { Error(w, err) return } JSON(w, http.StatusOK, news) } func (h *NewsHandler) Create(w http.ResponseWriter, r *http.Request) { var req dto.CreateNewsRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { Error(w, apperror.BadRequest("Invalid request body")) return } if err := ValidateRequest(&req); err != nil { Error(w, err) return } news, err := h.svc.Create(r.Context(), &req) if err != nil { Error(w, err) return } JSON(w, http.StatusCreated, news) } func (h *NewsHandler) Update(w http.ResponseWriter, r *http.Request) { id := chi.URLParam(r, "id") var req dto.UpdateNewsRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { Error(w, apperror.BadRequest("Invalid request body")) return } news, err := h.svc.Update(r.Context(), id, &req) if err != nil { Error(w, err) return } JSON(w, http.StatusOK, news) } func (h *NewsHandler) Delete(w http.ResponseWriter, r *http.Request) { id := chi.URLParam(r, "id") if err := h.svc.Delete(r.Context(), id); err != nil { Error(w, err) return } JSON(w, http.StatusOK, map[string]string{"message": "News deleted"}) }