27 lines
780 B
Rust
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())
|
|
}
|