api/services/action/
play_card.rs1#[cfg(feature = "server")]
2use dioxus::fullstack::extract::State;
3use dioxus::prelude::*;
4
5#[cfg(feature = "server")]
6use crate::ServerStateExtractor;
7use crate::{
8 dto::{CardIdDTO, GameIdDTO, UserIdDTO},
9 error::ApiError,
10};
11
12#[post("/api/{user_id}/game/{game_id}/play/{card}", State(server_state): State<ServerStateExtractor>)]
13pub async fn play_card(
14 user_id: UserIdDTO,
15 game_id: GameIdDTO,
16 card: CardIdDTO,
17) -> Result<(), ApiError> {
18 use std::str::FromStr;
19
20 use server::{
21 action::play_card,
22 domain::{Card, GameId, UserId},
23 };
24
25 let user_id = UserId::from(user_id.value());
26 let game_id = GameId::from(game_id.value());
27 let card = Card::from_str(&card).map_err(ServerFnError::new)?;
28
29 play_card(server_state.0, user_id, game_id, card).await?;
30 Ok(())
31}