96 lines
2.2 KiB
Markdown
96 lines
2.2 KiB
Markdown
# UserService 初始化说明
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
backend/
|
||
├── pkg/
|
||
│ ├── database/ # 数据库连接包(可复用)
|
||
│ │ └── database.go
|
||
│ └── models/ # 数据模型包
|
||
│ └── user.go
|
||
└── services/
|
||
└── userService/
|
||
├── main.go
|
||
├── go.mod
|
||
└── README.md
|
||
```
|
||
|
||
## 设计说明
|
||
|
||
### 1. 数据库连接独立出来(推荐)
|
||
|
||
**为什么独立出来**:
|
||
- ✅ **可复用**:其他服务(Asset Service、Social Service等)也可以使用
|
||
- ✅ **便于管理**:统一管理连接池配置、重连逻辑等
|
||
- ✅ **便于测试**:可以轻松mock数据库连接
|
||
- ✅ **符合分层架构**:基础设施层与业务逻辑层分离
|
||
|
||
### 2. 项目结构
|
||
|
||
```
|
||
pkg/database/ - 数据库基础设施层(可复用)
|
||
pkg/models/ - 数据模型定义
|
||
services/ - 业务服务层
|
||
```
|
||
|
||
## 安装依赖
|
||
|
||
在根目录执行:
|
||
|
||
```bash
|
||
cd /Users/haihuizhu/infinite_matrix/top-fans/backend
|
||
|
||
# 添加GORM依赖
|
||
go get gorm.io/gorm
|
||
go get gorm.io/driver/postgres
|
||
|
||
# 整理依赖
|
||
go mod tidy
|
||
```
|
||
|
||
## 使用方式
|
||
|
||
### 在任何服务中使用数据库连接:
|
||
|
||
```go
|
||
import (
|
||
"github.com/topfans/backend/pkg/database"
|
||
"github.com/topfans/backend/pkg/models"
|
||
)
|
||
|
||
// 初始化数据库
|
||
config := database.Config{
|
||
Host: "localhost",
|
||
Port: 5432,
|
||
User: "haihuizhu",
|
||
Password: "admin",
|
||
DBName: "top-fans",
|
||
SSLMode: "disable",
|
||
TimeZone: "Asia/Shanghai",
|
||
}
|
||
|
||
if err := database.Init(config); err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
|
||
// 使用数据库
|
||
db := database.GetDB()
|
||
var user models.User
|
||
db.Where("mobile = ?", "13800000000").First(&user)
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **连接池配置**:已在 `pkg/database/database.go` 中配置了合理的连接池参数
|
||
2. **时区处理**:统一使用UTC时间,在存储时转换为毫秒时间戳
|
||
3. **软删除**:User模型支持软删除(DeletedAt字段)
|
||
4. **自动迁移**:启动时会自动创建/更新表结构
|
||
|
||
## 后续开发
|
||
|
||
1. 实现Repository层(数据访问层)
|
||
2. 实现Service层(业务逻辑层)
|
||
3. 实现gRPC Handler层(API接口层)
|
||
|