systemprompt-files 0.1.22

File management module for systemprompt.io
Documentation
use anyhow::Result;
use systemprompt_database::DbPool;
use systemprompt_identifiers::{FileId, UserId};

use crate::models::{File, FileMetadata};
use crate::repository::{FileRepository, FileStats, InsertFileRequest};

#[derive(Debug, Clone)]
pub struct FileService {
    repository: FileRepository,
}

impl FileService {
    pub fn new(db: &DbPool) -> Result<Self> {
        Ok(Self {
            repository: FileRepository::new(db)?,
        })
    }

    pub const fn from_repository(repository: FileRepository) -> Self {
        Self { repository }
    }

    pub const fn repository(&self) -> &FileRepository {
        &self.repository
    }

    pub async fn insert(&self, request: InsertFileRequest) -> Result<FileId> {
        self.repository.insert(request).await
    }

    pub async fn insert_file(&self, file: &File) -> Result<FileId> {
        self.repository.insert_file(file).await
    }

    pub async fn find_by_id(&self, id: &FileId) -> Result<Option<File>> {
        self.repository.find_by_id(id).await
    }

    pub async fn find_by_path(&self, path: &str) -> Result<Option<File>> {
        self.repository.find_by_path(path).await
    }

    pub async fn list_by_user(
        &self,
        user_id: &UserId,
        limit: i64,
        offset: i64,
    ) -> Result<Vec<File>> {
        self.repository.list_by_user(user_id, limit, offset).await
    }

    pub async fn list_all(&self, limit: i64, offset: i64) -> Result<Vec<File>> {
        self.repository.list_all(limit, offset).await
    }

    pub async fn delete(&self, id: &FileId) -> Result<()> {
        self.repository.delete(id).await
    }

    pub async fn update_metadata(&self, id: &FileId, metadata: &FileMetadata) -> Result<()> {
        self.repository.update_metadata(id, metadata).await
    }

    pub async fn get_stats(&self) -> Result<FileStats> {
        self.repository.get_stats().await
    }

    pub async fn search_by_path(&self, query: &str, limit: i64) -> Result<Vec<File>> {
        self.repository.search_by_path(query, limit).await
    }
}