use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use super::datetime_format;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum AuditAction {
Create,
Update,
Delete,
AddTag,
RemoveTag,
AddRelation,
RemoveRelation,
AddToCollection,
RemoveFromCollection,
}
impl std::fmt::Display for AuditAction {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
AuditAction::Create => write!(f, "create"),
AuditAction::Update => write!(f, "update"),
AuditAction::Delete => write!(f, "delete"),
AuditAction::AddTag => write!(f, "add_tag"),
AuditAction::RemoveTag => write!(f, "remove_tag"),
AuditAction::AddRelation => write!(f, "add_relation"),
AuditAction::RemoveRelation => write!(f, "remove_relation"),
AuditAction::AddToCollection => write!(f, "add_to_collection"),
AuditAction::RemoveFromCollection => write!(f, "remove_from_collection"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct AuditEntry {
#[serde(rename = "_id")]
pub id: String,
pub entity_type: String,
pub entity_id: String,
pub action: AuditAction,
pub changes: serde_json::Value,
pub user_id: String,
#[serde(with = "datetime_format")]
pub timestamp: DateTime<Utc>,
}