use crate::commands::{Command, RequestType}; use crate::context::Context; use crate::Result; use geoffrey_db::helper::{find_location_by_name, load_location}; use geoffrey_models::models::locations::{Location, LocationDb}; use geoffrey_models::models::parameters::delete_params::DeleteParams; use geoffrey_models::models::player::Player; use geoffrey_models::models::response::api_error::GeoffreyAPIError; use geoffrey_models::models::CommandLevel; use std::sync::Arc; pub struct Delete {} impl Command for Delete { type Req = DeleteParams; type Resp = Location; fn command_name() -> String { "delete".to_string() } fn request_type() -> RequestType { RequestType::POST } fn command_level() -> CommandLevel { CommandLevel::REGISTERED } fn run_command(ctx: Arc, req: &Self::Req, user: Option) -> Result { let user = user.unwrap(); let location = find_location_by_name(&ctx.db, &req.location, user.id.unwrap())?; let location = load_location(&ctx.db, &location).map_err(GeoffreyAPIError::from)?; ctx.db.remove::(location.id)?; Ok(location) } }