topfans/backend/services/assetService/repository/material_repository.go
2026-05-16 02:42:32 +08:00

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
}