-- name: CreateGame :one INSERT INTO games (id, board, current_turn, status) VALUES (?, ?, ?, ?) RETURNING *; -- name: GetGame :one SELECT * FROM games WHERE id = ?; -- name: UpdateGame :exec UPDATE games SET board = ?, current_turn = ?, status = ?, winner_user_id = ?, winning_cells = ?, rematch_game_id = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?; -- name: DeleteGame :exec DELETE FROM games WHERE id = ?; -- name: GetActiveGames :many SELECT * FROM games WHERE status < 2; -- name: CreateGamePlayer :exec INSERT INTO game_players (game_id, user_id, guest_player_id, nickname, color, slot) VALUES (?, ?, ?, ?, ?, ?); -- name: GetGamePlayers :many SELECT * FROM game_players WHERE game_id = ?; -- name: GetGamesByUserID :many SELECT g.* FROM games g JOIN game_players gp ON g.id = gp.game_id WHERE gp.user_id = ? ORDER BY g.updated_at DESC; -- name: GetUserActiveGames :many SELECT g.id, g.status, g.current_turn, g.updated_at, gp_user.color as my_color, gp_opponent.nickname as opponent_nickname FROM games g JOIN game_players gp_user ON g.id = gp_user.game_id AND gp_user.user_id = ? LEFT JOIN game_players gp_opponent ON g.id = gp_opponent.game_id AND gp_opponent.slot != gp_user.slot WHERE g.status < 2 ORDER BY g.updated_at DESC;