use chrono::{DateTime, Utc};
use ironflow_store::entities::User;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use validator::Validate;
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[derive(Debug, Serialize)]
pub struct UserResponse {
pub id: Uuid,
pub email: String,
pub username: String,
pub is_admin: bool,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
impl From<User> for UserResponse {
fn from(user: User) -> Self {
Self {
id: user.id,
email: user.email,
username: user.username,
is_admin: user.is_admin,
created_at: user.created_at,
updated_at: user.updated_at,
}
}
}
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[derive(Debug, Deserialize, Validate)]
pub struct CreateUserRequest {
#[validate(email)]
pub email: String,
#[validate(length(min = 3, message = "username must be at least 3 characters"))]
pub username: String,
#[validate(length(min = 8, message = "password must be at least 8 characters"))]
pub password: String,
pub is_admin: bool,
}
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[derive(Debug, Deserialize)]
pub struct UpdateRoleRequest {
pub is_admin: bool,
}