refactor: clean up presentation layer — AppState grouping, multipart extractor, thin handlers
This commit is contained in:
@@ -16,15 +16,18 @@ use adapters_postgres::{
|
||||
connect, run_migrations,
|
||||
};
|
||||
|
||||
use adapters_storage::{LocalFileStorage, ObjectStorageAdapter, StorageConfig, build_store};
|
||||
use adapters_storage::LocalFileStorage;
|
||||
|
||||
use application::{
|
||||
catalog::{GetAssetHandler, GetTimelineHandler, UpdateMetadataHandler},
|
||||
catalog::{GetAssetHandler, GetTimelineHandler, ReadAssetFileHandler, UpdateMetadataHandler},
|
||||
identity::{GetProfileHandler, LoginUserHandler, RegisterUserHandler},
|
||||
organization::{CreateAlbumHandler, GetAlbumHandler, ManageAlbumEntriesHandler},
|
||||
storage::{IngestAssetHandler, RegisterLibraryPathHandler, RegisterVolumeHandler},
|
||||
};
|
||||
use presentation::{routes::app_router, state::AppState};
|
||||
use presentation::{
|
||||
routes::app_router,
|
||||
state::{AppState, CatalogHandlers, IdentityHandlers, OrganizationHandlers, StorageHandlers},
|
||||
};
|
||||
|
||||
use crate::config::Config;
|
||||
use crate::log_event_publisher::LogEventPublisher;
|
||||
@@ -46,11 +49,6 @@ pub async fn build_app(config: &Config) -> Result<Router> {
|
||||
));
|
||||
let get_profile_handler = Arc::new(GetProfileHandler::new(user_repo));
|
||||
|
||||
// Object storage
|
||||
let storage_cfg = StorageConfig::from_env()?;
|
||||
let store = build_store(&storage_cfg)?;
|
||||
let storage = Arc::new(ObjectStorageAdapter::new(store, &storage_cfg.prefix)?);
|
||||
|
||||
// Repos
|
||||
let album_repo = Arc::new(PostgresAlbumRepository::new(pool.clone()));
|
||||
let asset_repo = Arc::new(PostgresAssetRepository::new(pool.clone()));
|
||||
@@ -62,7 +60,7 @@ pub async fn build_app(config: &Config) -> Result<Router> {
|
||||
let ledger_repo = Arc::new(PostgresUsageLedgerRepository::new(pool.clone()));
|
||||
let event_publisher: Arc<LogEventPublisher> = Arc::new(LogEventPublisher);
|
||||
|
||||
// File storage for ingest
|
||||
// File storage
|
||||
let storage_path = std::env::var("STORAGE_PATH").unwrap_or_else(|_| "./data/media".to_string());
|
||||
let file_storage: Arc<LocalFileStorage> = Arc::new(LocalFileStorage::new(&storage_path));
|
||||
|
||||
@@ -94,30 +92,45 @@ pub async fn build_app(config: &Config) -> Result<Router> {
|
||||
metadata_repo,
|
||||
event_publisher,
|
||||
));
|
||||
let read_asset_file_handler = Arc::new(ReadAssetFileHandler::new(asset_repo, file_storage));
|
||||
|
||||
// Storage handlers
|
||||
let register_volume_handler = Arc::new(RegisterVolumeHandler::new(volume_repo.clone()));
|
||||
let register_library_path_handler =
|
||||
Arc::new(RegisterLibraryPathHandler::new(volume_repo, path_repo));
|
||||
|
||||
let state = AppState::new(
|
||||
register_handler,
|
||||
login_handler,
|
||||
get_profile_handler,
|
||||
issuer,
|
||||
storage,
|
||||
create_album_handler,
|
||||
get_album_handler,
|
||||
manage_album_entries_handler,
|
||||
ingest_asset_handler,
|
||||
get_asset_handler,
|
||||
get_timeline_handler,
|
||||
update_metadata_handler,
|
||||
register_volume_handler,
|
||||
register_library_path_handler,
|
||||
file_storage,
|
||||
asset_repo,
|
||||
);
|
||||
let identity = IdentityHandlers {
|
||||
register: register_handler,
|
||||
login: login_handler,
|
||||
get_profile: get_profile_handler,
|
||||
};
|
||||
|
||||
let catalog = CatalogHandlers {
|
||||
ingest_asset: ingest_asset_handler,
|
||||
get_asset: get_asset_handler,
|
||||
get_timeline: get_timeline_handler,
|
||||
update_metadata: update_metadata_handler,
|
||||
read_asset_file: read_asset_file_handler,
|
||||
};
|
||||
|
||||
let organization = OrganizationHandlers {
|
||||
create_album: create_album_handler,
|
||||
get_album: get_album_handler,
|
||||
manage_album_entries: manage_album_entries_handler,
|
||||
};
|
||||
|
||||
let storage_handlers = StorageHandlers {
|
||||
register_volume: register_volume_handler,
|
||||
register_library_path: register_library_path_handler,
|
||||
};
|
||||
|
||||
let state = AppState {
|
||||
identity,
|
||||
catalog,
|
||||
organization,
|
||||
storage: storage_handlers,
|
||||
token_issuer: issuer,
|
||||
};
|
||||
|
||||
let cors = CorsLayer::new()
|
||||
.allow_origin(
|
||||
|
||||
Reference in New Issue
Block a user