Skip to main content

api/services/queries/
get_game.rs

1#[cfg(feature = "server")]
2use dioxus::fullstack::extract::State;
3use dioxus::prelude::*;
4
5#[cfg(feature = "server")]
6use crate::ServerStateExtractor;
7use crate::dto::{GameIdDTO, UserGameDTO, UserIdDTO};
8
9#[get("/api/{user_id}/game/{game_id}", State(server_state): State<ServerStateExtractor>)]
10pub async fn get_game(user_id: UserIdDTO, game_id: GameIdDTO) -> Result<UserGameDTO> {
11    use server::{
12        domain::{GameId, UserId},
13        queries::get_game,
14    };
15
16    let user_id = UserId::from(user_id.value());
17    let game_id = GameId::from(game_id.value());
18
19    let game = get_game(server_state.0, game_id).await?;
20    let game = game.map_or(UserGameDTO::default(), |game| {
21        UserGameDTO::from((user_id, &game))
22    });
23
24    Ok(game)
25}