From 810d2de21f4c47d5f263678c274ae915702d247f Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Thu, 24 Nov 2022 10:30:45 -0500 Subject: Add `TableView` for representing player hands in the app --- server/src/error.rs | 3 +++ server/src/main.rs | 31 +++++++++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) (limited to 'server') 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 -) -> Result, BridgeError> { - info!("Getting table state for table {id:}"); + Path(id): Path, +) -> Result, 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 = 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(()) } -- cgit v1.2.3