chore(infra): add gRPC layer, update protobufs, remove immediate module
- Add gRPC service modules: auth, channel, channel settings, member, permission - Update protobuf definitions and generated code - Remove immediate/ real-time module (superseded by IM service) - Update etcd discovery and registration - Update cache, error, config, and build infrastructure - Add ADR documentation - Update OpenAPI spec
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# ADR-005: 统一错误处理策略 / Unified Error Handling Strategy
|
||||
|
||||
## 状态 / Status
|
||||
|
||||
**Accepted**
|
||||
|
||||
**日期 / Date**: 2024-01-01
|
||||
|
||||
## 背景 / Context
|
||||
|
||||
平台需要统一的错误处理机制,确保错误信息对用户友好,同时保留足够的调试信息。
|
||||
|
||||
The platform needs a unified error handling mechanism that provides user-friendly error messages while retaining sufficient debugging information.
|
||||
|
||||
## 决策 / Decision
|
||||
|
||||
使用 **AppError 枚举 + AppResult 类型别名** 作为统一错误处理策略。
|
||||
|
||||
Use **AppError enum + AppResult type alias** as the unified error handling strategy.
|
||||
|
||||
## 考虑的方案 / Considered Options
|
||||
|
||||
1. **自定义枚举 (AppError)** — 类型安全、可扩展
|
||||
2. **anyhow** — 简单但类型信息丢失
|
||||
3. **thiserror + 手动实现** — 灵活但工作量大
|
||||
|
||||
## 后果 / Consequences
|
||||
|
||||
### 正面 / Positive
|
||||
|
||||
- 类型安全的错误处理 / Type-safe error handling
|
||||
- 统一的错误响应格式 / Unified error response format
|
||||
- 便于错误分类和监控 / Easy error classification and monitoring
|
||||
- 与 actix-web 集成良好 / Good integration with actix-web
|
||||
|
||||
### 负面 / Negative
|
||||
|
||||
- 需要维护错误枚举 / Need to maintain error enum
|
||||
- 新增错误类型需要更新枚举 / New error types require enum updates
|
||||
|
||||
## 实现细节 / Implementation Details
|
||||
|
||||
```rust
|
||||
// AppError 定义
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum AppError {
|
||||
#[error("User not found")]
|
||||
UserNotFound,
|
||||
#[error("Invalid password")]
|
||||
InvalidPassword,
|
||||
#[error("Database error: {0}")]
|
||||
Database(#[from] sqlx::Error),
|
||||
// ...
|
||||
}
|
||||
|
||||
// AppResult 类型别名
|
||||
pub type AppResult<T> = Result<T, AppError>;
|
||||
```
|
||||
|
||||
## 错误码映射 / Error Code Mapping
|
||||
|
||||
| Postgres Code | 含义 | HTTP Status |
|
||||
|---|---|---|
|
||||
| 23505 | 唯一约束违反 | 409 Conflict |
|
||||
| 23503 | 外键约束违反 | 400 Bad Request |
|
||||
| 23514 | 检查约束违反 | 400 Bad Request |
|
||||
| 23502 | 非空约束违反 | 400 Bad Request |
|
||||
| 23P01 | 排他约束违反 | 409 Conflict |
|
||||
Reference in New Issue
Block a user