diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-11-24 10:30:45 -0500 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-11-24 10:30:45 -0500 |
commit | 810d2de21f4c47d5f263678c274ae915702d247f (patch) | |
tree | 5dd8fad41503d196045a278df607cbbecbbc7d1e /server | |
parent | e732b64fa6881cf25fd353edff4fd76c839e0c8b (diff) |
Add `TableView` for representing player hands in the app
Diffstat (limited to 'server')
-rw-r--r-- | server/src/error.rs | 3 | ||||
-rw-r--r-- | server/src/main.rs | 31 |
2 files changed, 22 insertions, 12 deletions
diff --git a/server/src/error.rs b/server/src/error.rs index 6c2dc41..611d8e4 100644 --- a/server/src/error.rs +++ b/server/src/error.rs @@ -17,6 +17,9 @@ pub enum BridgeError { #[error("Invalid request: {0}")] InvalidRequest(String), + #[error("Version conflict when updating object {0} to version {1}")] + JournalConflict(String, i64), + #[error("Requesting token failed")] OpenidRequestTokenError(#[from] RequestTokenError), diff --git a/server/src/main.rs b/server/src/main.rs index 900d261..130506c 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,15 +1,15 @@ -use std::{collections::HashMap, env, str::FromStr, sync::Arc}; use serde_json::json; +use std::{collections::HashMap, env, str::FromStr, sync::Arc}; use uuid::Uuid; use auth::AuthenticatedSession; use axum::{ - extract::{Extension, Query, Path}, + extract::{Extension, Path, Query}, response::Redirect, routing::{delete, get, post}, Json, Router, }; -use protocol::{Table, UserInfo, bridge_engine}; +use protocol::{bridge_engine::{self, TableView, Player}, Table, UserInfo}; use server::ContextExtension; use tower_cookies::{Cookie, CookieManagerLayer, Cookies}; use tower_http::trace::TraceLayer; @@ -17,13 +17,16 @@ use tracing::info; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; mod auth; mod error; -mod server; mod play; -use crate::{error::BridgeError, play::{DbJournal, Journal}}; +mod server; use crate::{ auth::{Authenticator, SessionId}, server::ServerContext, }; +use crate::{ + error::BridgeError, + play::{DbJournal, Journal}, +}; use sqlx::{postgres::PgPoolOptions, PgPool}; #[tokio::main] @@ -46,7 +49,9 @@ async fn main() { .expect("db connection"); let mut jnl = DbJournal::new(db_pool.clone(), Uuid::new_v4()); - jnl.append(0, json!("starting server")).await.expect("new object"); + jnl.append(0, json!("starting server")) + .await + .expect("new object"); info!("Running db migrations"); sqlx::migrate!().run(&db_pool).await.expect("db migration"); @@ -83,12 +88,13 @@ async fn main() { async fn get_table_view( _session: AuthenticatedSession, extension: ContextExtension, - Path(id): Path<Uuid> -) -> Result<Json<protocol::bridge_engine::GameState>, BridgeError> { - info!("Getting table state for table {id:}"); + Path(id): Path<Uuid>, +) -> Result<Json<protocol::bridge_engine::TableView>, BridgeError> { + info!("Getting table state for {id:}"); let jnl = DbJournal::new(extension.db.clone(), id); let table = play::Table::new_or_replay(jnl).await?; - let response: Json<bridge_engine::GameState> = Json(table.game().clone()); + let response = + Json(TableView::from_game_state(table.game(), Player::South)); info!("Response: {response:#?}"); Ok(response) } @@ -100,10 +106,11 @@ async fn leave_table( sqlx::query!( r#" delete from table_players where player_id = $1 - "#, session.player_id + "#, + session.player_id ) .execute(&extension.db) - .await?; + .await?; Ok(()) } |