use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use validator::Validate;
use ironflow_store::entities::ApprovalDelegation;
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[derive(Debug, Serialize)]
pub struct ApprovalDelegationResponse {
pub id: Uuid,
pub from_user_id: Uuid,
pub to_user_id: Uuid,
pub valid_from: DateTime<Utc>,
pub valid_until: DateTime<Utc>,
pub workflow_filter: Option<String>,
pub created_at: DateTime<Utc>,
}
impl From<ApprovalDelegation> for ApprovalDelegationResponse {
fn from(d: ApprovalDelegation) -> Self {
Self {
id: d.id,
from_user_id: d.from_user_id,
to_user_id: d.to_user_id,
valid_from: d.valid_from,
valid_until: d.valid_until,
workflow_filter: d.workflow_filter,
created_at: d.created_at,
}
}
}
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[derive(Debug, Deserialize, Validate)]
pub struct CreateApprovalDelegationRequest {
pub to_user_id: Uuid,
pub valid_from: Option<DateTime<Utc>>,
pub valid_until: DateTime<Utc>,
pub workflow_filter: Option<String>,
}
#[cfg_attr(feature = "openapi", derive(utoipa::IntoParams, utoipa::ToSchema))]
#[derive(Debug, Deserialize)]
pub struct ListApprovalDelegationsQuery {
pub from_user_id: Option<Uuid>,
pub to_user_id: Option<Uuid>,
pub page: Option<u32>,
pub per_page: Option<u32>,
}