ci: MySql切换为PG
This commit is contained in:
@@ -10,7 +10,7 @@ alwaysApply: false
|
|||||||
- TypeScript
|
- TypeScript
|
||||||
- Prisma (ORM)
|
- Prisma (ORM)
|
||||||
- Redis
|
- Redis
|
||||||
- MySQL 8.0
|
- PostgreSQL 15
|
||||||
|
|
||||||
## 目录结构规范
|
## 目录结构规范
|
||||||
```
|
```
|
||||||
@@ -73,5 +73,4 @@ backend/
|
|||||||
1. 使用 Docker 容器化
|
1. 使用 Docker 容器化
|
||||||
2. 环境变量配置
|
2. 环境变量配置
|
||||||
3. 健康检查
|
3. 健康检查
|
||||||
|
|
||||||
4. 监控指标
|
4. 监控指标
|
||||||
@@ -6,7 +6,7 @@ alwaysApply: false
|
|||||||
# 数据库设计规范
|
# 数据库设计规范
|
||||||
|
|
||||||
## 数据库选型
|
## 数据库选型
|
||||||
- 主数据库:MySQL 8.0
|
- 主数据库:PostgreSQL 15
|
||||||
- ORM:Prisma
|
- ORM:Prisma
|
||||||
- 缓存:Redis
|
- 缓存:Redis
|
||||||
|
|
||||||
@@ -64,5 +64,4 @@ alwaysApply: false
|
|||||||
1. 性能监控
|
1. 性能监控
|
||||||
2. 容量监控
|
2. 容量监控
|
||||||
3. 慢查询监控
|
3. 慢查询监控
|
||||||
|
|
||||||
4. 异常监控
|
4. 异常监控
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
- 前端:Nuxt.js (Vue 3) + TypeScript + Tailwind CSS
|
- 前端:Nuxt.js (Vue 3) + TypeScript + Tailwind CSS
|
||||||
- 后端:Express.js + TypeScript
|
- 后端:Express.js + TypeScript
|
||||||
- 数据库:MySQL 8.0 + Prisma ORM
|
- 数据库:Postgres14 + Prisma ORM
|
||||||
- 缓存:Redis
|
- 缓存:Redis
|
||||||
- 部署:Docker + Docker Compose
|
- 部署:Docker + Docker Compose
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,11 @@ SEARCH_SERVICE_URL=http://192.168.1.99:8008
|
|||||||
REDIS_HOST=192.168.1.99
|
REDIS_HOST=192.168.1.99
|
||||||
REDIS_PORT=6379
|
REDIS_PORT=6379
|
||||||
REDIS_PASSWORD=
|
REDIS_PASSWORD=
|
||||||
MYSQL_HOST=192.168.1.126
|
POSTGRES_HOST=192.168.1.99
|
||||||
MYSQL_PORT=3306
|
POSTGRES_PORT=5432
|
||||||
MYSQL_USER=root
|
POSTGRES_USER=mzaxd
|
||||||
MYSQL_PASSWORD=rootroot
|
POSTGRES_PASSWORD=rootroot
|
||||||
MYSQL_DATABASE=bps
|
POSTGRES_DATABASE=bps
|
||||||
SEARCH_SERVICE_USERNAME=mzaxd
|
SEARCH_SERVICE_USERNAME=mzaxd
|
||||||
SEARCH_SERVICE_PASSWORD=200712
|
SEARCH_SERVICE_PASSWORD=200712
|
||||||
|
DATABASE_URL="postgres://mzaxd:roootroot@192.168.1.99:5432/bps"
|
||||||
Generated
+735
-297
File diff suppressed because it is too large
Load Diff
Generated
-4292
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ generator client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
provider = "mysql"
|
provider = "postgresql"
|
||||||
url = env("DATABASE_URL")
|
url = env("DATABASE_URL")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ model Account {
|
|||||||
|
|
||||||
model TranscodeRecord {
|
model TranscodeRecord {
|
||||||
id Int @id @default(autoincrement())
|
id Int @id @default(autoincrement())
|
||||||
itemId String @index
|
itemId String
|
||||||
sourceLink String @db.Text
|
sourceLink String @db.Text
|
||||||
driveType String
|
driveType String
|
||||||
managedAccountId Int
|
managedAccountId Int
|
||||||
@@ -36,10 +36,13 @@ model TranscodeRecord {
|
|||||||
transferEndTime DateTime?
|
transferEndTime DateTime?
|
||||||
errorCode String?
|
errorCode String?
|
||||||
errorMessage String? @db.Text
|
errorMessage String? @db.Text
|
||||||
cleanupStatus String @default("pending") @index
|
cleanupStatus String @default("pending")
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
updatedAt DateTime @updatedAt
|
updatedAt DateTime @updatedAt
|
||||||
account Account @relation(fields: [managedAccountId], references: [id])
|
account Account @relation(fields: [managedAccountId], references: [id])
|
||||||
|
|
||||||
|
@@index([itemId])
|
||||||
|
@@index([cleanupStatus])
|
||||||
}
|
}
|
||||||
|
|
||||||
model ActivityLog {
|
model ActivityLog {
|
||||||
@@ -48,7 +51,7 @@ model ActivityLog {
|
|||||||
operationType String
|
operationType String
|
||||||
clientIp String?
|
clientIp String?
|
||||||
keyword String?
|
keyword String?
|
||||||
itemId String? @index
|
itemId String?
|
||||||
driveType String?
|
driveType String?
|
||||||
managedAccountId Int?
|
managedAccountId Int?
|
||||||
generatedLink String? @db.Text
|
generatedLink String? @db.Text
|
||||||
@@ -57,4 +60,6 @@ model ActivityLog {
|
|||||||
durationMs Int?
|
durationMs Int?
|
||||||
details String? @db.Text
|
details String? @db.Text
|
||||||
account Account? @relation(fields: [managedAccountId], references: [id])
|
account Account? @relation(fields: [managedAccountId], references: [id])
|
||||||
|
|
||||||
|
@@index([itemId])
|
||||||
}
|
}
|
||||||
@@ -9,10 +9,10 @@ console.log('Environment variables loaded:', {
|
|||||||
PORT: process.env.PORT,
|
PORT: process.env.PORT,
|
||||||
SEARCH_SERVICE_URL: process.env.SEARCH_SERVICE_URL,
|
SEARCH_SERVICE_URL: process.env.SEARCH_SERVICE_URL,
|
||||||
JWT_SECRET: process.env.JWT_SECRET,
|
JWT_SECRET: process.env.JWT_SECRET,
|
||||||
MYSQL_HOST: process.env.MYSQL_HOST,
|
POSTGRES_HOST: process.env.POSTGRES_HOST,
|
||||||
MYSQL_PORT: process.env.MYSQL_PORT,
|
POSTGRES_PORT: process.env.POSTGRES_PORT,
|
||||||
MYSQL_USER: process.env.MYSQL_USER,
|
POSTGRES_USER: process.env.POSTGRES_USER,
|
||||||
MYSQL_PASSWORD: process.env.MYSQL_PASSWORD,
|
POSTGRES_PASSWORD: process.env.POSTGRES_PASSWORD,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const config = {
|
export const config = {
|
||||||
@@ -31,12 +31,12 @@ export const config = {
|
|||||||
port: parseInt(process.env.REDIS_PORT || '6379'),
|
port: parseInt(process.env.REDIS_PORT || '6379'),
|
||||||
password: process.env.REDIS_PASSWORD,
|
password: process.env.REDIS_PASSWORD,
|
||||||
},
|
},
|
||||||
mysql: {
|
postgres: {
|
||||||
host: process.env.MYSQL_HOST || 'localhost',
|
host: process.env.POSTGRES_HOST || 'localhost',
|
||||||
port: parseInt(process.env.MYSQL_PORT || '3306'),
|
port: parseInt(process.env.POSTGRES_PORT || '5432'),
|
||||||
user: process.env.MYSQL_USER || 'root',
|
user: process.env.POSTGRES_USER || 'bps',
|
||||||
password: process.env.MYSQL_PASSWORD,
|
password: process.env.POSTGRES_PASSWORD,
|
||||||
database: process.env.MYSQL_DATABASE || 'search_service',
|
database: process.env.POSTGRES_DB || 'bps',
|
||||||
},
|
},
|
||||||
jwt: {
|
jwt: {
|
||||||
secret: process.env.JWT_SECRET || 'your-secret-key',
|
secret: process.env.JWT_SECRET || 'your-secret-key',
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@
|
|||||||
- **技术栈**:
|
- **技术栈**:
|
||||||
- 前端:Nuxt.js(TypeScript模式)
|
- 前端:Nuxt.js(TypeScript模式)
|
||||||
- 后端:Express.js(TypeScript模式)
|
- 后端:Express.js(TypeScript模式)
|
||||||
- 数据库:MySQL 8.0(ORM使用Prisma)
|
- 数据库:Postgres14 (ORM使用Prisma)
|
||||||
- 缓存:Redis
|
- 缓存:Redis
|
||||||
- 接口协议:RESTful API
|
- 接口协议:RESTful API
|
||||||
- **核心原则**:
|
- **核心原则**:
|
||||||
@@ -165,7 +165,7 @@ interface DriveAdapter {
|
|||||||
- 灵活配置中间件(如 Redis连接池、CORS)
|
- 灵活配置中间件(如 Redis连接池、CORS)
|
||||||
- 与TypeScript结合良好,支持接口强类型定义
|
- 与TypeScript结合良好,支持接口强类型定义
|
||||||
|
|
||||||
### **数据库(MySQL + Prisma)**
|
### **数据库(Postgres + Prisma)**
|
||||||
|
|
||||||
- **优势**:
|
- **优势**:
|
||||||
- Prisma提供TypeScript类型安全的数据库操作
|
- Prisma提供TypeScript类型安全的数据库操作
|
||||||
|
|||||||
+2
-2
@@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
* **前端:** Nuxt.js (使用TypeScript)
|
* **前端:** Nuxt.js (使用TypeScript)
|
||||||
* **后端:** Express.js (使用TypeScript)
|
* **后端:** Express.js (使用TypeScript)
|
||||||
* **数据库:** MySQL 8.0 (ORM: Prisma)
|
* **数据库:** Postgres 14 (ORM: Prisma)
|
||||||
* **缓存:** Redis
|
* **缓存:** Redis
|
||||||
|
|
||||||
## **3\. 架构概述**
|
## **3\. 架构概述**
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
1. 查询 TranscodeRecord 表,筛选条件为:status \== 'success', cleanupStatus \== 'pending', 且 transferEndTime 早于当前时间减去约10分钟。
|
1. 查询 TranscodeRecord 表,筛选条件为:status \== 'success', cleanupStatus \== 'pending', 且 transferEndTime 早于当前时间减去约10分钟。
|
||||||
2. 对每个符合条件的记录: a. 获取 transferredFileId, driveType, managedAccountId。 b. 获取对应的 Account 信息和 DriveAdapter 实例。 c. 调用 adapter.delete(transferredFileId, managedAccount) 方法删除网盘中的文件。 d. **若删除成功:** 更新 TranscodeRecord 的 cleanupStatus 为 'done'。记录清理成功 (CLEANUP\_SUCCESS) 到 ActivityLog。 e. **若删除失败:** 更新 TranscodeRecord 的 cleanupStatus 为 'failed'。记录清理失败 (CLEANUP\_FAILURE) 到 ActivityLog,包含错误信息。
|
2. 对每个符合条件的记录: a. 获取 transferredFileId, driveType, managedAccountId。 b. 获取对应的 Account 信息和 DriveAdapter 实例。 c. 调用 adapter.delete(transferredFileId, managedAccount) 方法删除网盘中的文件。 d. **若删除成功:** 更新 TranscodeRecord 的 cleanupStatus 为 'done'。记录清理成功 (CLEANUP\_SUCCESS) 到 ActivityLog。 e. **若删除失败:** 更新 TranscodeRecord 的 cleanupStatus 为 'failed'。记录清理失败 (CLEANUP\_FAILURE) 到 ActivityLog,包含错误信息。
|
||||||
|
|
||||||
## **7\. 数据模型 (Database \- MySQL/Prisma)**
|
## **7\. 数据模型 (Database \- Postgres/Prisma)**
|
||||||
|
|
||||||
### **7.1. Account 表 (管理系统自有的网盘账号)**
|
### **7.1. Account 表 (管理系统自有的网盘账号)**
|
||||||
|
|
||||||
|
|||||||
+8
-9
@@ -20,23 +20,22 @@ services:
|
|||||||
- "4000:4000"
|
- "4000:4000"
|
||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
- DATABASE_URL=mysql://bps:bps_password@db:3306/bps
|
- DATABASE_URL=postgresql://bps:bps_password@db:5432/bps
|
||||||
- REDIS_URL=redis://redis:6379
|
- REDIS_URL=redis://redis:6379
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
- redis
|
- redis
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: mysql:8.0
|
image: postgres:15
|
||||||
ports:
|
ports:
|
||||||
- "3306:3306"
|
- "5432:5432"
|
||||||
environment:
|
environment:
|
||||||
- MYSQL_ROOT_PASSWORD=root_password
|
- POSTGRES_USER=bps
|
||||||
- MYSQL_DATABASE=bps
|
- POSTGRES_PASSWORD=bps_password
|
||||||
- MYSQL_USER=bps
|
- POSTGRES_DB=bps
|
||||||
- MYSQL_PASSWORD=bps_password
|
|
||||||
volumes:
|
volumes:
|
||||||
- mysql_data:/var/lib/mysql
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7.0
|
image: redis:7.0
|
||||||
@@ -46,5 +45,5 @@ services:
|
|||||||
- redis_data:/data
|
- redis_data:/data
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
mysql_data:
|
postgres_data:
|
||||||
redis_data:
|
redis_data:
|
||||||
Reference in New Issue
Block a user