fix: technical debts left by the Sites, Authors and SEO slices, plus backend support for the new Sites and Authors pagination

This commit is contained in:
Florian Sylvain committed 2026-10-19 00:25:31 +02:00
1 parent 9f4ce426a8
commit daf3594316
86 files changed
+4223 -1485

No files matched your search

@@ -3,13 +3,15 @@ package database
import (
"RenewCMS/internal/domain/article"
entity "RenewCMS/internal/infrastructure/persistence/models"
"slices"
"gorm.io/gorm"
)
const (
articleSlugIndexName = "idx_articles_site_slug"
articleSlugIndexStatement = "CREATE UNIQUE INDEX " + articleSlugIndexName + " ON articles (site_id, slug)"
articleSlugIndexName = "idx_articles_site_slug"
articleSlugBackfillBatchSize = 500
articleSlugIndexStatement = "CREATE UNIQUE INDEX idx_articles_site_slug ON articles (site_id, slug)"
)
type slugOwner struct {
@@ -23,13 +25,22 @@ type slugAssignment struct {
}
func BackfillArticleSlugs(db *gorm.DB) error {
return db.Transaction(func(tx *gorm.DB) error {
var rows []entity.Article
if err := tx.Unscoped().Select("id", "site_id", "title", "slug", "deleted_at").Order("id ASC").Find(&rows).Error; err != nil {
var rows []entity.Article
if err := db.Unscoped().Select("id", "site_id", "title", "slug", "deleted_at").Order("id ASC").Find(&rows).Error; err != nil {
return err
}
assignments := planSlugAssignments(rows)
for batch := range slices.Chunk(assignments, articleSlugBackfillBatchSize) {
if err := writeSlugAssignments(db, batch); err != nil {
return err
}
assignments := planSlugAssignments(rows)
for _, assignment := range assignments {
}
return nil
}
func writeSlugAssignments(db *gorm.DB, batch []slugAssignment) error {
return db.Transaction(func(tx *gorm.DB) error {
for _, assignment := range batch {
if err := tx.Unscoped().Model(&entity.Article{}).Where("id = ?", assignment.id).UpdateColumn("slug", assignment.slug).Error; err != nil {
return err
}