headless_lms_models/
chatbot_conversation_messages.rs1use crate::prelude::*;
2
3#[derive(Clone, PartialEq, Deserialize, Serialize)]
4#[cfg_attr(feature = "ts_rs", derive(TS))]
5pub struct ChatbotConversationMessage {
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 conversation_id: Uuid,
11 pub message: Option<String>,
12 pub is_from_chatbot: bool,
13 pub message_is_complete: bool,
14 pub used_tokens: i32,
15 pub order_number: i32,
16}
17
18pub async fn insert(
19 conn: &mut PgConnection,
20 input: ChatbotConversationMessage,
21) -> ModelResult<ChatbotConversationMessage> {
22 let res = sqlx::query_as!(
23 ChatbotConversationMessage,
24 r#"
25INSERT INTO chatbot_conversation_messages (conversation_id, message, is_from_chatbot, message_is_complete, used_tokens, order_number)
26VALUES ($1, $2, $3, $4, $5, $6)
27RETURNING *
28 "#,
29 input.conversation_id,
30 input.message,
31 input.is_from_chatbot,
32 input.message_is_complete,
33 input.used_tokens,
34 input.order_number
35 )
36 .fetch_one(conn)
37 .await?;
38 Ok(res)
39}
40
41pub async fn get_by_conversation_id(
42 conn: &mut PgConnection,
43 conversation_id: Uuid,
44) -> ModelResult<Vec<ChatbotConversationMessage>> {
45 let mut res = sqlx::query_as!(
46 ChatbotConversationMessage,
47 r#"
48SELECT * FROM chatbot_conversation_messages
49WHERE conversation_id = $1
50 "#,
51 conversation_id
52 )
53 .fetch_all(conn)
54 .await?;
55 res.sort_by(|a, b| a.order_number.cmp(&b.order_number));
57 Ok(res)
58}
59
60pub async fn update(
61 conn: &mut PgConnection,
62 id: Uuid,
63 message: &str,
64 message_is_complete: bool,
65 used_tokens: i32,
66) -> ModelResult<ChatbotConversationMessage> {
67 let res = sqlx::query_as!(
68 ChatbotConversationMessage,
69 r#"
70UPDATE chatbot_conversation_messages
71SET message = $2, message_is_complete = $3, used_tokens = $4
72WHERE id = $1
73RETURNING *
74 "#,
75 id,
76 message,
77 message_is_complete,
78 used_tokens
79 )
80 .fetch_one(conn)
81 .await?;
82 Ok(res)
83}
84
85pub async fn delete(conn: &mut PgConnection, id: Uuid) -> ModelResult<ChatbotConversationMessage> {
86 let res = sqlx::query_as!(
87 ChatbotConversationMessage,
88 r#"
89UPDATE chatbot_conversation_messages
90SET deleted_at = NOW()
91WHERE id = $1
92RETURNING *
93 "#,
94 id
95 )
96 .fetch_one(conn)
97 .await?;
98 Ok(res)
99}