/
foult080
/
hackaton-app
Обзор
Документация
Войти
/
foult080
/
hackaton-app
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
internal/handler/team_handler.go
181 строка
4 KB
Foult080
feat(): now can seat winner and add description to hack
10 июл 2026, 11:30
10 июл 2026, 11:30
28a5568
Код
Авторство
О чём код?
package handler import ( "encoding/json" "net/http" "github.com/go-chi/chi/v5" "github.com/kkrit/hackaton/internal/dto" "github.com/kkrit/hackaton/internal/middleware" "github.com/kkrit/hackaton/internal/service" "github.com/kkrit/hackaton/pkg/apperror" ) type TeamHandler struct { svc *service.TeamService } func NewTeamHandler(svc *service.TeamService) *TeamHandler { return &TeamHandler{svc: svc} } func (h *TeamHandler) GetMyTeam(w http.ResponseWriter, r *http.Request) { user := middleware.GetUser(r.Context()) if user == nil { Error(w, apperror.Unauthorized("Not authenticated")) return } team, err := h.svc.GetMyTeam(r.Context(), user.ID) if err != nil { Error(w, err) return } JSON(w, http.StatusOK, team) } func (h *TeamHandler) GetAll(w http.ResponseWriter, r *http.Request) { teams, err := h.svc.GetAll(r.Context()) if err != nil { Error(w, err) return } JSON(w, http.StatusOK, teams) } func (h *TeamHandler) Create(w http.ResponseWriter, r *http.Request) { user := middleware.GetUser(r.Context()) if user == nil { Error(w, apperror.Unauthorized("Not authenticated")) return } var req dto.CreateTeamRequest 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 } team, err := h.svc.Create(r.Context(), user.ID, &req) if err != nil { Error(w, err) return } JSON(w, http.StatusCreated, team) } func (h *TeamHandler) Update(w http.ResponseWriter, r *http.Request) { user := middleware.GetUser(r.Context()) if user == nil { Error(w, apperror.Unauthorized("Not authenticated")) return } var req dto.UpdateTeamRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { Error(w, apperror.BadRequest("Invalid request body")) return } team, err := h.svc.Update(r.Context(), user.ID, &req) if err != nil { Error(w, err) return } JSON(w, http.StatusOK, team) } func (h *TeamHandler) AddMember(w http.ResponseWriter, r *http.Request) { user := middleware.GetUser(r.Context()) if user == nil { Error(w, apperror.Unauthorized("Not authenticated")) return } teamID := chi.URLParam(r, "id") var req dto.AddMemberRequest 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 } team, err := h.svc.AddMember(r.Context(), teamID, user.ID, user.Role, req.Email) if err != nil { Error(w, err) return } JSON(w, http.StatusOK, team) } func (h *TeamHandler) RemoveMember(w http.ResponseWriter, r *http.Request) { user := middleware.GetUser(r.Context()) if user == nil { Error(w, apperror.Unauthorized("Not authenticated")) return } teamID := chi.URLParam(r, "teamId") userID := chi.URLParam(r, "userId") if err := h.svc.RemoveMember(r.Context(), teamID, userID, user.ID, user.Role); err != nil { Error(w, err) return } JSON(w, http.StatusOK, map[string]string{"message": "Member removed"}) } func (h *TeamHandler) SetPlace(w http.ResponseWriter, r *http.Request) { r.Body = http.MaxBytesReader(w, r.Body, 1<<20) id := chi.URLParam(r, "id") var req dto.SetPlaceRequest 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 } if err := h.svc.SetPlace(r.Context(), id, req.Place); err != nil { Error(w, err) return } JSON(w, http.StatusOK, map[string]string{"message": "Place updated"}) } func (h *TeamHandler) Delete(w http.ResponseWriter, r *http.Request) { user := middleware.GetUser(r.Context()) if user == nil { Error(w, apperror.Unauthorized("Not authenticated")) return } id := chi.URLParam(r, "id") if err := h.svc.Delete(r.Context(), id, user.ID, user.Role); err != nil { Error(w, err) return } JSON(w, http.StatusOK, map[string]string{"message": "Team deleted"}) }