This commit is contained in:
D8D Developer
2025-06-27 03:31:29 +00:00
commit d371fbaefa
68 changed files with 11263 additions and 0 deletions

117
.roo/rules/10-entity.md Normal file
View File

@@ -0,0 +1,117 @@
# 数据库实体规范
## 1. 实体基础结构
```typescript
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
import { z } from 'zod';
@Entity('table_name') // 使用小写下划线命名表名
export class EntityName {
// 字段定义...
}
```
## 2. 主键定义规范
```typescript
@PrimaryGeneratedColumn({ unsigned: true }) // 必须使用无符号整数
id!: number; // 使用非空断言(!)和明确类型
```
## 3. 列定义规范
```typescript
@Column({
name: '字段名称', // 必须添加并与数据表字段名称一致
type: 'varchar', // 明确指定数据库类型
length: 255, // 字符串必须指定长度
nullable: true, // 明确是否可为空
default: undefined, // 默认值(可选)
comment: '字段说明' // 必须添加中文注释
})
fieldName!: FieldType; // 类型必须明确
```
## 4. 数据类型规范
| 业务类型 | 数据库类型 | TypeScript 类型 |
|----------------|-------------------------|-----------------------|
| 主键ID | int unsigned | number |
| 短文本 | varchar(length) | string |
| 长文本 | text | string |
| 整数 | int | number |
| 小数 | decimal(precision,scale)| number |
| 布尔状态 | tinyint | number (0/1) |
| 日期时间 | timestamp | Date |
## 5. 状态字段规范
```typescript
// 禁用状态 (0启用 1禁用)
@Column({ name: 'is_disabled', type: 'tinyint', default: 1 })
isDisabled!: number;
// 删除状态 (0未删除 1已删除)
@Column({ name: 'is_deleted',type: 'tinyint', default: 0 })
isDeleted!: number;
```
## 6. 时间字段规范
```typescript
// 创建时间 (自动设置)
@Column({
name: 'created_at',
type: 'timestamp',
default: () => 'CURRENT_TIMESTAMP'
})
createdAt!: Date;
// 更新时间 (自动更新)
@Column({
name: 'updated_at',
type: 'timestamp',
default: () => 'CURRENT_TIMESTAMP',
onUpdate: 'CURRENT_TIMESTAMP'
})
updatedAt!: Date;
```
## 7. Zod Schema 规范
```typescript
export const EntitySchema = z.object({
id: z.number().int().positive().openapi({ description: 'ID说明' }),
// 字符串字段
fieldName: z.string()
.max(255)
.nullable()
.openapi({
description: '字段说明',
example: '示例值'
}),
// 数字字段
numberField: z.number()
.default(默认值)
.openapi({...}),
// 日期字段
dateField: z.date().openapi({...})
});
```
## 8. 命名规范
- 实体类名PascalCase (如 RackInfo)
- 表名snake_case (如 rack_info)
- 字段名camelCase (如 rackName)
- 数据库列名snake_case (如 rack_name)
## 9. 最佳实践
1. 所有字段必须添加字段名称(name)及注释(comment)
2. 必须明确指定 nullable 属性
3. 状态字段使用 tinyint 并注明取值含义
4. 必须包含 createdAt/updatedAt 时间字段
5. 每个实体必须配套 Zod Schema 定义
6. Schema 必须包含 OpenAPI 元数据(description/example)