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

@@ -4,6 +4,7 @@ import (
domain "RenewCMS/internal/domain/site"
"RenewCMS/internal/infrastructure/persistence/mappers"
entity "RenewCMS/internal/infrastructure/persistence/models"
"strings"
"gorm.io/gorm"
"gorm.io/gorm/clause"
@@ -59,6 +60,40 @@ func (s *SiteRepository) List() ([]domain.Site, error) {
return sites, nil
}
func (s *SiteRepository) Find(query domain.ListQuery) (domain.Page, error) {
all, err := s.List()
if err != nil {
return domain.Page{}, err
}
matching := all
if needle := foldForSearch(strings.TrimSpace(query.Q)); needle != "" {
matching = make([]domain.Site, 0, len(all))
for _, candidate := range all {
if siteMatches(candidate, needle) {
matching = append(matching, candidate)
}
}
}
page := domain.Page{Items: []domain.Site{}, Total: len(matching)}
if query.Size <= 0 {
page.Items = matching
return page, nil
}
start := pageStart(max(query.Page, 1), query.Size, len(matching))
end := min(start+query.Size, len(matching))
page.Items = matching[start:end]
return page, nil
}
func siteMatches(candidate domain.Site, needle string) bool {
for _, field := range []string{candidate.Name, candidate.Key, candidate.BaseURL} {
if strings.Contains(foldForSearch(field), needle) {
return true
}
}
return false
}
func (s *SiteRepository) load(db *gorm.DB, model entity.Site) (domain.Site, error) {
total, err := s.articleCount(db, model.ID)
if err != nil {