koprogo_api/application/ports/
document_repository.rs

1use crate::application::dto::PageRequest;
2use crate::domain::entities::Document;
3use async_trait::async_trait;
4use uuid::Uuid;
5
6#[async_trait]
7pub trait DocumentRepository: Send + Sync {
8    async fn create(&self, document: &Document) -> Result<Document, String>;
9    async fn find_by_id(&self, id: Uuid) -> Result<Option<Document>, String>;
10    async fn find_by_building(&self, building_id: Uuid) -> Result<Vec<Document>, String>;
11    async fn find_by_meeting(&self, meeting_id: Uuid) -> Result<Vec<Document>, String>;
12    async fn find_by_expense(&self, expense_id: Uuid) -> Result<Vec<Document>, String>;
13    async fn update(&self, document: &Document) -> Result<Document, String>;
14    async fn delete(&self, id: Uuid) -> Result<bool, String>;
15
16    /// Find all documents with pagination
17    async fn find_all_paginated(
18        &self,
19        page_request: &PageRequest,
20        organization_id: Option<Uuid>,
21    ) -> Result<(Vec<Document>, i64), String>;
22}