feat: image variants engine
This commit is contained in:
1 parent
f0845de643
commit
f1d56ef50e
80 files changed
+7312
-84
No files matched your search
@@ -0,0 +1,65 @@
|
||||
package persistence
|
||||
|
||||
import (
|
||||
domain "RenewCMS/internal/domain/image"
|
||||
"RenewCMS/internal/infrastructure/persistence/mappers"
|
||||
entity "RenewCMS/internal/infrastructure/persistence/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
)
|
||||
|
||||
type VariantRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
var _ domain.VariantRepository = &VariantRepository{}
|
||||
|
||||
func NewVariantRepository(db *gorm.DB) *VariantRepository {
|
||||
return &VariantRepository{db}
|
||||
}
|
||||
|
||||
func (v *VariantRepository) List() ([]domain.Variant, error) {
|
||||
var found []entity.ImageVariant
|
||||
if err := v.db.Order("name asc").Find(&found).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
variants := make([]domain.Variant, 0, len(found))
|
||||
for _, model := range found {
|
||||
variants = append(variants, mappers.VariantToDomain(model))
|
||||
}
|
||||
return variants, nil
|
||||
}
|
||||
|
||||
func (v *VariantRepository) Get(name string) (domain.Variant, error) {
|
||||
var model entity.ImageVariant
|
||||
if err := v.db.Where("name = ?", name).First(&model).Error; err != nil {
|
||||
return domain.Variant{}, mapNotFoundErr(err, domain.ErrVariantNotFound)
|
||||
}
|
||||
return mappers.VariantToDomain(model), nil
|
||||
}
|
||||
|
||||
func (v *VariantRepository) Create(variant domain.Variant) (domain.Variant, error) {
|
||||
model := mappers.VariantToModel(variant)
|
||||
result := v.db.Clauses(clause.OnConflict{DoNothing: true}).Create(&model)
|
||||
if result.Error != nil {
|
||||
return domain.Variant{}, result.Error
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return domain.Variant{}, domain.ErrVariantExists
|
||||
}
|
||||
return mappers.VariantToDomain(model), nil
|
||||
}
|
||||
|
||||
func (v *VariantRepository) Update(variant domain.Variant) (domain.Variant, error) {
|
||||
model := mappers.VariantToModel(variant)
|
||||
result := v.db.Model(&entity.ImageVariant{}).Where("name = ?", model.Name).Select("*").Omit("name", "created_at").UpdateColumns(&model)
|
||||
if err := deleteOrNotFound(result, domain.ErrVariantNotFound); err != nil {
|
||||
return domain.Variant{}, err
|
||||
}
|
||||
return v.Get(variant.Name)
|
||||
}
|
||||
|
||||
func (v *VariantRepository) Delete(name string) error {
|
||||
return deleteOrNotFound(v.db.Where("name = ?", name).Delete(&entity.ImageVariant{}), domain.ErrVariantNotFound)
|
||||
}
|
||||
Reference in new issue
Block a user