From 879276a057d4805014fef0218a4cbafdd2349b64 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Sat, 7 Jan 2023 16:33:46 -0500 Subject: Insert boards in the db using correct keys --- server/src/table.rs | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'server/src/table.rs') diff --git a/server/src/table.rs b/server/src/table.rs index 1dc0fb7..370e2e1 100644 --- a/server/src/table.rs +++ b/server/src/table.rs @@ -16,7 +16,9 @@ use crate::error::BridgeError; #[async_trait] pub trait Table { + fn board_number(&self) -> usize; fn state(&self) -> &TableState; + async fn bid( self: Box, bid: Bid, @@ -25,19 +27,23 @@ pub trait Table { self: Box, card: Card, ) -> Result, BridgeError>; - async fn new_deal( + async fn set_board( self: Box, + board_number: usize, + deal: Deal, ) -> Result, BridgeError>; } pub struct InMemoryTable { pub state: TableState, + board_number: usize, } impl InMemoryTable { pub fn new() -> Self { Self { state: TableState::Unknown, + board_number: 0, } } } @@ -48,6 +54,10 @@ impl Table for InMemoryTable { &self.state } + fn board_number(&self) -> usize { + self.board_number + } + async fn bid( self: Box, bid: Bid, @@ -59,7 +69,7 @@ impl Table for InMemoryTable { } }; let game = game.bid(bid)?; - Ok(Box::new(Self { state: game.into() })) + Ok(Box::new(Self { state: game.into(), ..*self })) } async fn play( @@ -73,14 +83,17 @@ impl Table for InMemoryTable { } }; let game = game.play(card)?; - Ok(Box::new(Self { state: game.into() })) + Ok(Box::new(Self { state: game.into(), ..*self })) } - async fn new_deal( + async fn set_board( self: Box, + board_number: usize, + deal: Deal, ) -> Result, BridgeError> { Ok(Box::new(Self { - state: GameState::new(random(), random()).into(), + state: GameState::new(deal).into(), + board_number, })) } } @@ -165,6 +178,10 @@ impl Table for DbTable { self.inner.state() } + fn board_number(&self) -> usize { + self.inner.board_number() + } + async fn bid( self: Box, bid: Bid, @@ -185,16 +202,18 @@ impl Table for DbTable { })) } - async fn new_deal( + async fn set_board( self: Box, + board_number: usize, + deal: Deal, ) -> Result, BridgeError> { - let inner = self.inner.new_deal().await?; + let inner = self.inner.set_board(board_number, deal).await?; let deal: Deal = random(); sqlx::query!(r#" insert into table_boards (table_id, board_number, deal) values ($1, $2, $3) - "#, self.id, 0, sqlx::types::Json(deal) as _) + "#, self.id, board_number as i64, sqlx::types::Json(deal) as _) .execute(&self.db).await?; Ok(Box::new(Self { -- cgit v1.2.3