feat: SEO backend data (1/4)

This commit is contained in:
Florian Sylvain committed 2026-10-15 19:30:29 +02:00
1 parent cb1410f0b0
commit 0eb46b0d74
90 files changed
+6094 -350

No files matched your search

+20 -4
View File
@@ -6,6 +6,7 @@ import (
"RenewCMS/internal/domain/image"
"RenewCMS/internal/domain/site"
"RenewCMS/internal/domain/user"
"slices"
"strings"
)
@@ -106,7 +107,7 @@ func (l *ListMediaUseCase) List(query image.ListQuery) (MediaPage, error) {
}
func (l *ListMediaUseCase) Describe(img image.Image) (MediaItem, error) {
articles, err := l.articleRepository.FindByBodyContaining(image.StoredName(img.Path))
articleCount, err := l.articleUsageCount(img)
if err != nil {
return MediaItem{}, err
}
@@ -137,7 +138,23 @@ func (l *ListMediaUseCase) Describe(img image.Image) (MediaItem, error) {
variantSize += row.Size
}
return MediaItem{Image: img, UploadedBy: uploadedBy, UsedIn: len(articles) + siteUsage[img.ID], Duplicate: duplicate, VariantCount: len(rows), VariantSize: variantSize}, nil
return MediaItem{Image: img, UploadedBy: uploadedBy, UsedIn: articleCount + siteUsage[img.ID], Duplicate: duplicate, VariantCount: len(rows), VariantSize: variantSize}, nil
}
func (l *ListMediaUseCase) articleUsageCount(img image.Image) (int, error) {
inBody, err := l.articleRepository.FindByBodyContaining(image.StoredName(img.Path))
if err != nil {
return 0, err
}
referencing, err := l.articleRepository.FindByImage(img.ID)
if err != nil {
return 0, err
}
distinct := map[uint32]bool{}
for _, found := range slices.Concat(inBody, referencing) {
distinct[found.ID] = true
}
return len(distinct), nil
}
func (l *ListMediaUseCase) usageCounter() (func(image.Image) int, error) {
@@ -150,10 +167,9 @@ func (l *ListMediaUseCase) usageCounter() (func(image.Image) int, error) {
return nil, err
}
return func(img image.Image) int {
storedName := image.StoredName(img.Path)
used := siteUsage[img.ID]
for _, a := range articles {
if strings.Contains(a.Body, storedName) {
if articleMentionsImage(a, img) {
used++
}
}