部分重构
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"ops/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type FileRepository interface {
|
||||
CreateFile(file *models.TabFileInfo_) error
|
||||
GetFileByID(fileID uint) (*models.TabFileInfo_, error)
|
||||
GetFileByHash(hash string) (*models.TabFileInfo_, error)
|
||||
GetFilesByUser(userID uint, fileType string, page, entries int) ([]models.TabFileInfo_, int64, error)
|
||||
UpdateFile(file *models.TabFileInfo_) error
|
||||
DeleteFile(fileID uint) error
|
||||
IncrementFileUsage(fileID uint) error
|
||||
GetFilesByType(fileType string, limit int) ([]models.TabFileInfo_, error)
|
||||
}
|
||||
|
||||
type fileRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewFileRepository(db *gorm.DB) FileRepository {
|
||||
return &fileRepository{db: db}
|
||||
}
|
||||
|
||||
func (r *fileRepository) CreateFile(file *models.TabFileInfo_) error {
|
||||
return r.db.Create(file).Error
|
||||
}
|
||||
|
||||
func (r *fileRepository) GetFileByID(fileID uint) (*models.TabFileInfo_, error) {
|
||||
var file models.TabFileInfo_
|
||||
if err := r.db.First(&file, fileID).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &file, nil
|
||||
}
|
||||
|
||||
func (r *fileRepository) GetFileByHash(hash string) (*models.TabFileInfo_, error) {
|
||||
var file models.TabFileInfo_
|
||||
if err := r.db.Where("sha256 = ?", hash).First(&file).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &file, nil
|
||||
}
|
||||
|
||||
func (r *fileRepository) GetFilesByUser(userID uint, fileType string, page, entries int) ([]models.TabFileInfo_, int64, error) {
|
||||
var files []models.TabFileInfo_
|
||||
var total int64
|
||||
|
||||
query := r.db.Model(&models.TabFileInfo_{}).Where("user_id = ?", userID)
|
||||
|
||||
if fileType != "" {
|
||||
query = query.Where("type = ?", fileType)
|
||||
}
|
||||
|
||||
// 获取总数
|
||||
if err := query.Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 获取分页数据
|
||||
offset := entries * (page - 1)
|
||||
if err := query.Order("date DESC").Offset(offset).Limit(entries).Find(&files).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return files, total, nil
|
||||
}
|
||||
|
||||
func (r *fileRepository) UpdateFile(file *models.TabFileInfo_) error {
|
||||
return r.db.Save(file).Error
|
||||
}
|
||||
|
||||
func (r *fileRepository) DeleteFile(fileID uint) error {
|
||||
return r.db.Delete(&models.TabFileInfo_{}, fileID).Error
|
||||
}
|
||||
|
||||
func (r *fileRepository) IncrementFileUsage(fileID uint) error {
|
||||
return r.db.Model(&models.TabFileInfo_{}).
|
||||
Where("id = ?", fileID).
|
||||
Update("const", gorm.Expr("const + ?", 1)).Error
|
||||
}
|
||||
|
||||
func (r *fileRepository) GetFilesByType(fileType string, limit int) ([]models.TabFileInfo_, error) {
|
||||
var files []models.TabFileInfo_
|
||||
query := r.db.Where("type = ?", fileType).Order("const DESC")
|
||||
|
||||
if limit > 0 {
|
||||
query = query.Limit(limit)
|
||||
}
|
||||
|
||||
if err := query.Find(&files).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return files, nil
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"ops/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type PurchaseRepository interface {
|
||||
GetOrders(userID uint, search string, page, entries int) ([]models.TabPurchaseOrder, int64, error)
|
||||
GetOrderByID(orderID uint) (*models.TabPurchaseOrder, error)
|
||||
CreateOrder(order *models.TabPurchaseOrder) error
|
||||
CreateCost(cost *models.TabPurchaseCosts) error
|
||||
GetOrderCosts(orderID uint) ([]models.TabPurchaseCosts, error)
|
||||
}
|
||||
|
||||
type purchaseRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewPurchaseRepository(db *gorm.DB) PurchaseRepository {
|
||||
return &purchaseRepository{db: db}
|
||||
}
|
||||
|
||||
func (r *purchaseRepository) GetOrders(userID uint, search string, page, entries int) ([]models.TabPurchaseOrder, int64, error) {
|
||||
var orders []models.TabPurchaseOrder
|
||||
var total int64
|
||||
|
||||
query := r.db.Model(&models.TabPurchaseOrder{}).Where("user_id = ?", userID)
|
||||
|
||||
if search != "" {
|
||||
query = query.Where("title LIKE ? OR part_name LIKE ? OR remark LIKE ? OR tracking_number LIKE ?",
|
||||
"%"+search+"%", "%"+search+"%", "%"+search+"%", "%"+search+"%")
|
||||
}
|
||||
|
||||
// 获取总数
|
||||
if err := query.Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 获取分页数据
|
||||
offset := entries * (page - 1)
|
||||
if err := query.Order("created_at DESC").Offset(offset).Limit(entries).Find(&orders).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return orders, total, nil
|
||||
}
|
||||
|
||||
func (r *purchaseRepository) GetOrderByID(orderID uint) (*models.TabPurchaseOrder, error) {
|
||||
var order models.TabPurchaseOrder
|
||||
if err := r.db.First(&order, orderID).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &order, nil
|
||||
}
|
||||
|
||||
func (r *purchaseRepository) CreateOrder(order *models.TabPurchaseOrder) error {
|
||||
return r.db.Create(order).Error
|
||||
}
|
||||
|
||||
func (r *purchaseRepository) CreateCost(cost *models.TabPurchaseCosts) error {
|
||||
return r.db.Create(cost).Error
|
||||
}
|
||||
|
||||
func (r *purchaseRepository) GetOrderCosts(orderID uint) ([]models.TabPurchaseCosts, error) {
|
||||
var costs []models.TabPurchaseCosts
|
||||
if err := r.db.Where("order_id = ?", orderID).Find(&costs).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return costs, nil
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user