Skip to main content

systemprompt_files/models/
file.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use sqlx::FromRow;
4use systemprompt_identifiers::{ContextId, FileId, SessionId, TraceId, UserId};
5
6use super::metadata::FileMetadata;
7use crate::error::FilesResult;
8
9#[derive(Debug, Clone, Serialize, Deserialize, FromRow)]
10pub struct File {
11    pub id: uuid::Uuid,
12    pub path: String,
13    pub public_url: String,
14    pub mime_type: String,
15    pub size_bytes: Option<i64>,
16    pub ai_content: bool,
17    pub metadata: serde_json::Value,
18    pub user_id: Option<UserId>,
19    pub session_id: Option<SessionId>,
20    pub trace_id: Option<TraceId>,
21    pub context_id: Option<ContextId>,
22    pub created_at: DateTime<Utc>,
23    pub updated_at: DateTime<Utc>,
24    pub deleted_at: Option<DateTime<Utc>>,
25}
26
27impl File {
28    pub fn id(&self) -> FileId {
29        FileId::new(self.id.to_string())
30    }
31
32    pub fn metadata(&self) -> FilesResult<FileMetadata> {
33        serde_json::from_value(self.metadata.clone()).map_err(Into::into)
34    }
35}