Add VersionMismatch error variant and check_version() helper to erp-core. All 13 mutable entities now enforce version checking on update/delete: - erp-auth: user, role, organization, department, position - erp-config: dictionary, dictionary_item, menu, setting, numbering_rule - erp-workflow: process_definition, process_instance, task - erp-message: message, message_subscription Update DTOs to expose version in responses and require version in update requests. HTTP 409 Conflict returned on version mismatch.
54 lines
1.7 KiB
Rust
54 lines
1.7 KiB
Rust
use erp_core::error::AppError;
|
|
|
|
/// Workflow module error types.
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub enum WorkflowError {
|
|
#[error("验证失败: {0}")]
|
|
Validation(String),
|
|
|
|
#[error("资源未找到: {0}")]
|
|
NotFound(String),
|
|
|
|
#[error("流程定义已存在: {0}")]
|
|
DuplicateDefinition(String),
|
|
|
|
#[error("流程图无效: {0}")]
|
|
InvalidDiagram(String),
|
|
|
|
#[error("流程状态错误: {0}")]
|
|
InvalidState(String),
|
|
|
|
#[error("表达式求值失败: {0}")]
|
|
ExpressionError(String),
|
|
|
|
#[error("版本冲突: 数据已被其他操作修改,请刷新后重试")]
|
|
VersionMismatch,
|
|
}
|
|
|
|
impl From<sea_orm::TransactionError<WorkflowError>> for WorkflowError {
|
|
fn from(err: sea_orm::TransactionError<WorkflowError>) -> Self {
|
|
match err {
|
|
sea_orm::TransactionError::Connection(err) => {
|
|
WorkflowError::Validation(err.to_string())
|
|
}
|
|
sea_orm::TransactionError::Transaction(inner) => inner,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<WorkflowError> for AppError {
|
|
fn from(err: WorkflowError) -> Self {
|
|
match err {
|
|
WorkflowError::Validation(s) => AppError::Validation(s),
|
|
WorkflowError::NotFound(s) => AppError::NotFound(s),
|
|
WorkflowError::DuplicateDefinition(s) => AppError::Conflict(s),
|
|
WorkflowError::InvalidDiagram(s) => AppError::Validation(s),
|
|
WorkflowError::InvalidState(s) => AppError::Validation(s),
|
|
WorkflowError::ExpressionError(s) => AppError::Validation(s),
|
|
WorkflowError::VersionMismatch => AppError::VersionMismatch,
|
|
}
|
|
}
|
|
}
|
|
|
|
pub type WorkflowResult<T> = Result<T, WorkflowError>;
|