58 lines
1.6 KiB
Go
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)
|
|
}
|