Enha: create tx; cardword test
This commit is contained in:
		| @@ -159,6 +159,21 @@ func HandleStartGame(w http.ResponseWriter, r *http.Request) { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// Initialize transaction | ||||
| 	ctx, tx, err := repo.InitTx(r.Context()) | ||||
| 	if err != nil { | ||||
| 		log.Error("failed to init transaction", "error", err) | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	defer func() { | ||||
| 		if r := recover(); r != nil { | ||||
| 			tx.Rollback() | ||||
| 			panic(r) | ||||
| 		} | ||||
| 	}() | ||||
|  | ||||
| 	fi.Room.IsRunning = true | ||||
| 	fi.Room.IsOver = false | ||||
| 	fi.Room.TeamTurn = "blue" | ||||
| @@ -174,10 +189,42 @@ func HandleStartGame(w http.ResponseWriter, r *http.Request) { | ||||
| 		Action:     models.ActionTypeGameStarted, | ||||
| 	} | ||||
| 	fi.Room.ActionHistory = append(fi.Room.ActionHistory, action) | ||||
| 	if err := saveFullInfo(r.Context(), fi); err != nil { | ||||
|  | ||||
| 	// Use the new context with transaction | ||||
| 	if err := saveFullInfo(ctx, fi); err != nil { | ||||
| 		tx.Rollback() | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// Save action history | ||||
| 	action.RoomID = fi.Room.ID | ||||
| 	action.CreatedAtUnix = time.Now().Unix() | ||||
| 	if err := repo.CreateAction(ctx, fi.Room.ID, &action); err != nil { | ||||
| 		tx.Rollback() | ||||
| 		log.Error("failed to save action", "error", err) | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// Save word cards | ||||
| 	for _, card := range fi.Room.Cards { | ||||
| 		card.RoomID = fi.Room.ID // Ensure RoomID is set for each card | ||||
| 		if err := repo.WordCardsCreate(ctx, &card); err != nil { | ||||
| 			tx.Rollback() | ||||
| 			log.Error("failed to save word card", "error", err) | ||||
| 			abortWithError(w, err.Error()) | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Commit the transaction | ||||
| 	if err := tx.Commit(); err != nil { | ||||
| 		log.Error("failed to commit transaction", "error", err) | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// reveal all cards | ||||
| 	if fi.State.Role == "mime" { | ||||
| 		fi.Room.MimeView() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder