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 }