use chrono::NaiveDateTime; use domain::models::{FieldMapping, FileFormat, UserRole}; use uuid::Uuid; pub struct MovieInput { pub movie_id: Option, pub external_metadata_id: Option, pub manual_title: Option, pub manual_release_year: Option, pub manual_director: Option, } pub struct LogReviewCommand { pub user_id: Uuid, pub input: MovieInput, pub rating: u8, pub comment: Option, pub watched_at: NaiveDateTime, } #[derive(Clone)] pub struct SyncPosterCommand { pub movie_id: Uuid, pub external_metadata_id: String, } pub struct RegisterCommand { pub email: String, pub username: String, pub password: String, pub role: UserRole, } pub struct DeleteReviewCommand { pub review_id: Uuid, pub requesting_user_id: Uuid, } // FileFormat is now in domain::models — no longer defined here pub struct CreateImportSessionCommand { pub user_id: Uuid, pub bytes: Vec, pub format: FileFormat, } pub struct ApplyImportMappingCommand { pub user_id: Uuid, pub session_id: Uuid, pub mappings: Vec, } pub struct ExecuteImportCommand { pub user_id: Uuid, pub session_id: Uuid, pub confirmed_indices: Vec, } pub struct SaveImportProfileCommand { pub user_id: Uuid, pub session_id: Uuid, pub name: String, } pub struct ApplyImportProfileCommand { pub user_id: Uuid, pub session_id: Uuid, pub profile_id: Uuid, } pub struct DeleteImportProfileCommand { pub user_id: Uuid, pub profile_id: Uuid, } pub struct UpdateProfileCommand { pub user_id: Uuid, pub display_name: Option, pub bio: Option, pub avatar_bytes: Option>, pub avatar_content_type: Option, pub banner_bytes: Option>, pub banner_content_type: Option, pub also_known_as: Option, } pub struct UpdateProfileFieldsCommand { pub user_id: Uuid, pub fields: Vec, } pub struct EnrichMovieCommand { pub movie_id: domain::value_objects::MovieId, pub profile: domain::models::MovieProfile, } pub struct AddToWatchlistCommand { pub user_id: Uuid, pub input: MovieInput, } pub struct RemoveFromWatchlistCommand { pub user_id: Uuid, pub movie_id: Uuid, }