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) }