Files
deepdata/backend/shared/README-zh.md
T

145 lines
3.3 KiB
Markdown

# 共享库
## 概述
共享库包含所有后端服务共用的代码和工具,包括领域构建块、异常处理、JWT 工具等。
## 架构
```
backend/shared/
├── domain-common/ # DDD 构建块、异常处理
│ └── src/main/java/com/deepdata/common/
│ ├── infrastructure/exception/ # BusinessException, ErrorCode
│ ├── setting/ # 系统参数、模型配置
│ └── domain/ # Base entities, repositories
└── security-common/ # JWT 工具、认证辅助
└── src/main/java/com/deepdata/security/
```
## 库
### 1. domain-common
#### BusinessException
统一的业务异常处理机制:
```java
// 抛出业务异常
throw BusinessException.of(ErrorCode.DATASET_NOT_FOUND)
.withDetail("dataset_id", datasetId);
// 带上下文的异常
throw BusinessException.of(ErrorCode.VALIDATION_FAILED)
.withDetail("field", "email")
.withDetail("reason", "Invalid format");
```
#### ErrorCode
错误码枚举接口:
```java
public interface ErrorCode {
String getCode();
String getMessage();
HttpStatus getHttpStatus();
}
// 示例
public enum CommonErrorCode implements ErrorCode {
SUCCESS("0000", "Success", HttpStatus.OK),
DATABASE_NOT_FOUND("4001", "Database not found", HttpStatus.NOT_FOUND);
}
```
#### BaseEntity
所有实体的基类,包含审计字段:
```java
@Data
@EqualsAndHashCode(callSuper = true)
public class BaseEntity<T> implements Serializable {
@TableId(type = IdType.ASSIGN_ID)
private String id;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createdAt;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updatedAt;
@TableField(fill = FieldFill.INSERT)
private String createdBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy;
}
```
### 2. security-common
#### JWT 工具
JWT Token 生成和验证:
```java
// 生成 Token
String token = JwtUtil.generateToken(userId, secret, expiration);
// 验证 Token
Claims claims = JwtUtil.validateToken(token, secret);
String userId = claims.getSubject();
```
## 使用
### 在服务中使用共享库
#### Maven 依赖
```xml
<dependency>
<groupId>com.deepdata</groupId>
<artifactId>domain-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.deepdata</groupId>
<artifactId>security-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
```
#### 使用 BusinessException
```java
@RestController
@RequiredArgsConstructor
public class DatasetController {
public ResponseEntity<DatasetResponse> getDataset(String id) {
Dataset dataset = datasetService.findById(id);
if (dataset == null) {
throw BusinessException.of(ErrorCode.DATASET_NOT_FOUND);
}
return ResponseEntity.ok(DatasetResponse.from(dataset));
}
}
```
## 快速开始
### 构建共享库
```bash
cd backend
mvn clean install
```
### 在服务中使用
共享库会自动被所有后端服务继承。
## 文档
- [AGENTS.md](./AGENTS.md)
## 相关链接
- [后端 README](../README.md)