47 lines
1.8 KiB
Rust
47 lines
1.8 KiB
Rust
use std::sync::Arc;
|
|
|
|
use adapters_postgres::{
|
|
PgPool, PostgresIngestSessionRepository, PostgresLibraryPathRepository,
|
|
PostgresQuotaRepository, PostgresStorageVolumeRepository, PostgresUsageLedgerRepository,
|
|
};
|
|
use application::storage::{CheckQuotaHandler, RegisterLibraryPathHandler, RegisterVolumeHandler};
|
|
use presentation::state::StorageHandlers;
|
|
|
|
/// Shared storage repos needed by other bounded contexts (catalog ingest, etc.).
|
|
pub struct StorageRepos {
|
|
pub volume_repo: Arc<PostgresStorageVolumeRepository>,
|
|
pub path_repo: Arc<PostgresLibraryPathRepository>,
|
|
pub session_repo: Arc<PostgresIngestSessionRepository>,
|
|
pub quota_repo: Arc<PostgresQuotaRepository>,
|
|
pub ledger_repo: Arc<PostgresUsageLedgerRepository>,
|
|
}
|
|
|
|
pub fn build(pool: &PgPool) -> (StorageRepos, StorageHandlers) {
|
|
let volume_repo = Arc::new(PostgresStorageVolumeRepository::new(pool.clone()));
|
|
let path_repo = Arc::new(PostgresLibraryPathRepository::new(pool.clone()));
|
|
let session_repo = Arc::new(PostgresIngestSessionRepository::new(pool.clone()));
|
|
let quota_repo = Arc::new(PostgresQuotaRepository::new(pool.clone()));
|
|
let ledger_repo = Arc::new(PostgresUsageLedgerRepository::new(pool.clone()));
|
|
|
|
let register_volume = Arc::new(RegisterVolumeHandler::new(volume_repo.clone()));
|
|
let register_library_path =
|
|
Arc::new(RegisterLibraryPathHandler::new(volume_repo.clone(), path_repo.clone()));
|
|
let check_quota = Arc::new(CheckQuotaHandler::new(quota_repo.clone(), ledger_repo.clone()));
|
|
|
|
let handlers = StorageHandlers {
|
|
register_volume,
|
|
register_library_path,
|
|
check_quota,
|
|
};
|
|
|
|
let repos = StorageRepos {
|
|
volume_repo,
|
|
path_repo,
|
|
session_repo,
|
|
quota_repo,
|
|
ledger_repo,
|
|
};
|
|
|
|
(repos, handlers)
|
|
}
|