Files
GPT_Management/internal/repository/admin_repo.go
sar 42c423bd32 feat: 初始化 ChatGPT Team 管理后端项目
- 添加用户认证模块 (JWT + 密码管理)
- 添加 ChatGPT 账户管理功能
- 添加卡密管理功能 (创建、批量生成、查询)
- 添加邀请功能
- 配置数据库迁移和路由系统
2026-01-13 14:42:56 +08:00

121 lines
2.6 KiB
Go

package repository
import (
"database/sql"
"time"
"gpt-manager-go/internal/models"
)
// AdminRepository 管理员仓储
type AdminRepository struct {
db *sql.DB
}
// NewAdminRepository 创建管理员仓储
func NewAdminRepository(db *sql.DB) *AdminRepository {
return &AdminRepository{db: db}
}
// FindByUsername 根据用户名查找管理员
func (r *AdminRepository) FindByUsername(username string) (*models.Admin, error) {
admin := &models.Admin{}
err := r.db.QueryRow(`
SELECT id, username, email, password_hash, is_super_admin, is_active, created_at, last_login
FROM admins WHERE username = $1
`, username).Scan(
&admin.ID,
&admin.Username,
&admin.Email,
&admin.PasswordHash,
&admin.IsSuperAdmin,
&admin.IsActive,
&admin.CreatedAt,
&admin.LastLogin,
)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, err
}
return admin, nil
}
// FindByEmail 根据邮箱查找管理员
func (r *AdminRepository) FindByEmail(email string) (*models.Admin, error) {
admin := &models.Admin{}
err := r.db.QueryRow(`
SELECT id, username, email, password_hash, is_super_admin, is_active, created_at, last_login
FROM admins WHERE email = $1
`, email).Scan(
&admin.ID,
&admin.Username,
&admin.Email,
&admin.PasswordHash,
&admin.IsSuperAdmin,
&admin.IsActive,
&admin.CreatedAt,
&admin.LastLogin,
)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, err
}
return admin, nil
}
// FindByID 根据 ID 查找管理员
func (r *AdminRepository) FindByID(id int) (*models.Admin, error) {
admin := &models.Admin{}
err := r.db.QueryRow(`
SELECT id, username, email, password_hash, is_super_admin, is_active, created_at, last_login
FROM admins WHERE id = $1
`, id).Scan(
&admin.ID,
&admin.Username,
&admin.Email,
&admin.PasswordHash,
&admin.IsSuperAdmin,
&admin.IsActive,
&admin.CreatedAt,
&admin.LastLogin,
)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, err
}
return admin, nil
}
// Create 创建管理员
func (r *AdminRepository) Create(admin *models.Admin) error {
return r.db.QueryRow(`
INSERT INTO admins (username, email, password_hash, is_super_admin, is_active, created_at)
VALUES ($1, $2, $3, $4, $5, $6)
RETURNING id
`,
admin.Username,
admin.Email,
admin.PasswordHash,
admin.IsSuperAdmin,
admin.IsActive,
time.Now(),
).Scan(&admin.ID)
}
// UpdateLastLogin 更新最后登录时间
func (r *AdminRepository) UpdateLastLogin(id int) error {
_, err := r.db.Exec(`
UPDATE admins SET last_login = $1 WHERE id = $2
`, time.Now(), id)
return err
}