49 lines
1.3 KiB
Go
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
|
|
}
|