# 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接口层)