Skip to main content

systemprompt_agent/models/
database_rows.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use sqlx::FromRow;
4use systemprompt_identifiers::{
5    AgentName, ArtifactId, CategoryId, ContextId, ExecutionStepId, McpExecutionId, MessageId,
6    PlaybookId, SessionId, SkillId, SourceId, TaskId, TraceId, UserId,
7};
8use systemprompt_models::{UserContext, UserContextWithStats};
9
10#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
11pub struct UserContextRow {
12    pub context_id: ContextId,
13    pub user_id: UserId,
14    pub name: String,
15    pub created_at: DateTime<Utc>,
16    pub updated_at: DateTime<Utc>,
17}
18
19impl From<UserContextRow> for UserContext {
20    fn from(row: UserContextRow) -> Self {
21        Self {
22            context_id: row.context_id,
23            user_id: row.user_id,
24            name: row.name,
25            created_at: row.created_at,
26            updated_at: row.updated_at,
27        }
28    }
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
32pub struct UserContextWithStatsRow {
33    pub context_id: ContextId,
34    pub user_id: UserId,
35    pub name: String,
36    pub created_at: DateTime<Utc>,
37    pub updated_at: DateTime<Utc>,
38    pub task_count: i64,
39    pub message_count: i64,
40    pub last_message_at: Option<DateTime<Utc>>,
41}
42
43impl From<UserContextWithStatsRow> for UserContextWithStats {
44    fn from(row: UserContextWithStatsRow) -> Self {
45        Self {
46            context_id: row.context_id,
47            user_id: row.user_id,
48            name: row.name,
49            created_at: row.created_at,
50            updated_at: row.updated_at,
51            task_count: row.task_count,
52            message_count: row.message_count,
53            last_message_at: row.last_message_at,
54        }
55    }
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
59pub struct TaskRow {
60    pub task_id: TaskId,
61    pub context_id: ContextId,
62    pub status: String,
63    pub status_timestamp: Option<DateTime<Utc>>,
64    pub user_id: Option<UserId>,
65    pub session_id: Option<SessionId>,
66    pub trace_id: Option<TraceId>,
67    pub agent_name: Option<AgentName>,
68    pub started_at: Option<DateTime<Utc>>,
69    pub completed_at: Option<DateTime<Utc>>,
70    pub execution_time_ms: Option<i32>,
71    pub error_message: Option<String>,
72    pub metadata: Option<serde_json::Value>,
73    pub created_at: DateTime<Utc>,
74    pub updated_at: DateTime<Utc>,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
78pub struct TaskMessage {
79    pub id: i32,
80    pub task_id: TaskId,
81    pub message_id: MessageId,
82    pub client_message_id: Option<String>,
83    pub role: String,
84    pub context_id: Option<ContextId>,
85    pub user_id: Option<UserId>,
86    pub session_id: Option<SessionId>,
87    pub trace_id: Option<TraceId>,
88    pub sequence_number: i32,
89    pub created_at: DateTime<Utc>,
90    pub updated_at: DateTime<Utc>,
91    pub metadata: Option<serde_json::Value>,
92    pub reference_task_ids: Option<Vec<String>>,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
96pub struct MessagePart {
97    pub id: i32,
98    pub message_id: MessageId,
99    pub task_id: TaskId,
100    pub part_kind: String,
101    pub sequence_number: i32,
102    pub text_content: Option<String>,
103    pub file_name: Option<String>,
104    pub file_mime_type: Option<String>,
105    pub file_uri: Option<String>,
106    pub file_bytes: Option<String>,
107    pub data_content: Option<serde_json::Value>,
108    pub metadata: Option<serde_json::Value>,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
112pub struct SkillRow {
113    pub skill_id: SkillId,
114    pub file_path: String,
115    pub name: String,
116    pub description: String,
117    pub instructions: String,
118    pub enabled: bool,
119    pub tags: Option<Vec<String>>,
120    pub category_id: Option<CategoryId>,
121    pub source_id: SourceId,
122    pub created_at: DateTime<Utc>,
123    pub updated_at: DateTime<Utc>,
124}
125
126#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
127pub struct PlaybookRow {
128    pub playbook_id: PlaybookId,
129    pub file_path: String,
130    pub name: String,
131    pub description: String,
132    pub instructions: String,
133    pub enabled: bool,
134    pub tags: Option<Vec<String>>,
135    pub category: String,
136    pub domain: String,
137    pub source_id: SourceId,
138    pub created_at: DateTime<Utc>,
139    pub updated_at: DateTime<Utc>,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
143pub struct ArtifactRow {
144    pub artifact_id: ArtifactId,
145    pub task_id: TaskId,
146    pub context_id: Option<ContextId>,
147    pub name: Option<String>,
148    pub description: Option<String>,
149    pub artifact_type: String,
150    pub source: Option<String>,
151    pub tool_name: Option<String>,
152    pub mcp_execution_id: Option<McpExecutionId>,
153    pub fingerprint: Option<String>,
154    pub skill_id: Option<SkillId>,
155    pub skill_name: Option<String>,
156    pub metadata: Option<serde_json::Value>,
157    pub created_at: DateTime<Utc>,
158}
159
160#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
161pub struct ArtifactPartRow {
162    pub id: i32,
163    pub artifact_id: ArtifactId,
164    pub context_id: ContextId,
165    pub part_kind: String,
166    pub sequence_number: i32,
167    pub text_content: Option<String>,
168    pub file_name: Option<String>,
169    pub file_mime_type: Option<String>,
170    pub file_uri: Option<String>,
171    pub file_bytes: Option<String>,
172    pub data_content: Option<serde_json::Value>,
173    pub metadata: Option<serde_json::Value>,
174}
175
176#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
177pub struct ExecutionStepBatchRow {
178    pub step_id: ExecutionStepId,
179    pub task_id: TaskId,
180    pub status: String,
181    pub content: serde_json::Value,
182    pub started_at: DateTime<Utc>,
183    pub completed_at: Option<DateTime<Utc>>,
184    pub duration_ms: Option<i32>,
185    pub error_message: Option<String>,
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
189pub struct PushNotificationConfigRow {
190    pub id: String,
191    pub task_id: TaskId,
192    pub url: String,
193    pub endpoint: String,
194    pub token: Option<String>,
195    pub headers: Option<serde_json::Value>,
196    pub authentication: Option<serde_json::Value>,
197    pub created_at: DateTime<Utc>,
198    pub updated_at: DateTime<Utc>,
199}