feat: add sharing endpoints — share, link, revoke, public access

This commit is contained in:
2026-05-31 10:50:28 +02:00
parent 2d9dd2c2d0
commit 3399e25441
11 changed files with 814 additions and 5 deletions

View File

@@ -12,8 +12,8 @@ use adapters_auth::{BcryptPasswordHasher, JwtTokenIssuer};
use adapters_postgres::{
PostgresAlbumRepository, PostgresAssetMetadataRepository, PostgresAssetRepository,
PostgresIngestSessionRepository, PostgresLibraryPathRepository, PostgresQuotaRepository,
PostgresStorageVolumeRepository, PostgresUsageLedgerRepository, PostgresUserRepository,
connect, run_migrations,
PostgresShareRepository, PostgresStorageVolumeRepository, PostgresUsageLedgerRepository,
PostgresUserRepository, PostgresVisibilityFilterRepository, connect, run_migrations,
};
use adapters_storage::LocalFileStorage;
@@ -22,11 +22,18 @@ use application::{
catalog::{GetAssetHandler, GetTimelineHandler, ReadAssetFileHandler, UpdateMetadataHandler},
identity::{GetProfileHandler, LoginUserHandler, RegisterUserHandler},
organization::{CreateAlbumHandler, GetAlbumHandler, ManageAlbumEntriesHandler},
sharing::{
AccessSharedResourceHandler, GenerateShareLinkHandler, RevokeShareHandler,
ShareResourceHandler,
},
storage::{IngestAssetHandler, RegisterLibraryPathHandler, RegisterVolumeHandler},
};
use presentation::{
routes::app_router,
state::{AppState, CatalogHandlers, IdentityHandlers, OrganizationHandlers, StorageHandlers},
state::{
AppState, CatalogHandlers, IdentityHandlers, OrganizationHandlers, SharingHandlers,
StorageHandlers,
},
};
use crate::config::Config;
@@ -90,10 +97,22 @@ pub async fn build_app(config: &Config) -> Result<Router> {
let update_metadata_handler = Arc::new(UpdateMetadataHandler::new(
asset_repo.clone(),
metadata_repo,
event_publisher,
event_publisher.clone(),
));
let read_asset_file_handler = Arc::new(ReadAssetFileHandler::new(asset_repo, file_storage));
// Sharing repos & handlers
let share_repo = Arc::new(PostgresShareRepository::new(pool.clone()));
let _visibility_filter_repo = Arc::new(PostgresVisibilityFilterRepository::new(pool));
let share_resource_handler = Arc::new(ShareResourceHandler::new(
share_repo.clone(),
event_publisher.clone(),
));
let generate_link_handler = Arc::new(GenerateShareLinkHandler::new(share_repo.clone()));
let revoke_handler = Arc::new(RevokeShareHandler::new(share_repo.clone(), event_publisher));
let access_handler = Arc::new(AccessSharedResourceHandler::new(share_repo));
// Storage handlers
let register_volume_handler = Arc::new(RegisterVolumeHandler::new(volume_repo.clone()));
let register_library_path_handler =
@@ -124,11 +143,19 @@ pub async fn build_app(config: &Config) -> Result<Router> {
register_library_path: register_library_path_handler,
};
let sharing = SharingHandlers {
share_resource: share_resource_handler,
generate_link: generate_link_handler,
revoke: revoke_handler,
access: access_handler,
};
let state = AppState {
identity,
catalog,
organization,
storage: storage_handlers,
sharing,
token_issuer: issuer,
};