Files
RenewCMS/internal/infrastructure/persistence/database/siteSeed.go
T

58 lines
1.7 KiB
Go

package database
import (
domainSite "RenewCMS/internal/domain/site"
entity "RenewCMS/internal/infrastructure/persistence/models"
"fmt"
"gorm.io/gorm"
)
func SeedDefaultSite(db *gorm.DB, publicURL string) error {
return db.Transaction(func(tx *gorm.DB) error {
defaultSite, err := ensureDefaultSite(tx, publicURL)
if err != nil {
return err
}
return tx.Unscoped().Model(&entity.Article{}).Where("site_id IS NULL OR site_id = 0").UpdateColumn("site_id", defaultSite.ID).Error
})
}
func ensureDefaultSite(tx *gorm.DB, publicURL string) (entity.Site, error) {
var total int64
if err := tx.Model(&entity.Site{}).Count(&total).Error; err != nil {
return entity.Site{}, err
}
if total > 0 {
return firstDefaultSite(tx)
}
baseURL, err := domainSite.SeedBaseURL(publicURL)
if err != nil {
return entity.Site{}, fmt.Errorf("PUBLIC_URL %q cannot seed the first site: %w", publicURL, err)
}
seeded := entity.Site{
Name: domainSite.DefaultName,
Key: domainSite.DefaultKey,
BaseURL: baseURL,
DefaultRobots: domainSite.RobotsIndex,
IsDefault: true,
TitleTemplate: domainSite.DefaultTitleTemplate,
}
if err := tx.Create(&seeded).Error; err != nil {
return entity.Site{}, err
}
return seeded, nil
}
func firstDefaultSite(tx *gorm.DB) (entity.Site, error) {
var found entity.Site
if err := tx.Order("is_default DESC, id ASC").First(&found).Error; err != nil {
return entity.Site{}, err
}
return found, nil
}
func BackfillSiteTitleTemplates(db *gorm.DB) error {
return db.Model(&entity.Site{}).Where("title_template IS NULL OR title_template = ''").UpdateColumn("title_template", domainSite.DefaultTitleTemplate).Error
}