use crate::{PermissionsItemDto, PermissionsQueryDto}; use serde::{Deserialize, Serialize}; use surrealdb::sql::Thing; use utoipa::ToSchema; use validator::Validate; #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct RolesRequestUpdateDto { #[validate(length(min = 1, message = "Role name must not be empty"))] pub name: Option, pub permissions: Option>, pub overwrite: Option, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct RolesRequestCreateDto { #[validate(length(min = 1, message = "Role name must not be empty"))] pub name: String, pub permissions: Vec, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] pub struct RolesListItemDto { pub id: String, pub name: String, pub permissions_count: usize, pub created_at: Option, pub updated_at: Option, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] pub struct RolesDetailItemDto { pub id: String, pub name: String, pub is_deleted: bool, pub permissions: Vec, pub created_at: Option, pub updated_at: Option, } impl RolesDetailItemDto { pub fn from(dto: &RolesDetailQueryDto) -> Self { Self { id: dto.id.id.to_raw(), name: dto.name.clone(), is_deleted: dto.is_deleted, permissions: dto .permissions .iter() .map(PermissionsItemDto::from) .collect(), created_at: dto.created_at.clone(), updated_at: dto.updated_at.clone(), } } } #[derive(Clone, Debug, Serialize, Deserialize)] pub struct RolesDetailQueryDto { pub id: Thing, pub name: String, pub permissions: Vec, pub is_deleted: bool, pub created_at: Option, pub updated_at: Option, } impl Default for RolesDetailQueryDto { fn default() -> Self { Self { id: Thing::from(("".to_string(), surrealdb::sql::Id::Number(0))), name: String::new(), permissions: Vec::new(), is_deleted: false, created_at: None, updated_at: None, } } }