Appearance
变更操作
本文档引用的文件
目录
变更操作概述
本节介绍用户模块中变更操作的整体架构和实现原理。系统通过GraphQL Mutation实现创建、更新、删除等变更操作,采用分层架构设计,包括GraphQL层、Resolver层、Service层和DAO层。各层职责分明,GraphQL层负责接口定义和请求处理,Resolver层负责权限验证和上下文管理,Service层负责业务逻辑处理,DAO层负责数据访问。
Section sources
事务处理机制
事务管理实现
系统在usr_resolver.rs
中实现了完整的事务处理机制。所有变更操作都通过Ctx::builder(ctx).with_tran()
启用事务支持,确保操作的原子性。事务管理由context.rs
中的Ctx
结构体实现,通过begin()
方法开启事务,ok()
方法根据操作结果决定提交或回滚。
Diagram sources
事务生命周期
事务的生命周期由Ctx
结构体管理,具体流程如下:
- 请求到达时,通过
Ctx::builder()
创建上下文 - 调用
with_tran()
方法标记需要事务支持 - 在
scope()
执行期间,自动调用begin()
开启事务 - 操作完成后,根据结果调用
commit
提交或rollback
回滚 - 异常情况下自动回滚,确保数据一致性
Section sources
Mutation类型实现
GraphQL Mutation定义
在usr_graphql.rs
中,UsrGenMutation
结构体定义了所有变更操作的GraphQL接口。每个方法都使用#[graphql(name = "...")]
属性指定GraphQL字段名称,通过async fn
定义异步方法处理请求。
Diagram sources
方法调用链
GraphQL Mutation方法的调用链遵循统一模式:GraphQL层接收请求,创建带事务的上下文,调用Resolver层方法,最终由DAO层执行数据库操作。
Diagram sources
Section sources
数据验证流程
创建操作验证
创建用户时,系统执行多层验证:
- 空值检查:确保输入不为空
- 唯一性检查:通过
find_by_unique_usr
验证用户名等字段的唯一性 - 权限验证:检查当前用户是否有创建权限
- 数据格式验证:验证邮箱、手机号等字段格式
Diagram sources
更新操作验证
更新用户时,系统执行以下验证流程:
- 存在性检查:通过
find_by_id_usr
验证用户是否存在 - 锁定状态检查:通过
get_is_locked_by_id_usr
验证用户是否被锁定 - 权限验证:检查当前用户是否有编辑权限
- 数据一致性检查:确保更新后的数据满足业务规则
Diagram sources
删除操作验证
删除用户时,系统执行严格的验证流程:
- 存在性检查:验证用户是否存在
- 锁定状态检查:已锁定的用户不能删除
- 权限验证:检查当前用户是否有删除权限
- 关联数据检查:确保删除操作不会破坏数据完整性
Diagram sources
Section sources
复杂变更场景
批量操作实现
系统支持批量创建、更新、删除等操作,通过批量处理提高性能。批量操作在单个事务中执行,确保原子性。
Diagram sources
级联更新处理
系统在删除或更新用户时,自动处理关联数据的级联操作。例如删除用户时,同时删除其角色、部门等关联关系。
Diagram sources
Section sources
错误回滚与一致性保障
错误处理机制
系统采用统一的错误处理机制,所有异常都通过Result<T, E>
类型返回。在context.rs
的ok()
方法中,根据错误类型决定是否回滚事务。
Diagram sources
数据一致性保障
系统通过多种机制保障数据一致性:
- 事务机制:确保操作的原子性
- 锁定机制:防止并发修改
- 缓存一致性:操作后自动清除相关缓存
- 日志记录:详细记录操作过程,便于追踪
Diagram sources
Section sources