feat: Implement album and person sharing with user search and a dedicated share dialog.

This commit is contained in:
2025-12-04 00:58:10 +01:00
parent 74d74a128b
commit 7f07169064
23 changed files with 816 additions and 66 deletions

View File

@@ -5,8 +5,8 @@ use crate::{
authz::Permission,
error::CoreResult,
models::{
Album, FaceRegion, Media, MediaBundle, Person, PersonPermission, PublicAlbumBundle, Tag,
User,
Album, AlbumPermission, FaceRegion, Media, MediaBundle, Person, PersonPermission,
PublicAlbumBundle, Tag, User,
},
schema::{
AddMediaToAlbumData, CreateAlbumData, CreateUserData, ListMediaOptions, LoginUserData,
@@ -35,6 +35,7 @@ pub trait UserService: Send + Sync {
async fn register(&self, data: CreateUserData<'_>) -> CoreResult<User>;
async fn login(&self, data: LoginUserData<'_>) -> CoreResult<String>;
async fn get_user_details(&self, user_id: uuid::Uuid) -> CoreResult<User>;
async fn search_users(&self, query: &str) -> CoreResult<Vec<User>>;
}
#[async_trait]
@@ -65,6 +66,18 @@ pub trait AlbumService: Send + Sync {
media_ids: &[Uuid],
user_id: Uuid,
) -> CoreResult<()>;
async fn get_album_shares(
&self,
album_id: Uuid,
user_id: Uuid,
) -> CoreResult<Vec<(User, AlbumPermission)>>;
async fn unshare_album(
&self,
album_id: Uuid,
target_user_id: Uuid,
owner_id: Uuid,
) -> CoreResult<()>;
}
#[async_trait]
@@ -143,6 +156,12 @@ pub trait PersonService: Send + Sync {
user_id: Uuid,
options: ListMediaOptions,
) -> CoreResult<PaginatedResponse<Media>>;
async fn get_person_shares(
&self,
person_id: Uuid,
user_id: Uuid,
) -> CoreResult<Vec<(User, PersonPermission)>>;
}
#[async_trait]