diff options
author | Santo Cariotti <santo@dcariotti.me> | 2025-04-17 16:11:34 +0200 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2025-04-17 16:11:34 +0200 |
commit | 95da822f025b544f700729afc676ba0f3c981154 (patch) | |
tree | 89b07c3a4e8797e67cb08e8f6603b7e7eae3b0e1 /pkg/ui/views/game_api.go | |
parent | 56c7e99b59a52f19598d33a46aea0516bd4d609f (diff) |
Outcome for a game
Diffstat (limited to 'pkg/ui/views/game_api.go')
-rw-r--r-- | pkg/ui/views/game_api.go | 47 |
1 files changed, 45 insertions, 2 deletions
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 + } +} |