50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package repository
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/topfans/backend/pkg/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// MaterialRepository 素材数据访问层
|
|
type MaterialRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewMaterialRepository 创建素材 Repository
|
|
func NewMaterialRepository(db *gorm.DB) *MaterialRepository {
|
|
return &MaterialRepository{db: db}
|
|
}
|
|
|
|
// Create 创建素材记录
|
|
func (r *MaterialRepository) Create(material *models.Material) error {
|
|
return r.db.Create(material).Error
|
|
}
|
|
|
|
// FindByOssKey 根据 OSS Key 查找
|
|
func (r *MaterialRepository) FindByOssKey(ossKey string) (*models.Material, error) {
|
|
var m models.Material
|
|
err := r.db.Where("oss_key = ? AND deleted_at IS NULL", ossKey).First(&m).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &m, nil
|
|
}
|
|
|
|
// FindByHash 根据哈希查找(去重用)
|
|
func (r *MaterialRepository) FindByHash(hash string, starID int64) (*models.Material, error) {
|
|
var m models.Material
|
|
err := r.db.Where("hash = ? AND star_id = ? AND deleted_at IS NULL", hash, starID).First(&m).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &m, nil
|
|
}
|
|
|
|
// SoftDelete 软删除素材
|
|
func (r *MaterialRepository) SoftDelete(materialID int64) error {
|
|
now := time.Now().UnixMilli()
|
|
return r.db.Model(&models.Material{}).Where("id = ?", materialID).Update("deleted_at", now).Error
|
|
}
|