summaryrefslogtreecommitdiff
path: root/pkg/ui/views/game_api.go
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2025-04-17 16:11:34 +0200
committerSanto Cariotti <santo@dcariotti.me>2025-04-17 16:11:34 +0200
commit95da822f025b544f700729afc676ba0f3c981154 (patch)
tree89b07c3a4e8797e67cb08e8f6603b7e7eae3b0e1 /pkg/ui/views/game_api.go
parent56c7e99b59a52f19598d33a46aea0516bd4d609f (diff)
Outcome for a game
Diffstat (limited to 'pkg/ui/views/game_api.go')
-rw-r--r--pkg/ui/views/game_api.go47
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
+ }
+}