feat: 初始化 ChatGPT Team 管理后端项目

- 添加用户认证模块 (JWT + 密码管理)
- 添加 ChatGPT 账户管理功能
- 添加卡密管理功能 (创建、批量生成、查询)
- 添加邀请功能
- 配置数据库迁移和路由系统
This commit is contained in:
sar
2026-01-13 14:42:56 +08:00
commit 42c423bd32
29 changed files with 2969 additions and 0 deletions

99
internal/db/db.go Normal file
View File

@@ -0,0 +1,99 @@
package db
import (
"database/sql"
"fmt"
"log"
"os"
"time"
_ "github.com/lib/pq"
)
var DB *sql.DB
// Config 数据库配置
type Config struct {
Host string
Port int
User string
Password string
DBName string
SSLMode string
}
// DefaultConfig 从环境变量读取默认配置
func DefaultConfig() Config {
return Config{
Host: getEnv("DB_HOST", "localhost"),
Port: getEnvInt("DB_PORT", 5432),
User: getEnv("DB_USER", "postgres"),
Password: getEnv("DB_PASSWORD", ""),
DBName: getEnv("DB_NAME", "gpt_manager"),
SSLMode: getEnv("DB_SSLMODE", "disable"),
}
}
// Connect 连接数据库
func Connect(cfg Config) (*sql.DB, error) {
dsn := fmt.Sprintf(
"host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
cfg.Host, cfg.Port, cfg.User, cfg.Password, cfg.DBName, cfg.SSLMode,
)
db, err := sql.Open("postgres", dsn)
if err != nil {
return nil, fmt.Errorf("failed to open database: %w", err)
}
// 配置连接池
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(5)
db.SetConnMaxLifetime(5 * time.Minute)
// 测试连接
if err := db.Ping(); err != nil {
return nil, fmt.Errorf("failed to ping database: %w", err)
}
log.Println("Database connected successfully")
return db, nil
}
// Init 初始化全局数据库连接
func Init() error {
cfg := DefaultConfig()
db, err := Connect(cfg)
if err != nil {
return err
}
DB = db
return nil
}
// Close 关闭数据库连接
func Close() error {
if DB != nil {
return DB.Close()
}
return nil
}
// getEnv 获取环境变量,带默认值
func getEnv(key, defaultVal string) string {
if val := os.Getenv(key); val != "" {
return val
}
return defaultVal
}
// getEnvInt 获取整数类型环境变量
func getEnvInt(key string, defaultVal int) int {
if val := os.Getenv(key); val != "" {
var i int
if _, err := fmt.Sscanf(val, "%d", &i); err == nil {
return i
}
}
return defaultVal
}