package repository import ( "carrot_bbs/internal/model" "gorm.io/gorm" ) // StickerRepository 自定义表情仓库接口 type StickerRepository interface { // 获取用户的所有表情 GetByUserID(userID string) ([]model.UserSticker, error) // 根据ID获取表情 GetByID(id string) (*model.UserSticker, error) // 创建表情 Create(sticker *model.UserSticker) error // 删除表情 Delete(id string) error // 删除用户的所有表情 DeleteByUserID(userID string) error // 检查表情是否存在 Exists(userID string, url string) (bool, error) // 更新排序 UpdateSortOrder(id string, sortOrder int) error // 批量更新排序 BatchUpdateSortOrder(userID string, orders map[string]int) error // 获取用户表情数量 CountByUserID(userID string) (int64, error) } // stickerRepository 自定义表情仓库实现 type stickerRepository struct { db *gorm.DB } // NewStickerRepository 创建自定义表情仓库 func NewStickerRepository(db *gorm.DB) StickerRepository { return &stickerRepository{db: db} } // GetByUserID 获取用户的所有表情 func (r *stickerRepository) GetByUserID(userID string) ([]model.UserSticker, error) { var stickers []model.UserSticker err := r.db.Where("user_id = ?", userID). Order("sort_order ASC, created_at DESC"). Find(&stickers).Error return stickers, err } // GetByID 根据ID获取表情 func (r *stickerRepository) GetByID(id string) (*model.UserSticker, error) { var sticker model.UserSticker err := r.db.Where("id = ?", id).First(&sticker).Error if err != nil { return nil, err } return &sticker, nil } // Create 创建表情 func (r *stickerRepository) Create(sticker *model.UserSticker) error { return r.db.Create(sticker).Error } // Delete 删除表情 func (r *stickerRepository) Delete(id string) error { return r.db.Where("id = ?", id).Delete(&model.UserSticker{}).Error } // DeleteByUserID 删除用户的所有表情 func (r *stickerRepository) DeleteByUserID(userID string) error { return r.db.Where("user_id = ?", userID).Delete(&model.UserSticker{}).Error } // Exists 检查表情是否存在 func (r *stickerRepository) Exists(userID string, url string) (bool, error) { var count int64 err := r.db.Model(&model.UserSticker{}). Where("user_id = ? AND url = ?", userID, url). Count(&count).Error return count > 0, err } // UpdateSortOrder 更新排序 func (r *stickerRepository) UpdateSortOrder(id string, sortOrder int) error { return r.db.Model(&model.UserSticker{}). Where("id = ?", id). Update("sort_order", sortOrder).Error } // BatchUpdateSortOrder 批量更新排序 func (r *stickerRepository) BatchUpdateSortOrder(userID string, orders map[string]int) error { return r.db.Transaction(func(tx *gorm.DB) error { for id, sortOrder := range orders { if err := tx.Model(&model.UserSticker{}). Where("id = ? AND user_id = ?", id, userID). Update("sort_order", sortOrder).Error; err != nil { return err } } return nil }) } // CountByUserID 获取用户表情数量 func (r *stickerRepository) CountByUserID(userID string) (int64, error) { var count int64 err := r.db.Model(&model.UserSticker{}). Where("user_id = ?", userID). Count(&count).Error return count, err }