final
This commit is contained in:
@@ -58,11 +58,14 @@ func (a *App) handleUpdateAdminSettings(c echo.Context) error {
|
||||
if err := c.Bind(&req); err != nil {
|
||||
return writeError(c, http.StatusBadRequest, "invalid request body")
|
||||
}
|
||||
if req.ViewProofInView == nil {
|
||||
return writeError(c, http.StatusBadRequest, "viewProofInView is required")
|
||||
if req.ViewProofInView == nil && req.LiveMode == nil {
|
||||
return writeError(c, http.StatusBadRequest, "at least one settings field is required")
|
||||
}
|
||||
|
||||
if err := a.updateViewProofInView(*req.ViewProofInView); err != nil {
|
||||
if err := a.updateSettings(req); err != nil {
|
||||
if strings.Contains(err.Error(), "no settings to update") {
|
||||
return writeError(c, http.StatusBadRequest, err.Error())
|
||||
}
|
||||
return writeError(c, http.StatusInternalServerError, err.Error())
|
||||
}
|
||||
|
||||
@@ -334,7 +337,7 @@ ON CONFLICT(stage, player_id) DO UPDATE SET score = excluded.score, updated_at =
|
||||
}
|
||||
|
||||
func (a *App) handleResetStageScores(c echo.Context) error {
|
||||
stage, err := validateStage(c.Param("stage"))
|
||||
targetStages, err := resolveResetStages(c.Param("stage"))
|
||||
if err != nil {
|
||||
return writeError(c, http.StatusBadRequest, err.Error())
|
||||
}
|
||||
@@ -344,13 +347,24 @@ func (a *App) handleResetStageScores(c echo.Context) error {
|
||||
return writeError(c, http.StatusBadRequest, "invalid request body")
|
||||
}
|
||||
|
||||
if _, err := a.db.Exec(`UPDATE scores SET score = 0, updated_at = CURRENT_TIMESTAMP WHERE stage = ?`, stage); err != nil {
|
||||
return writeError(c, http.StatusInternalServerError, fmt.Sprintf("reset stage scores: %v", err))
|
||||
tx, err := a.db.Begin()
|
||||
if err != nil {
|
||||
return writeError(c, http.StatusInternalServerError, "failed to start reset transaction")
|
||||
}
|
||||
if req.ResetProofs {
|
||||
if _, err := a.db.Exec(`DELETE FROM score_attachments WHERE stage = ?`, stage); err != nil {
|
||||
return writeError(c, http.StatusInternalServerError, fmt.Sprintf("reset stage proofs: %v", err))
|
||||
defer tx.Rollback()
|
||||
|
||||
for _, stage := range targetStages {
|
||||
if _, err := tx.Exec(`UPDATE scores SET score = 0, updated_at = CURRENT_TIMESTAMP WHERE stage = ?`, stage); err != nil {
|
||||
return writeError(c, http.StatusInternalServerError, fmt.Sprintf("reset stage scores: %v", err))
|
||||
}
|
||||
if req.ResetProofs {
|
||||
if _, err := tx.Exec(`DELETE FROM score_attachments WHERE stage = ?`, stage); err != nil {
|
||||
return writeError(c, http.StatusInternalServerError, fmt.Sprintf("reset stage proofs: %v", err))
|
||||
}
|
||||
}
|
||||
}
|
||||
if err := tx.Commit(); err != nil {
|
||||
return writeError(c, http.StatusInternalServerError, fmt.Sprintf("commit stage reset: %v", err))
|
||||
}
|
||||
|
||||
a.events.Broadcast()
|
||||
@@ -363,6 +377,23 @@ func (a *App) handleResetStageScores(c echo.Context) error {
|
||||
return c.JSON(http.StatusOK, state)
|
||||
}
|
||||
|
||||
func resolveResetStages(stage string) ([]string, error) {
|
||||
switch strings.ToLower(strings.TrimSpace(stage)) {
|
||||
case "preliminary":
|
||||
return append([]string{}, preliminaryRoundStages...), nil
|
||||
case "final":
|
||||
return append([]string{}, finalRoundStages...), nil
|
||||
case "prelim_tiebreak", "final_tiebreak":
|
||||
normalized, err := validateStage(stage)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return []string{normalized}, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid stage")
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) handleUpdateScoreProof(c echo.Context) error {
|
||||
stage, err := validateStage(c.Param("stage"))
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user