use libertas_core::models::{Album, AlbumPermission}; use serde::{Deserialize, Serialize}; use uuid::Uuid; #[derive(Serialize)] pub struct MediaResponse { pub id: uuid::Uuid, pub storage_path: String, pub original_filename: String, pub mime_type: String, pub hash: String, } #[derive(Deserialize)] pub struct ListMediaParams { pub sort_by: Option, pub order: Option, // You can add future filters here, e.g.: // pub mime_type: Option, } #[derive(Deserialize)] pub struct CreateAlbumRequest { pub name: String, pub description: Option, pub is_public: Option, } #[derive(Deserialize)] pub struct AddMediaToAlbumRequest { pub media_ids: Vec, } #[derive(Deserialize)] pub struct ShareAlbumRequest { pub target_user_id: Uuid, pub permission: AlbumPermission, } #[derive(Serialize)] pub struct AlbumResponse { pub id: Uuid, pub owner_id: Uuid, pub name: String, pub description: Option, pub is_public: bool, pub created_at: chrono::DateTime, pub updated_at: chrono::DateTime, } impl From for AlbumResponse { fn from(album: Album) -> Self { Self { id: album.id, owner_id: album.owner_id, name: album.name, description: album.description, is_public: album.is_public, created_at: album.created_at, updated_at: album.updated_at, } } } #[derive(Deserialize)] pub struct UpdateAlbumRequest { pub name: Option, pub description: Option>, pub is_public: Option, } #[derive(Deserialize)] pub struct RegisterRequest { pub username: String, pub email: String, pub password: String, } #[derive(Deserialize)] pub struct LoginRequest { pub username_or_email: String, pub password: String, } #[derive(Serialize)] pub struct LoginResponse { pub token: String, } #[derive(Serialize)] pub struct UserResponse { pub id: Uuid, pub username: String, pub email: String, }