feat: 初始化 ChatGPT Team 管理后端项目
- 添加用户认证模块 (JWT + 密码管理) - 添加 ChatGPT 账户管理功能 - 添加卡密管理功能 (创建、批量生成、查询) - 添加邀请功能 - 配置数据库迁移和路由系统
This commit is contained in:
120
internal/repository/admin_repo.go
Normal file
120
internal/repository/admin_repo.go
Normal file
@@ -0,0 +1,120 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user