Files
Oxicloud/src/application/services/file_use_case_factory.rs
T

53 lines
1.9 KiB
Rust
Raw Normal View History

2025-03-19 19:52:12 +01:00
use std::sync::Arc;
use crate::application::ports::file_ports::FileUseCaseFactory;
2026-02-14 01:29:34 +01:00
use crate::application::services::file_management_service::FileManagementService;
use crate::application::services::file_retrieval_service::FileRetrievalService;
use crate::application::services::file_upload_service::FileUploadService;
use crate::infrastructure::repositories::pg::file_blob_read_repository::FileBlobReadRepository;
use crate::infrastructure::repositories::pg::file_blob_write_repository::FileBlobWriteRepository;
2026-05-20 22:56:00 +02:00
use crate::infrastructure::services::pg_acl_engine::PgAclEngine;
2025-03-19 19:52:12 +01:00
/// Factory for creating file use case implementations
2025-03-19 19:52:12 +01:00
pub struct AppFileUseCaseFactory {
file_read_repository: Arc<FileBlobReadRepository>,
file_write_repository: Arc<FileBlobWriteRepository>,
2026-05-20 22:56:00 +02:00
authz: Arc<PgAclEngine>,
2025-03-19 19:52:12 +01:00
}
impl AppFileUseCaseFactory {
/// Creates a new factory for file use cases
2025-03-19 19:52:12 +01:00
pub fn new(
file_read_repository: Arc<FileBlobReadRepository>,
file_write_repository: Arc<FileBlobWriteRepository>,
2026-05-20 22:56:00 +02:00
authz: Arc<PgAclEngine>,
2025-03-19 19:52:12 +01:00
) -> Self {
Self {
file_read_repository,
file_write_repository,
2026-05-20 22:56:00 +02:00
authz,
2025-03-19 19:52:12 +01:00
}
}
}
impl FileUseCaseFactory for AppFileUseCaseFactory {
fn create_file_upload_use_case(&self) -> Arc<FileUploadService> {
2025-03-19 19:52:12 +01:00
Arc::new(FileUploadService::new(self.file_write_repository.clone()))
}
2026-02-14 01:29:34 +01:00
fn create_file_retrieval_use_case(&self) -> Arc<FileRetrievalService> {
2025-03-19 19:52:12 +01:00
Arc::new(FileRetrievalService::new(self.file_read_repository.clone()))
}
2026-02-14 01:29:34 +01:00
fn create_file_management_use_case(&self) -> Arc<FileManagementService> {
2026-05-20 22:56:00 +02:00
Arc::new(FileManagementService::with_trash(
2026-02-14 01:29:34 +01:00
self.file_write_repository.clone(),
2026-05-20 22:56:00 +02:00
None,
Some(self.file_read_repository.clone()),
None,
None,
self.authz.clone(),
2026-02-14 01:29:34 +01:00
))
2025-03-19 19:52:12 +01:00
}
2026-02-14 01:29:34 +01:00
}