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.
46 lines
1.4 KiB
Rust
46 lines
1.4 KiB
Rust
use erp_core::error::AppError;
|
|
|
|
/// 消息中心模块错误类型。
|
|
#[derive(Debug, thiserror::Error)]
|
|
pub enum MessageError {
|
|
#[error("验证失败: {0}")]
|
|
Validation(String),
|
|
|
|
#[error("未找到: {0}")]
|
|
NotFound(String),
|
|
|
|
#[error("模板编码已存在: {0}")]
|
|
DuplicateTemplateCode(String),
|
|
|
|
#[error("渲染失败: {0}")]
|
|
TemplateRenderError(String),
|
|
|
|
#[error("版本冲突: 数据已被其他操作修改,请刷新后重试")]
|
|
VersionMismatch,
|
|
}
|
|
|
|
impl From<MessageError> for AppError {
|
|
fn from(err: MessageError) -> Self {
|
|
match err {
|
|
MessageError::Validation(msg) => AppError::Validation(msg),
|
|
MessageError::NotFound(msg) => AppError::NotFound(msg),
|
|
MessageError::DuplicateTemplateCode(msg) => AppError::Conflict(msg),
|
|
MessageError::TemplateRenderError(msg) => AppError::Internal(msg),
|
|
MessageError::VersionMismatch => AppError::VersionMismatch,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<sea_orm::TransactionError<MessageError>> for MessageError {
|
|
fn from(err: sea_orm::TransactionError<MessageError>) -> Self {
|
|
match err {
|
|
sea_orm::TransactionError::Connection(db_err) => {
|
|
MessageError::Validation(db_err.to_string())
|
|
}
|
|
sea_orm::TransactionError::Transaction(msg_err) => msg_err,
|
|
}
|
|
}
|
|
}
|
|
|
|
pub type MessageResult<T> = Result<T, MessageError>;
|