headless_lms_models/
chatbot_conversation_suggested_messages.rs

1use crate::prelude::*;
2use utoipa::ToSchema;
3
4#[derive(Clone, PartialEq, Deserialize, Serialize, ToSchema)]
5
6pub struct ChatbotConversationSuggestedMessage {
7    pub id: Uuid,
8    pub created_at: DateTime<Utc>,
9    pub updated_at: DateTime<Utc>,
10    pub deleted_at: Option<DateTime<Utc>>,
11    pub conversation_message_id: Uuid,
12    pub message: String,
13}
14
15pub async fn insert(
16    conn: &mut PgConnection,
17    input: ChatbotConversationSuggestedMessage,
18) -> ModelResult<ChatbotConversationSuggestedMessage> {
19    let res = sqlx::query_as!(
20        ChatbotConversationSuggestedMessage,
21        r#"
22INSERT INTO chatbot_conversation_suggested_messages (
23  conversation_message_id,
24  message
25)
26VALUES ($1, $2)
27RETURNING *
28        "#,
29        input.conversation_message_id,
30        input.message,
31    )
32    .fetch_one(conn)
33    .await?;
34    Ok(res)
35}
36
37pub async fn insert_batch(
38    conn: &mut PgConnection,
39    conversation_message_id: &Uuid,
40    input: Vec<String>,
41) -> ModelResult<Vec<ChatbotConversationSuggestedMessage>> {
42    let res = sqlx::query_as!(
43        ChatbotConversationSuggestedMessage,
44        r#"
45INSERT INTO chatbot_conversation_suggested_messages (
46  conversation_message_id,
47  message
48)
49  SELECT $1,
50  UNNEST($2::VARCHAR(32376) [])
51RETURNING *
52        "#,
53        conversation_message_id,
54        &input,
55    )
56    .fetch_all(conn)
57    .await?;
58    Ok(res)
59}
60
61pub async fn get_by_conversation_message_id(
62    conn: &mut PgConnection,
63    message_id: Uuid,
64) -> ModelResult<Vec<ChatbotConversationSuggestedMessage>> {
65    let res = sqlx::query_as!(
66        ChatbotConversationSuggestedMessage,
67        r#"
68SELECT * FROM chatbot_conversation_suggested_messages
69WHERE conversation_message_id = $1
70AND deleted_at IS NULL
71        "#,
72        message_id,
73    )
74    .fetch_all(conn)
75    .await?;
76    Ok(res)
77}