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 }