From 95da822f025b544f700729afc676ba0f3c981154 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Thu, 17 Apr 2025 16:11:34 +0200 Subject: Outcome for a game --- pkg/ui/views/game_api.go | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'pkg/ui/views/game_api.go') diff --git a/pkg/ui/views/game_api.go b/pkg/ui/views/game_api.go index 5d4edf9..75aa0a1 100644 --- a/pkg/ui/views/game_api.go +++ b/pkg/ui/views/game_api.go @@ -7,16 +7,26 @@ import ( "github.com/boozec/rahanna/internal/api/database" tea "github.com/charmbracelet/bubbletea" + "github.com/notnil/chess" ) -func (m GameModel) handleDatabaseGameMsg(msg database.Game) GameModel { +func (m GameModel) handleDatabaseGameMsg(msg database.Game) (GameModel, tea.Cmd) { m.game = &msg if m.peer == "peer-2" { m.network.Peer = msg.IP2 } else { m.network.Peer = msg.IP1 } - return m + + var cmd tea.Cmd + + if m.game.Outcome != chess.NoOutcome.String() { + cmd = func() tea.Msg { + return EndGameMsg{} + } + } + + return m, cmd } func (m *GameModel) getGame() tea.Cmd { @@ -57,3 +67,36 @@ func (m *GameModel) getGame() tea.Cmd { return game } } + +type EndGameMsg struct{} + +func (m *GameModel) endGame() tea.Cmd { + return func() tea.Msg { + var game database.Game + + // Get authorization token + authorization, err := getAuthorizationToken() + if err != nil { + return err + } + + // Prepare request payload + payload, err := json.Marshal(map[string]string{ + "outcome": m.chessGame.Outcome().String(), + }) + + // Send API request + url := fmt.Sprintf("%s/play/%d/end", os.Getenv("API_BASE"), m.currentGameID) + resp, err := sendAPIRequest("POST", url, payload, authorization) + if err != nil { + return err + } + defer resp.Body.Close() + + if err := json.NewDecoder(resp.Body).Decode(&game); err != nil { + return err + } + + return game + } +} -- cgit v1.2.3-18-g5258