systemprompt_files/repository/ai/
mod.rs1use systemprompt_identifiers::{ContextId, SessionId, TraceId, UserId};
10
11use super::file::FileRepository;
12use crate::error::FilesResult;
13use crate::models::{File, FileMetadata};
14
15impl FileRepository {
16 pub async fn list_ai_images(&self, limit: i64, offset: i64) -> FilesResult<Vec<File>> {
17 let result = sqlx::query_as!(
18 File,
19 r#"
20 SELECT id, path, public_url, mime_type, size_bytes, ai_content, metadata as "metadata: sqlx::types::Json<FileMetadata>", user_id as "user_id: UserId", session_id as "session_id: SessionId", trace_id as "trace_id: TraceId", context_id as "context_id: ContextId", created_at, updated_at, deleted_at
21 FROM files
22 WHERE ai_content = true AND deleted_at IS NULL
23 ORDER BY created_at DESC
24 LIMIT $1 OFFSET $2
25 "#,
26 limit,
27 offset
28 )
29 .fetch_all(self.pool.as_ref())
30 .await?;
31
32 Ok(result)
33 }
34
35 pub async fn list_ai_images_by_user(
36 &self,
37 user_id: &UserId,
38 limit: i64,
39 offset: i64,
40 ) -> FilesResult<Vec<File>> {
41 let user_id_str = user_id.as_str();
42 let result = sqlx::query_as!(
43 File,
44 r#"
45 SELECT id, path, public_url, mime_type, size_bytes, ai_content, metadata as "metadata: sqlx::types::Json<FileMetadata>", user_id as "user_id: UserId", session_id as "session_id: SessionId", trace_id as "trace_id: TraceId", context_id as "context_id: ContextId", created_at, updated_at, deleted_at
46 FROM files
47 WHERE user_id = $1 AND ai_content = true AND deleted_at IS NULL
48 ORDER BY created_at DESC
49 LIMIT $2 OFFSET $3
50 "#,
51 user_id_str,
52 limit,
53 offset
54 )
55 .fetch_all(self.pool.as_ref())
56 .await?;
57
58 Ok(result)
59 }
60
61 pub async fn count_ai_images_by_user(&self, user_id: &UserId) -> FilesResult<i64> {
62 let user_id_str = user_id.as_str();
63 let count = sqlx::query_scalar!(
64 r#"
65 SELECT COUNT(*) as "count!"
66 FROM files
67 WHERE user_id = $1 AND ai_content = true AND deleted_at IS NULL
68 "#,
69 user_id_str
70 )
71 .fetch_one(self.pool.as_ref())
72 .await?;
73
74 Ok(count)
75 }
76
77 pub async fn count_ai_images(&self) -> FilesResult<i64> {
78 let count = sqlx::query_scalar!(
79 r#"
80 SELECT COUNT(*) as "count!"
81 FROM files
82 WHERE ai_content = true AND deleted_at IS NULL
83 "#
84 )
85 .fetch_one(self.pool.as_ref())
86 .await?;
87
88 Ok(count)
89 }
90}