部分重构

This commit is contained in:
2026-03-31 20:06:53 +08:00
parent 6d79836682
commit 498cc78dce
43 changed files with 6049 additions and 131 deletions
@@ -0,0 +1,347 @@
package repository
import (
"errors"
"time"
"gorm.io/gorm"
"ops/internal/database"
)
// UserRepository 用户数据访问接口
type UserRepository interface {
Create(user *database.TabUser) error
FindByID(id uint) (*database.TabUser, error)
FindByName(name string) (*database.TabUser, error)
FindByEmail(email string) (*database.TabUser, error)
FindByPhone(phone string) (*database.TabUser, error)
Update(user *database.TabUser) error
Delete(id uint) error
ExistsByName(name string) (bool, error)
}
// UserInfoRepository 用户信息数据访问接口
type UserInfoRepository interface {
Create(userInfo *database.TabUserInfo) error
FindByUserID(userID uint) (*database.TabUserInfo, error)
Update(userInfo *database.TabUserInfo) error
Delete(userID uint) error
}
// CookieRepository Cookie数据访问接口
type CookieRepository interface {
Create(cookie *database.TabCookie) error
FindByValue(cookieValue string) (*database.TabCookie, error)
FindByUserID(userID uint) ([]*database.TabCookie, error)
DeleteByValue(cookieValue string) error
DeleteByUserID(userID uint) error
DeleteExpired() error
}
// userRepo 用户仓库实现
type userRepo struct {
db *gorm.DB
}
// NewUserRepository 创建用户仓库实例
func NewUserRepository(db *gorm.DB) UserRepository {
return &userRepo{db: db}
}
// Create 创建用户
func (r *userRepo) Create(user *database.TabUser) error {
if user == nil {
return errors.New("user is nil")
}
if user.Name == "" {
return errors.New("username is required")
}
return r.db.Create(user).Error
}
// FindByID 通过ID查找用户
func (r *userRepo) FindByID(id uint) (*database.TabUser, error) {
if id == 0 {
return nil, errors.New("invalid user ID")
}
var user database.TabUser
err := r.db.First(&user, id).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &user, nil
}
// FindByName 通过用户名查找用户
func (r *userRepo) FindByName(name string) (*database.TabUser, error) {
if name == "" {
return nil, errors.New("username is required")
}
var user database.TabUser
err := r.db.Where("name = ?", name).First(&user).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &user, nil
}
// FindByEmail 通过邮箱查找用户
func (r *userRepo) FindByEmail(email string) (*database.TabUser, error) {
// TabUser表目前没有email字段,这里返回nil
return nil, nil
}
// FindByPhone 通过手机号查找用户
func (r *userRepo) FindByPhone(phone string) (*database.TabUser, error) {
// TabUser表目前没有phone字段,这里返回nil
return nil, nil
}
// Update 更新用户信息
func (r *userRepo) Update(user *database.TabUser) error {
if user == nil {
return errors.New("user is nil")
}
if user.ID == 0 {
return errors.New("user ID is required")
}
return r.db.Save(user).Error
}
// Delete 删除用户
func (r *userRepo) Delete(id uint) error {
if id == 0 {
return errors.New("invalid user ID")
}
return r.db.Delete(&database.TabUser{}, id).Error
}
// ExistsByName 检查用户名是否存在
func (r *userRepo) ExistsByName(name string) (bool, error) {
if name == "" {
return false, errors.New("username is required")
}
var count int64
err := r.db.Model(&database.TabUser{}).Where("name = ?", name).Count(&count).Error
if err != nil {
return false, err
}
return count > 0, nil
}
// userInfoRepo 用户信息仓库实现
type userInfoRepo struct {
db *gorm.DB
}
// NewUserInfoRepository 创建用户信息仓库实例
func NewUserInfoRepository(db *gorm.DB) UserInfoRepository {
return &userInfoRepo{db: db}
}
// Create 创建用户信息
func (r *userInfoRepo) Create(userInfo *database.TabUserInfo) error {
if userInfo == nil {
return errors.New("user info is nil")
}
if userInfo.UserID == 0 {
return errors.New("user ID is required")
}
return r.db.Create(userInfo).Error
}
// FindByUserID 通过用户ID查找用户信息
func (r *userInfoRepo) FindByUserID(userID uint) (*database.TabUserInfo, error) {
if userID == 0 {
return nil, errors.New("invalid user ID")
}
var userInfo database.TabUserInfo
err := r.db.Where("user_id = ?", userID).First(&userInfo).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &userInfo, nil
}
// Update 更新用户信息
func (r *userInfoRepo) Update(userInfo *database.TabUserInfo) error {
if userInfo == nil {
return errors.New("user info is nil")
}
if userInfo.UserID == 0 {
return errors.New("user ID is required")
}
return r.db.Save(userInfo).Error
}
// Delete 删除用户信息
func (r *userInfoRepo) Delete(userID uint) error {
if userID == 0 {
return errors.New("invalid user ID")
}
return r.db.Where("user_id = ?", userID).Delete(&database.TabUserInfo{}).Error
}
// cookieRepo Cookie仓库实现
type cookieRepo struct {
db *gorm.DB
}
// NewCookieRepository 创建Cookie仓库实例
func NewCookieRepository(db *gorm.DB) CookieRepository {
return &cookieRepo{db: db}
}
// Create 创建Cookie
func (r *cookieRepo) Create(cookie *database.TabCookie) error {
if cookie == nil {
return errors.New("cookie is nil")
}
if cookie.Value == "" {
return errors.New("cookie value is required")
}
if cookie.UserID == 0 {
return errors.New("user ID is required")
}
if cookie.ExpiresAt == 0 {
cookie.ExpiresAt = time.Now().Add(7 * 24 * time.Hour).Unix()
}
if cookie.CreateAt == 0 {
cookie.CreateAt = time.Now().Unix()
}
return r.db.Create(cookie).Error
}
// FindByValue 通过Cookie值查找
func (r *cookieRepo) FindByValue(cookieValue string) (*database.TabCookie, error) {
if cookieValue == "" {
return nil, errors.New("cookie value is required")
}
var cookie database.TabCookie
err := r.db.Where("value = ?", cookieValue).First(&cookie).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
return &cookie, nil
}
// FindByUserID 通过用户ID查找所有Cookie
func (r *cookieRepo) FindByUserID(userID uint) ([]*database.TabCookie, error) {
if userID == 0 {
return nil, errors.New("invalid user ID")
}
var cookies []*database.TabCookie
err := r.db.Where("user_id = ?", userID).Find(&cookies).Error
if err != nil {
return nil, err
}
return cookies, nil
}
// DeleteByValue 通过Cookie值删除
func (r *cookieRepo) DeleteByValue(cookieValue string) error {
if cookieValue == "" {
return errors.New("cookie value is required")
}
return r.db.Where("value = ?", cookieValue).Delete(&database.TabCookie{}).Error
}
// DeleteByUserID 通过用户ID删除所有Cookie
func (r *cookieRepo) DeleteByUserID(userID uint) error {
if userID == 0 {
return errors.New("invalid user ID")
}
return r.db.Where("user_id = ?", userID).Delete(&database.TabCookie{}).Error
}
// DeleteExpired 删除过期的Cookie
func (r *cookieRepo) DeleteExpired() error {
now := time.Now().Unix()
return r.db.Where("expires_at < ?", now).Delete(&database.TabCookie{}).Error
}
// EnhancedUserInfo 增强的用户信息结构
type EnhancedUserInfo struct {
database.TabUser
UserInfo database.TabUserInfo
AvatarURL string
}
// GetEnhancedUserInfo 获取增强的用户信息
func GetEnhancedUserInfo(db *gorm.DB, userID uint) (*EnhancedUserInfo, error) {
if userID == 0 {
return nil, errors.New("invalid user ID")
}
var user database.TabUser
var userInfo database.TabUserInfo
// 获取用户基本信息
err := db.First(&user, userID).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return nil, err
}
// 获取用户详细信息
err = db.Where("user_id = ?", userID).First(&userInfo).Error
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return nil, err
}
// 构建头像URL
avatarURL := "/static/default_avatar.png"
if userInfo.AvatarPath != "" {
avatarURL = "/file/" + userInfo.AvatarPath
}
return &EnhancedUserInfo{
TabUser: user,
UserInfo: userInfo,
AvatarURL: avatarURL,
}, nil
}