feat: enhance album and media management with update and delete functionalities

This commit is contained in:
2025-11-02 18:46:26 +01:00
parent a36b59a5fb
commit 13bb9e6b3e
14 changed files with 334 additions and 43 deletions

View File

@@ -44,6 +44,7 @@ pub struct User {
pub storage_used: i64, // in bytes
}
#[derive(Clone, sqlx::FromRow)]
pub struct Album {
pub id: uuid::Uuid,
pub owner_id: uuid::Uuid,

View File

@@ -19,6 +19,7 @@ pub trait MediaRepository: Send + Sync {
height: Option<i32>,
location: Option<String>,
) -> CoreResult<()>;
async fn delete(&self, id: Uuid) -> CoreResult<()>;
}
#[async_trait]
@@ -36,6 +37,8 @@ pub trait AlbumRepository: Send + Sync {
async fn find_by_id(&self, id: Uuid) -> CoreResult<Option<Album>>;
async fn list_by_user(&self, user_id: Uuid) -> CoreResult<Vec<Album>>;
async fn add_media_to_album(&self, album_id: Uuid, media_ids: &[Uuid]) -> CoreResult<()>;
async fn update(&self, album: Album) -> CoreResult<()>;
async fn delete(&self, id: Uuid) -> CoreResult<()>;
}
#[async_trait]

View File

@@ -1,3 +1,6 @@
use serde::Serialize;
use uuid::Uuid;
use crate::models::AlbumPermission;
pub struct UploadMediaData<'a> {
@@ -26,6 +29,12 @@ pub struct CreateAlbumData<'a> {
pub is_public: bool,
}
pub struct UpdateAlbumData<'a> {
pub name: Option<&'a str>,
pub description: Option<Option<&'a str>>,
pub is_public: Option<bool>,
}
pub struct AddMediaToAlbumData {
pub album_id: uuid::Uuid,
pub media_ids: Vec<uuid::Uuid>,
@@ -36,3 +45,10 @@ pub struct ShareAlbumData {
pub target_user_id: uuid::Uuid,
pub permission: AlbumPermission,
}
#[derive(Serialize)]
pub struct UserResponse {
pub id: Uuid,
pub username: String,
pub email: String,
}

View File

@@ -6,7 +6,7 @@ use crate::{
models::{Album, Media, User},
schema::{
AddMediaToAlbumData, CreateAlbumData, CreateUserData, LoginUserData, ShareAlbumData,
UploadMediaData,
UpdateAlbumData, UploadMediaData,
},
};
@@ -16,6 +16,7 @@ pub trait MediaService: Send + Sync {
async fn get_media_details(&self, id: Uuid, user_id: Uuid) -> CoreResult<Media>;
async fn list_user_media(&self, user_id: Uuid) -> CoreResult<Vec<Media>>;
async fn get_media_filepath(&self, id: Uuid, user_id: Uuid) -> CoreResult<String>;
async fn delete_media(&self, id: Uuid, user_id: Uuid) -> CoreResult<()>;
}
#[async_trait]
@@ -31,6 +32,12 @@ pub trait AlbumService: Send + Sync {
async fn get_album_details(&self, album_id: Uuid, user_id: Uuid) -> CoreResult<Album>;
async fn add_media_to_album(&self, data: AddMediaToAlbumData, user_id: Uuid) -> CoreResult<()>;
async fn list_user_albums(&self, user_id: Uuid) -> CoreResult<Vec<Album>>;
async fn share_album(&self, data: ShareAlbumData, owner_id: Uuid) -> CoreResult<()>;
async fn update_album(
&self,
album_id: Uuid,
user_id: Uuid,
data: UpdateAlbumData<'_>,
) -> CoreResult<Album>;
async fn delete_album(&self, album_id: Uuid, user_id: Uuid) -> CoreResult<()>;
}