Files
imphnen-backend-service/imphnen-iam/src/v1/roles/roles_schema.rs
T

51 lines
1.3 KiB
Rust
Raw Normal View History

2025-12-01 00:20:42 +07:00
use super::RolesListItemDto;
use imphnen_entities::seaorm::auth::roles::Model as RolesModel;
2025-03-23 20:42:38 +07:00
use serde::{Deserialize, Serialize};
2025-12-01 00:20:42 +07:00
use uuid::Uuid;
2025-03-23 20:42:38 +07:00
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct RolesSchema {
2025-12-01 00:20:42 +07:00
pub id: Uuid,
2025-03-23 20:42:38 +07:00
pub name: String,
2025-12-01 00:20:42 +07:00
pub description: String,
pub is_system_role: bool,
pub is_default: bool,
pub permissions: Vec<String>,
pub created_at: String,
pub updated_at: String,
pub deleted_at: Option<String>,
2025-03-23 20:42:38 +07:00
}
2025-12-01 00:20:42 +07:00
impl From<&RolesModel> for RolesSchema {
fn from(model: &RolesModel) -> Self {
let permissions = model.permissions
.as_ref()
.and_then(|p| serde_json::from_value(p.clone()).ok())
.unwrap_or_default();
Self {
id: model.id,
name: model.name.clone(),
description: model.description.clone(),
is_system_role: model.is_system_role,
is_default: model.is_default,
permissions,
created_at: model.created_at.to_rfc3339(),
updated_at: model.updated_at.to_rfc3339(),
deleted_at: model.deleted_at.map(|dt| dt.to_rfc3339()),
2025-03-23 20:42:38 +07:00
}
}
}
2025-05-18 03:12:20 +07:00
impl RolesSchema {
2025-05-20 01:49:50 +07:00
pub fn list(&self) -> RolesListItemDto {
RolesListItemDto {
2025-12-01 00:20:42 +07:00
id: self.id.to_string(),
2025-05-20 01:49:50 +07:00
name: self.name.clone(),
permissions_count: self.permissions.len(),
2025-12-01 00:20:42 +07:00
created_at: Some(self.created_at.clone()),
updated_at: Some(self.updated_at.clone()),
2025-05-20 01:49:50 +07:00
}
}
2025-05-18 03:12:20 +07:00
}