Files
RenewCMS/internal/infrastructure/useCases/ListSitemap.go
T

51 lines
1.3 KiB
Go

package useCases
import (
"RenewCMS/internal/domain/article"
"RenewCMS/internal/domain/site"
"time"
)
type ListSitemapUseCase struct {
articleRepository article.Repository
sites site.Repository
}
func NewListSitemapUseCase(articleRepository article.Repository, sites site.Repository) *ListSitemapUseCase {
return &ListSitemapUseCase{articleRepository: articleRepository, sites: sites}
}
type SitemapEntry struct {
URL string
ModifiedAt time.Time
Noindex bool
}
type SitemapPage struct {
Entries []SitemapEntry
Total int
}
func (u *ListSitemapUseCase) List(siteKey string, page int, size int) (SitemapPage, error) {
owner, err := u.sites.GetByKey(siteKey)
if err != nil {
return SitemapPage{}, err
}
online := true
found, err := u.articleRepository.FindPage(article.Filters{
IsOnline: &online,
SiteID: &owner.ID,
Page: page,
Size: size,
Sort: article.Sort{Field: article.SortByID, Direction: article.SortAsc},
})
if err != nil {
return SitemapPage{}, err
}
entries := make([]SitemapEntry, 0, len(found.Items))
for _, item := range found.Items {
entries = append(entries, SitemapEntry{URL: articleURL(owner, item.Slug), ModifiedAt: item.UpdatedAt, Noindex: item.Noindex})
}
return SitemapPage{Entries: entries, Total: found.Total}, nil
}