feat: editorial article list

This commit is contained in:
Florian Sylvain committed 2026-11-02 07:28:44 +01:00
1 parent a0b3c58c52
commit a671b81f80
103 files changed
+6493 -1805

No files matched your search

@@ -61,6 +61,12 @@ func (a *ArticleRepository) scoped(filters domain.Filters) *gorm.DB {
case domain.StatusDraft:
query = query.Where("is_online = ?", false)
}
if filters.Lang != nil {
query = query.Where("lang = ?", *filters.Lang)
}
if filters.AuthorID != nil {
query = query.Where("id IN (SELECT article_id FROM article_authors WHERE author_id = ?)", *filters.AuthorID)
}
return query
}
@@ -188,6 +194,22 @@ func (a *ArticleRepository) CountVisibleTo(userID uint32) (domain.Counts, error)
return domain.Counts{All: int(online + draft), Online: int(online), Draft: int(draft)}, nil
}
func (a *ArticleRepository) CountVersions(filters domain.Filters) (domain.Counts, error) {
narrowed := domain.Filters{Lang: filters.Lang}
var online, draft int64
if err := a.scoped(narrowed).Where("is_online = ?", true).Count(&online).Error; err != nil {
return domain.Counts{}, err
}
onlineOnly := filters.IsOnline != nil && *filters.IsOnline
if !onlineOnly {
narrowed.VisibleTo = filters.VisibleTo
if err := a.scoped(narrowed).Where("is_online = ?", false).Count(&draft).Error; err != nil {
return domain.Counts{}, err
}
}
return domain.Counts{All: int(online + draft), Online: int(online), Draft: int(draft)}, nil
}
func toDomainArticles(entityArticles []entity.Article) []domain.Article {
domainArticles := make([]domain.Article, 0, len(entityArticles))
for _, entityArticle := range entityArticles {