feat: seed default plugins/pipelines, auto-enqueue jobs on asset ingest
- Migration seeds metadata_extractor, sidecar_sync, no_op plugins - Pipelines: extract_metadata → metadata_extractor, sync_sidecar → sidecar_sync - Worker reacts to AssetIngested → enqueues ExtractMetadata job - Worker reacts to SidecarSyncRequested → enqueues SyncSidecar job - Closes the ingest-to-processing loop end-to-end
This commit is contained in:
@@ -26,8 +26,9 @@ pub async fn build_app(config: &Config) -> Result<Router> {
|
||||
Arc::new(event_transport::EventPublisherAdapter::new(transport));
|
||||
let event_store: Arc<dyn domain::ports::EventStore> =
|
||||
Arc::new(adapters_postgres::PostgresEventStore::new(pool.clone()));
|
||||
let event_publisher: Arc<dyn domain::ports::EventPublisher> =
|
||||
Arc::new(event_transport::CompositeEventPublisher::new(nats_publisher, event_store));
|
||||
let event_publisher: Arc<dyn domain::ports::EventPublisher> = Arc::new(
|
||||
event_transport::CompositeEventPublisher::new(nats_publisher, event_store),
|
||||
);
|
||||
|
||||
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));
|
||||
@@ -35,7 +36,8 @@ pub async fn build_app(config: &Config) -> Result<Router> {
|
||||
// Build per-context services
|
||||
let identity = services::identity::build(&pool, &config.jwt_secret);
|
||||
let (storage_repos, storage) = services::storage::build(&pool);
|
||||
let catalog = services::catalog::build(&pool, &storage_repos, file_storage, event_publisher.clone());
|
||||
let catalog =
|
||||
services::catalog::build(&pool, &storage_repos, file_storage, event_publisher.clone());
|
||||
let organization = services::organization::build(&pool);
|
||||
let sidecar = services::sidecar::build(&pool);
|
||||
let processing = services::processing::build(&pool, event_publisher.clone());
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use adapters_postgres::{
|
||||
PgPool, PostgresAssetMetadataRepository, PostgresAssetRepository,
|
||||
PostgresDuplicateRepository, PostgresIngestTransaction,
|
||||
PgPool, PostgresAssetMetadataRepository, PostgresAssetRepository, PostgresDuplicateRepository,
|
||||
PostgresIngestTransaction,
|
||||
};
|
||||
use adapters_storage::LocalFileStorage;
|
||||
use application::catalog::{
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use adapters_postgres::{
|
||||
PgPool, PostgresShareRepository, PostgresVisibilityFilterRepository,
|
||||
};
|
||||
use adapters_postgres::{PgPool, PostgresShareRepository, PostgresVisibilityFilterRepository};
|
||||
use application::sharing::{
|
||||
AccessSharedResourceHandler, GenerateShareLinkHandler, RevokeShareHandler,
|
||||
ShareResourceHandler,
|
||||
AccessSharedResourceHandler, GenerateShareLinkHandler, RevokeShareHandler, ShareResourceHandler,
|
||||
};
|
||||
use domain::ports::EventPublisher;
|
||||
use presentation::state::SharingHandlers;
|
||||
|
||||
@@ -19,8 +19,10 @@ pub fn build(pool: &PgPool) -> (StorageRepos, StorageHandlers) {
|
||||
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, path_repo.clone()));
|
||||
let register_library_path = Arc::new(RegisterLibraryPathHandler::new(
|
||||
volume_repo,
|
||||
path_repo.clone(),
|
||||
));
|
||||
let check_quota = Arc::new(CheckQuotaHandler::new(quota_repo, ledger_repo));
|
||||
|
||||
let handlers = StorageHandlers {
|
||||
|
||||
Reference in New Issue
Block a user