Skip to main content

batuta/serve/banco/
handlers_prompts.rs

1//! Prompt preset CRUD handlers.
2
3use axum::{extract::State, http::StatusCode, response::Json};
4
5use super::state::BancoState;
6use super::types::{ErrorResponse, PromptsListResponse, SavePromptRequest};
7
8pub async fn list_prompts_handler(State(state): State<BancoState>) -> Json<PromptsListResponse> {
9    Json(PromptsListResponse { presets: state.prompts.list() })
10}
11
12pub async fn get_prompt_handler(
13    State(state): State<BancoState>,
14    axum::extract::Path(id): axum::extract::Path<String>,
15) -> Result<Json<super::prompts::PromptPreset>, (StatusCode, Json<ErrorResponse>)> {
16    state.prompts.get(&id).map(Json).ok_or((
17        StatusCode::NOT_FOUND,
18        Json(ErrorResponse::new(format!("Preset {id} not found"), "not_found", 404)),
19    ))
20}
21
22pub async fn save_prompt_handler(
23    State(state): State<BancoState>,
24    Json(request): Json<SavePromptRequest>,
25) -> Json<super::prompts::PromptPreset> {
26    Json(state.prompts.create(&request.name, &request.content))
27}
28
29pub async fn delete_prompt_handler(
30    State(state): State<BancoState>,
31    axum::extract::Path(id): axum::extract::Path<String>,
32) -> Result<StatusCode, (StatusCode, Json<ErrorResponse>)> {
33    if state.prompts.delete(&id) {
34        Ok(StatusCode::NO_CONTENT)
35    } else {
36        Err((
37            StatusCode::NOT_FOUND,
38            Json(ErrorResponse::new(format!("Preset {id} not found"), "not_found", 404)),
39        ))
40    }
41}