feat: media duplicate purge, part 1 of 3: persisted purge settings and the purge API

This commit is contained in:
fsylvain committed 2026-10-05 18:24:03 +02:00
1 parent 161ddc0f7d
commit e82d0ce254
25 files changed
+2459 -41

No files matched your search

@@ -0,0 +1,28 @@
package mappers
import (
"RenewCMS/internal/domain/purge"
"RenewCMS/internal/infrastructure/persistence/models"
)
func PurgeSettingsToDomain(m models.PurgeSettings) purge.Settings {
return purge.Settings{
AutoPurgeEnabled: m.AutoPurgeEnabled,
AutoPurgeIntervalDays: m.AutoPurgeIntervalDays,
LastPurgeAt: m.LastPurgeAt,
LastPurgeMerged: m.LastPurgeMerged,
LastPurgeArticlesUpdated: m.LastPurgeArticlesUpdated,
EnabledAt: m.EnabledAt,
}
}
func PurgeSettingsToModel(s purge.Settings) models.PurgeSettings {
return models.PurgeSettings{
AutoPurgeEnabled: s.AutoPurgeEnabled,
AutoPurgeIntervalDays: s.AutoPurgeIntervalDays,
LastPurgeAt: s.LastPurgeAt,
LastPurgeMerged: s.LastPurgeMerged,
LastPurgeArticlesUpdated: s.LastPurgeArticlesUpdated,
EnabledAt: s.EnabledAt,
}
}
@@ -0,0 +1,13 @@
package models
import "time"
type PurgeSettings struct {
ID uint32 `gorm:"primaryKey"`
AutoPurgeEnabled bool `gorm:"not null"`
AutoPurgeIntervalDays int `gorm:"not null"`
LastPurgeAt *time.Time
LastPurgeMerged int `gorm:"not null"`
LastPurgeArticlesUpdated int `gorm:"not null"`
EnabledAt *time.Time
}
@@ -0,0 +1,40 @@
package persistence
import (
domainPurge "RenewCMS/internal/domain/purge"
"RenewCMS/internal/infrastructure/persistence/mappers"
entity "RenewCMS/internal/infrastructure/persistence/models"
"errors"
"gorm.io/gorm"
)
const purgeSettingsRowID uint32 = 1
type PurgeSettingsRepository struct {
db *gorm.DB
}
var _ domainPurge.Repository = &PurgeSettingsRepository{}
func NewPurgeSettingsRepository(db *gorm.DB) *PurgeSettingsRepository {
return &PurgeSettingsRepository{db}
}
func (p *PurgeSettingsRepository) Get() (domainPurge.Settings, error) {
var model entity.PurgeSettings
err := p.db.First(&model, purgeSettingsRowID).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
return domainPurge.DefaultSettings(), nil
}
if err != nil {
return domainPurge.Settings{}, err
}
return mappers.PurgeSettingsToDomain(model), nil
}
func (p *PurgeSettingsRepository) Save(settings domainPurge.Settings) error {
model := mappers.PurgeSettingsToModel(settings)
model.ID = purgeSettingsRowID
return p.db.Save(&model).Error
}