feat: Implement album and person sharing with user search and a dedicated share dialog.
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user