headless_lms_models/
chatbot_conversation_suggested_messages.rs

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