This commit is contained in:
2026-09-16 02:57:00 +07:00
parent 0e42278b36
commit b9afada40a
5 changed files with 17 additions and 1 deletions
Binary file not shown.
+1 -1
View File
@@ -8,7 +8,7 @@
## Правила
- `pending` — ожидает ответа; команда сохраняет право участвовать.
- `confirmed` — подтверждено капитаном или автоматически при регистрации менее чем за сутки.
- `confirmed` — подтверждено капитаном, первым ходом команды (`first_action`) или автоматически при регистрации менее чем за сутки.
- `cancelled` — отменено; команда остаётся в истории организатора, но исключается из игры,
ответов организатору, результатов, карты и PDF с QR-кодами.
- Ровно за 24 часа автоматического подтверждения нет.
@@ -117,6 +117,13 @@ func (r *TeamsRepo) SetParticipationToken(ctx context.Context, id int, token str
return err
}
func (r *TeamsRepo) ConfirmParticipationByFirstAction(ctx context.Context, teamID int) error {
_, err := r.pool.Exec(ctx, `UPDATE teams SET participation_status='confirmed',
participation_source='first_action', participation_answered_at=NOW()
WHERE id=$1 AND participation_status='pending'`, teamID)
return err
}
func (r *TeamsRepo) FinishParticipationEmail(ctx context.Context, id, attempt int, sendErr error) error {
message := ""
if sendErr != nil {
@@ -106,6 +106,10 @@ func TestParticipationPostgres(t *testing.T) {
state(3, "pending")
state(4, "confirmed")
state(5, "pending")
if err := repo.ConfirmParticipationByFirstAction(ctx, 5); err != nil {
t.Fatal(err)
}
state(5, "confirmed")
// Independent workers must claim each due team just once.
var wg sync.WaitGroup
ids := make(chan int, 8)
@@ -299,6 +299,11 @@ func (s *GameService) AddTeamAction(ctx context.Context, teamId int, password st
if err != nil {
return err
}
if team.ParticipationStatus == "pending" {
if err := s.teamsRepo.ConfirmParticipationByFirstAction(ctx, teamId); err != nil {
return err
}
}
game, err := s.gamesRepo.GetGameByID(ctx, team.GameId)
if err != nil {