feat: enhance album and media management with update and delete functionalities
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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<()>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user