settings_dto.rs 77 lignes · 2193 octets
//! Settings DTOs
//! Feature 009: Admin & Settings - Phase 7, 8, 9
//!
//! Data Transfer Objects for user settings endpoints

use serde::{Deserialize, Serialize};

/// Request DTO for profile update (Phase 7)
#[derive(Debug, Deserialize, Serialize)]
pub struct UpdateProfileRequest {
    /// Optional new username
    pub username: Option<String>,
    /// Optional new email
    pub email: Option<String>,
}

/// Request DTO for password change (Phase 8)
#[derive(Debug, Deserialize, Serialize)]
pub struct ChangePasswordRequest {
    /// Current password (for verification)
    pub old_password: String,
    /// New password
    pub new_password: String,
    /// Password confirmation
    pub confirm_password: String,
}

/// Response DTO for password change
#[derive(Debug, Serialize)]
pub struct ChangePasswordResponse {
    /// Success message
    pub message: String,
}

/// Active session information (Phase 9)
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActiveSession {
    /// Session/refresh token ID
    pub id: uuid::Uuid,
    /// Device/browser information
    pub device_info: Option<String>,
    /// IP address
    pub ip_address: Option<String>,
    /// Last activity timestamp
    pub last_activity: chrono::DateTime<chrono::Utc>,
    /// Session creation timestamp
    pub created_at: chrono::DateTime<chrono::Utc>,
    /// Whether this is the current session
    pub is_current: bool,
}

/// List of active sessions (Phase 9)
#[derive(Debug, Serialize)]
pub struct ActiveSessionsResponse {
    /// List of active sessions
    pub sessions: Vec<ActiveSession>,
}

/// Request DTO for user preferences update (Phase 10 - US10)
#[derive(Debug, Deserialize, Serialize)]
pub struct UpdatePreferencesRequest {
    /// Theme preference: "light", "dark", or "auto"
    pub theme: Option<String>,
    /// Language preference: "fr" or "en"
    pub language: Option<String>,
}

/// Response DTO for user preferences (Phase 10 - US10)
#[derive(Debug, Serialize)]
pub struct UserPreferencesResponse {
    /// Current theme
    pub theme: String,
    /// Current language
    pub language: String,
    /// Success message if just updated
    pub message: Option<String>,
}