Files

58 lines
1.6 KiB
Go

package persistence
import (
domainPurge "RenewCMS/internal/domain/purge"
"RenewCMS/internal/infrastructure/persistence/mappers"
entity "RenewCMS/internal/infrastructure/persistence/models"
"errors"
"time"
"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
}
func (p *PurgeSettingsRepository) SaveLastRun(at time.Time, merged int, articlesUpdated int) error {
result := p.db.Model(&entity.PurgeSettings{}).Where("id = ?", purgeSettingsRowID).Updates(map[string]any{
"last_purge_at": at,
"last_purge_merged": merged,
"last_purge_articles_updated": articlesUpdated,
})
if result.Error != nil || result.RowsAffected > 0 {
return result.Error
}
settings := domainPurge.DefaultSettings()
settings.LastPurgeAt = &at
settings.LastPurgeMerged = merged
settings.LastPurgeArticlesUpdated = articlesUpdated
return p.Save(settings)
}