Skip to main content

systemprompt_agent/repository/task/
task_messages.rs

1use super::TaskRepository;
2use crate::models::a2a::{Message, Part};
3use crate::repository::context::message::{
4    get_message_parts, get_messages_by_context, get_messages_by_task, get_next_sequence_number,
5    get_next_sequence_number_in_tx, persist_message_with_tx,
6};
7use systemprompt_traits::RepositoryError;
8
9impl TaskRepository {
10    pub async fn get_next_sequence_number(
11        &self,
12        task_id: &systemprompt_identifiers::TaskId,
13    ) -> Result<i32, RepositoryError> {
14        let pool = self.get_pg_pool()?;
15        get_next_sequence_number(&pool, task_id).await
16    }
17
18    pub async fn get_messages_by_task(
19        &self,
20        task_id: &systemprompt_identifiers::TaskId,
21    ) -> Result<Vec<Message>, RepositoryError> {
22        let pool = self.get_pg_pool()?;
23        get_messages_by_task(&pool, task_id).await
24    }
25
26    pub async fn get_message_parts(
27        &self,
28        message_id: &systemprompt_identifiers::MessageId,
29    ) -> Result<Vec<Part>, RepositoryError> {
30        let pool = self.get_pg_pool()?;
31        get_message_parts(&pool, message_id).await
32    }
33
34    pub async fn get_messages_by_context(
35        &self,
36        context_id: &systemprompt_identifiers::ContextId,
37    ) -> Result<Vec<Message>, RepositoryError> {
38        let pool = self.get_pg_pool()?;
39        get_messages_by_context(&pool, context_id).await
40    }
41
42    pub async fn get_next_sequence_number_in_tx(
43        &self,
44        tx: &mut dyn systemprompt_database::DatabaseTransaction,
45        task_id: &systemprompt_identifiers::TaskId,
46    ) -> Result<i32, RepositoryError> {
47        get_next_sequence_number_in_tx(tx, task_id).await
48    }
49
50    pub async fn persist_message_with_tx(
51        &self,
52        tx: &mut dyn systemprompt_database::DatabaseTransaction,
53        message: &Message,
54        task_id: &systemprompt_identifiers::TaskId,
55        context_id: &systemprompt_identifiers::ContextId,
56        sequence_number: i32,
57        user_id: Option<&systemprompt_identifiers::UserId>,
58        session_id: &systemprompt_identifiers::SessionId,
59        trace_id: &systemprompt_identifiers::TraceId,
60    ) -> Result<(), RepositoryError> {
61        persist_message_with_tx(
62            tx,
63            message,
64            task_id,
65            context_id,
66            sequence_number,
67            user_id,
68            session_id,
69            trace_id,
70        )
71        .await
72    }
73}