use std::collections::HashMap;
use serde::Deserialize;
use serde_repr::{Deserialize_repr, Serialize_repr};
use paperless_api_macros::{Item, UpdateDto};
#[derive(Debug, Clone, Deserialize, Item, UpdateDto)]
pub struct Workflow {
#[dto(skip)]
pub id: crate::id::WorkflowId,
pub enabled: bool,
pub name: String,
pub order: Option<i32>,
#[dto(skip)] pub triggers: Vec<WorkflowTrigger>,
#[dto(skip)] pub actions: Vec<WorkflowAction>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct WorkflowTrigger {
pub id: crate::id::WorkflowTriggerId,
#[serde(rename = "type")]
pub trigger_type: WorkflowTriggerType,
}
#[derive(Debug, Clone, Deserialize)]
pub struct WorkflowAction {
pub id: crate::id::WorkflowActionId,
#[serde(rename = "type")]
pub action_type: WorkflowActionType,
pub webhook: Option<WebhookAction>,
}
#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum WorkflowTriggerType {
ProcessingStarted = 1,
DocumentAdded = 2,
DocumentUpdated = 3,
Scheduled = 4,
}
#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum WorkflowActionType {
Assign = 1,
Remove = 2,
Email = 3,
Webhook = 4,
}
#[derive(Debug, Clone, Deserialize)]
pub struct WebhookAction {
pub id: crate::id::WebhookActionId,
pub url: String,
pub use_params: bool,
pub as_json: bool,
pub include_document: bool,
pub body: Option<String>,
pub headers: Option<HashMap<String, String>>,
pub params: Option<HashMap<String, String>>,
}