cc_switch_lib/database/dao/
prompts.rs1use crate::database::{lock_conn, Database};
6use crate::error::AppError;
7use crate::prompt::Prompt;
8use indexmap::IndexMap;
9use rusqlite::params;
10
11impl Database {
12 pub fn get_prompts(&self, app_type: &str) -> Result<IndexMap<String, Prompt>, AppError> {
14 let conn = lock_conn!(self.conn);
15 let mut stmt = conn
16 .prepare(
17 "SELECT id, name, content, description, enabled, created_at, updated_at
18 FROM prompts WHERE app_type = ?1
19 ORDER BY created_at ASC, id ASC",
20 )
21 .map_err(|e| AppError::Database(e.to_string()))?;
22
23 let prompt_iter = stmt
24 .query_map(params![app_type], |row| {
25 let id: String = row.get(0)?;
26 let name: String = row.get(1)?;
27 let content: String = row.get(2)?;
28 let description: Option<String> = row.get(3)?;
29 let enabled: bool = row.get(4)?;
30 let created_at: Option<i64> = row.get(5)?;
31 let updated_at: Option<i64> = row.get(6)?;
32
33 Ok((
34 id.clone(),
35 Prompt {
36 id,
37 name,
38 content,
39 description,
40 enabled,
41 created_at,
42 updated_at,
43 },
44 ))
45 })
46 .map_err(|e| AppError::Database(e.to_string()))?;
47
48 let mut prompts = IndexMap::new();
49 for prompt_res in prompt_iter {
50 let (id, prompt) = prompt_res.map_err(|e| AppError::Database(e.to_string()))?;
51 prompts.insert(id, prompt);
52 }
53 Ok(prompts)
54 }
55
56 pub fn save_prompt(&self, app_type: &str, prompt: &Prompt) -> Result<(), AppError> {
58 let conn = lock_conn!(self.conn);
59 conn.execute(
60 "INSERT OR REPLACE INTO prompts (
61 id, app_type, name, content, description, enabled, created_at, updated_at
62 ) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8)",
63 params![
64 prompt.id,
65 app_type,
66 prompt.name,
67 prompt.content,
68 prompt.description,
69 prompt.enabled,
70 prompt.created_at,
71 prompt.updated_at,
72 ],
73 )
74 .map_err(|e| AppError::Database(e.to_string()))?;
75 Ok(())
76 }
77
78 pub fn delete_prompt(&self, app_type: &str, id: &str) -> Result<(), AppError> {
80 let conn = lock_conn!(self.conn);
81 conn.execute(
82 "DELETE FROM prompts WHERE id = ?1 AND app_type = ?2",
83 params![id, app_type],
84 )
85 .map_err(|e| AppError::Database(e.to_string()))?;
86 Ok(())
87 }
88}