headless_lms_models/
chatbot_conversation_messages_citations.rs

1use crate::prelude::*;
2
3#[derive(Clone, PartialEq, Deserialize, Serialize)]
4#[cfg_attr(feature = "ts_rs", derive(TS))]
5pub struct ChatbotConversationMessageCitation {
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_message_id: Uuid,
11    pub conversation_id: Uuid,
12    pub course_material_chapter_number: Option<i32>,
13    pub title: String,
14    pub content: String,
15    pub document_url: String,
16    pub citation_number: i32,
17}
18
19pub async fn insert(
20    conn: &mut PgConnection,
21    input: ChatbotConversationMessageCitation,
22) -> ModelResult<ChatbotConversationMessageCitation> {
23    let res = sqlx::query_as!(
24        ChatbotConversationMessageCitation,
25        r#"
26INSERT INTO chatbot_conversation_messages_citations (
27  conversation_message_id,
28  conversation_id,
29  course_material_chapter_number,
30  title,
31  content,
32  document_url,
33  citation_number)
34VALUES ($1, $2, $3, $4, $5, $6, $7)
35RETURNING *
36        "#,
37        input.conversation_message_id,
38        input.conversation_id,
39        input.course_material_chapter_number,
40        input.title,
41        input.content,
42        input.document_url,
43        input.citation_number
44    )
45    .fetch_one(conn)
46    .await?;
47    Ok(res)
48}
49
50pub async fn get_by_message_id(
51    conn: &mut PgConnection,
52    message_id: Uuid,
53) -> ModelResult<Vec<ChatbotConversationMessageCitation>> {
54    let res = sqlx::query_as!(
55        ChatbotConversationMessageCitation,
56        r#"
57SELECT * FROM chatbot_conversation_messages_citations
58WHERE conversation_message_id = $1
59AND deleted_at IS NULL
60        "#,
61        message_id
62    )
63    .fetch_all(conn)
64    .await?;
65    Ok(res)
66}
67
68pub async fn get_by_conversation_id(
69    conn: &mut PgConnection,
70    conversation_id: Uuid,
71) -> ModelResult<Vec<ChatbotConversationMessageCitation>> {
72    let res = sqlx::query_as!(
73        ChatbotConversationMessageCitation,
74        r#"
75SELECT * FROM chatbot_conversation_messages_citations
76WHERE conversation_id = $1
77AND deleted_at IS NULL
78        "#,
79        conversation_id
80    )
81    .fetch_all(conn)
82    .await?;
83    Ok(res)
84}