sharenet/backend/crates/http/src/handlers/todo/create.rs
2025-03-26 21:31:13 -04:00

27 lines
780 B
Rust

use axum::extract::State;
use axum::Json;
use application::state::AppState;
use domain::models::todo::Todo;
use domain::services::todo::TodoService;
use crate::models::error::HttpError;
use crate::models::response::HttpGetOneResponse;
use crate::models::todo::HttpCreateTodoRequest;
/// Create a new [Todo].
///
/// # Responses
///
/// - 201 Created: the [Todo] was successfully created.
/// - 422 Unprocessable entity: An [Todo] with the same name already exists.
pub async fn create<S: TodoService>(
State(state): State<AppState<S>>,
Json(req): Json<HttpCreateTodoRequest>,
) -> Result<HttpGetOneResponse<Todo>, HttpError> {
state.todo_service
.create(req.into())
.await
.map_err(|e| e.into())
.map(|todo: Todo| todo.into())
}