summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-11-24 10:30:45 -0500
committerKjetil Orbekk <kj@orbekk.com>2022-11-24 10:30:45 -0500
commit810d2de21f4c47d5f263678c274ae915702d247f (patch)
tree5dd8fad41503d196045a278df607cbbecbbc7d1e /server
parente732b64fa6881cf25fd353edff4fd76c839e0c8b (diff)
Add `TableView` for representing player hands in the app
Diffstat (limited to 'server')
-rw-r--r--server/src/error.rs3
-rw-r--r--server/src/main.rs31
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(())
}