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

49 lines
1.3 KiB
Go

package useCases
import (
"RenewCMS/internal/domain/localization"
"RenewCMS/internal/domain/site"
"cmp"
"slices"
)
type GetLanguageSetupUseCase struct {
sites site.Repository
localization localization.Repository
}
func NewGetLanguageSetupUseCase(sites site.Repository, localization localization.Repository) *GetLanguageSetupUseCase {
return &GetLanguageSetupUseCase{sites, localization}
}
func (g *GetLanguageSetupUseCase) Get() (localization.SetupView, error) {
pending, err := pendingSites(g.sites, g.localization)
if err != nil {
return localization.SetupView{}, err
}
view := localization.SetupView{Sites: []localization.PendingSite{}, Available: localization.Available()}
for _, found := range pending {
view.Sites = append(view.Sites, localization.NewPendingSite(found))
}
return view, nil
}
func pendingSites(sites site.Repository, repository localization.Repository) ([]site.Site, error) {
all, err := sites.List()
if err != nil {
return nil, err
}
confirmed, err := repository.ConfirmedSites()
if err != nil {
return nil, err
}
pending := []site.Site{}
for _, candidate := range all {
if !confirmed[candidate.ID] {
pending = append(pending, candidate)
}
}
slices.SortFunc(pending, func(left site.Site, right site.Site) int { return cmp.Compare(left.ID, right.ID) })
return pending, nil
}