- 添加用户认证模块 (JWT + 密码管理) - 添加 ChatGPT 账户管理功能 - 添加卡密管理功能 (创建、批量生成、查询) - 添加邀请功能 - 配置数据库迁移和路由系统
121 lines
2.6 KiB
Go
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
|
|
}
|