57 lines
1.5 KiB
Rust
57 lines
1.5 KiB
Rust
use heromodels_core::BaseModelData;
|
|
use heromodels_derive::model;
|
|
use serde::{Deserialize, Serialize};
|
|
use super::flow_step::FlowStep;
|
|
|
|
/// Represents a signing flow.
|
|
#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
|
|
#[model]
|
|
pub struct Flow {
|
|
/// Base model data (id, created_at, updated_at).
|
|
pub base_data: BaseModelData,
|
|
|
|
/// A unique UUID for the flow, for external reference.
|
|
#[index]
|
|
pub flow_uuid: String,
|
|
|
|
/// Name of the flow.
|
|
#[index]
|
|
pub name: String,
|
|
|
|
/// Current status of the flow (e.g., "Pending", "InProgress", "Completed", "Failed").
|
|
pub status: String,
|
|
|
|
/// Steps involved in this flow.
|
|
pub steps: Vec<FlowStep>,
|
|
}
|
|
|
|
impl Flow {
|
|
/// Create a new flow.
|
|
/// The `id` is the database primary key.
|
|
/// The `flow_uuid` should be a Uuid::new_v4().to_string().
|
|
pub fn new(_id: u32, flow_uuid: impl ToString) -> Self {
|
|
Self {
|
|
base_data: BaseModelData::new(),
|
|
flow_uuid: flow_uuid.to_string(),
|
|
name: String::new(), // Default name, to be set by builder
|
|
status: String::from("Pending"), // Default status, to be set by builder
|
|
steps: Vec::new(),
|
|
}
|
|
}
|
|
|
|
pub fn name(mut self, name: impl ToString) -> Self {
|
|
self.name = name.to_string();
|
|
self
|
|
}
|
|
|
|
pub fn status(mut self, status: impl ToString) -> Self {
|
|
self.status = status.to_string();
|
|
self
|
|
}
|
|
|
|
pub fn add_step(mut self, step: FlowStep) -> Self {
|
|
self.steps.push(step);
|
|
self
|
|
}
|
|
}
|