use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditEvent {
pub event_id: String,
pub execution_id: String,
pub workflow_id: String,
pub step_id: Option<String>,
pub event_type: AuditEventType,
pub actor: String,
pub timestamp: DateTime<Utc>,
pub resource: Option<String>,
pub input: Option<serde_json::Value>,
pub output: Option<serde_json::Value>,
pub outcome: AuditOutcome,
pub metadata: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AuditEventType {
WorkflowCreated,
WorkflowStarted,
WorkflowCompleted,
WorkflowFailed,
StepExecuted,
StepRetried,
StepRolledBack,
ApprovalRequested,
ApprovalDecided,
VariableSet,
TriggerFired,
ScheduleModified,
ConfigChanged,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AuditOutcome {
Success,
Failure { reason: String },
Skipped { reason: String },
Pending,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditQuery {
pub workflow_id: Option<String>,
pub execution_id: Option<String>,
pub event_types: Option<Vec<AuditEventType>>,
pub actor: Option<String>,
pub resource: Option<String>,
pub from: Option<DateTime<Utc>>,
pub to: Option<DateTime<Utc>>,
pub limit: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditRetention {
pub retain_days: u32,
pub compliance_preset: Option<CompliancePreset>,
pub archive_after_days: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CompliancePreset {
Sox,
Gdpr,
Hipaa,
Custom { retain_days: u32, description: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditImpact {
pub resource: String,
pub workflow_ids: Vec<String>,
pub execution_ids: Vec<String>,
pub event_count: usize,
pub first_touch: DateTime<Utc>,
pub last_touch: DateTime<Utc>,
}