topfans/backend/services/userService/INIT.md
2026-04-07 22:29:48 +08:00

2.2 KiB
Raw Permalink Blame History

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/         - 业务服务层

安装依赖

在根目录执行:

cd /Users/haihuizhu/infinite_matrix/top-fans/backend

# 添加GORM依赖
go get gorm.io/gorm
go get gorm.io/driver/postgres

# 整理依赖
go mod tidy

使用方式

在任何服务中使用数据库连接:

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