headless_lms_models/
chatbot_conversation_message_tool_outputs.rs

1use crate::prelude::*;
2
3#[derive(Clone, PartialEq, Deserialize, Serialize, Debug)]
4#[cfg_attr(feature = "ts_rs", derive(TS))]
5pub struct ChatbotConversationMessageToolOutput {
6    pub id: Uuid,
7    pub created_at: DateTime<Utc>,
8    pub updated_at: DateTime<Utc>,
9    pub deleted_at: Option<DateTime<Utc>>,
10    pub message_id: Uuid,
11    pub tool_name: String,
12    pub tool_output: String,
13    pub tool_call_id: String,
14}
15
16impl Default for ChatbotConversationMessageToolOutput {
17    fn default() -> Self {
18        Self {
19            id: Uuid::nil(),
20            created_at: Default::default(),
21            updated_at: Default::default(),
22            deleted_at: None,
23            message_id: Uuid::nil(),
24            tool_name: Default::default(),
25            tool_output: Default::default(),
26            tool_call_id: Default::default(),
27        }
28    }
29}
30
31pub async fn insert(
32    conn: &mut PgConnection,
33    input: ChatbotConversationMessageToolOutput,
34    msg_id: Uuid,
35) -> ModelResult<ChatbotConversationMessageToolOutput> {
36    let res = sqlx::query_as!(
37        ChatbotConversationMessageToolOutput,
38        r#"
39INSERT INTO chatbot_conversation_message_tool_outputs (
40    message_id,
41    tool_name,
42    tool_output,
43    tool_call_id
44  )
45VALUES ($1, $2, $3, $4)
46RETURNING *
47        "#,
48        msg_id,
49        input.tool_name,
50        input.tool_output,
51        input.tool_call_id,
52    )
53    .fetch_one(conn)
54    .await?;
55    Ok(res)
56}
57
58pub async fn get_by_id(
59    conn: &mut PgConnection,
60    id: Uuid,
61) -> ModelResult<ChatbotConversationMessageToolOutput> {
62    let res = sqlx::query_as!(
63        ChatbotConversationMessageToolOutput,
64        r#"
65SELECT *
66FROM chatbot_conversation_message_tool_outputs
67WHERE id = $1
68  AND deleted_at IS NULL
69        "#,
70        id
71    )
72    .fetch_one(conn)
73    .await?;
74    Ok(res)
75}
76
77pub async fn delete(
78    conn: &mut PgConnection,
79    id: Uuid,
80) -> ModelResult<ChatbotConversationMessageToolOutput> {
81    let res = sqlx::query_as!(
82        ChatbotConversationMessageToolOutput,
83        r#"
84UPDATE chatbot_conversation_message_tool_outputs
85SET deleted_at = NOW()
86WHERE id = $1
87RETURNING *
88        "#,
89        id
90    )
91    .fetch_one(conn)
92    .await?;
93    Ok(res)
94}