diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-03-15 21:44:10 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-03-15 21:44:10 +0900 |
| commit | 223891066ab3f727f2270e3674d93888405ca4d5 (patch) | |
| tree | 8c0221b775e6983f4946b93f4456f2d24741412c /backend/admin/handler.go | |
| parent | 074c7feb19efeb936025410ba6ec95ac01884f5e (diff) | |
| download | phperkaigi-2025-albatross-223891066ab3f727f2270e3674d93888405ca4d5.tar.gz phperkaigi-2025-albatross-223891066ab3f727f2270e3674d93888405ca4d5.tar.zst phperkaigi-2025-albatross-223891066ab3f727f2270e3674d93888405ca4d5.zip | |
feat(backen): allow admin to edit main players
Diffstat (limited to 'backend/admin/handler.go')
| -rw-r--r-- | backend/admin/handler.go | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/backend/admin/handler.go b/backend/admin/handler.go index bce4845..4244788 100644 --- a/backend/admin/handler.go +++ b/backend/admin/handler.go @@ -232,6 +232,35 @@ func (h *Handler) getGameEdit(c echo.Context) error { startedAt = row.StartedAt.Time.In(jst).Format("2006-01-02T15:04") } + mainPlayerRows, err := h.q.ListMainPlayers(c.Request().Context(), []int32{int32(gameID)}) + if err != nil { + if !errors.Is(err, pgx.ErrNoRows) { + return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) + } + } + mainPlayer1 := 0 + if len(mainPlayerRows) > 0 { + mainPlayer1 = int(mainPlayerRows[0].UserID) + } + mainPlayer2 := 0 + if len(mainPlayerRows) > 1 { + mainPlayer2 = int(mainPlayerRows[1].UserID) + } + + userRows, err := h.q.ListUsers(c.Request().Context()) + if err != nil { + if !errors.Is(err, pgx.ErrNoRows) { + return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) + } + } + var users []echo.Map + for _, r := range userRows { + users = append(users, echo.Map{ + "UserID": int(r.UserID), + "Username": r.Username, + }) + } + return c.Render(http.StatusOK, "game_edit", echo.Map{ "BasePath": basePath, "Title": "Game Edit", @@ -243,7 +272,10 @@ func (h *Handler) getGameEdit(c echo.Context) error { "DurationSeconds": row.DurationSeconds, "StartedAt": startedAt, "ProblemID": row.ProblemID, + "MainPlayer1": mainPlayer1, + "MainPlayer2": mainPlayer2, }, + "Users": users, }) } @@ -307,6 +339,38 @@ func (h *Handler) postGameEdit(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) } + mainPlayers := []int{} + mainPlayer1Raw := c.FormValue("main_player_1") + if mainPlayer1Raw != "" && mainPlayer1Raw != "0" { + mainPlayer1, err := strconv.Atoi(mainPlayer1Raw) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, "Invalid main_player_1") + } + mainPlayers = append(mainPlayers, mainPlayer1) + } + mainPlayer2Raw := c.FormValue("main_player_2") + if mainPlayer2Raw != "" && mainPlayer2Raw != "0" { + mainPlayer2, err := strconv.Atoi(mainPlayer2Raw) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, "Invalid main_player_2") + } + mainPlayers = append(mainPlayers, mainPlayer2) + } + + err = h.q.RemoveAllMainPlayers(c.Request().Context(), int32(gameID)) + if err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) + } + for _, userID := range mainPlayers { + err = h.q.AddMainPlayer(c.Request().Context(), db.AddMainPlayerParams{ + GameID: int32(gameID), + UserID: int32(userID), + }) + if err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) + } + } + return c.Redirect(http.StatusSeeOther, basePath+"/admin/games") } |
