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 }