batuta/serve/banco/
handlers_prompts.rs1use 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}