59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package dataloaders
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/tribalwarshelp/api/langversion"
|
|
"github.com/tribalwarshelp/api/player"
|
|
"github.com/tribalwarshelp/api/tribe"
|
|
"github.com/tribalwarshelp/api/village"
|
|
"github.com/tribalwarshelp/shared/models"
|
|
)
|
|
|
|
type DataLoaders struct {
|
|
LangVersionByTag LangVersionLoader
|
|
}
|
|
|
|
type Config struct {
|
|
PlayerRepo player.Repository
|
|
TribeRepo tribe.Repository
|
|
VillageRepo village.Repository
|
|
LangVersionRepo langversion.Repository
|
|
}
|
|
|
|
func NewDataLoaders(cfg Config) *DataLoaders {
|
|
return &DataLoaders{
|
|
LangVersionByTag: LangVersionLoader{
|
|
wait: 2 * time.Millisecond,
|
|
maxBatch: 0,
|
|
fetch: func(keys []string) ([]*models.LangVersion, []error) {
|
|
tags := []models.LanguageTag{}
|
|
for _, tag := range keys {
|
|
tags = append(tags, models.LanguageTag(tag))
|
|
}
|
|
langVersions, _, err := cfg.LangVersionRepo.Fetch(context.Background(), langversion.FetchConfig{
|
|
Filter: &models.LangVersionFilter{
|
|
Tag: tags,
|
|
},
|
|
})
|
|
if err != nil {
|
|
return nil, []error{err}
|
|
}
|
|
|
|
langVersionByTag := make(map[models.LanguageTag]*models.LangVersion)
|
|
for _, langVersion := range langVersions {
|
|
langVersionByTag[langVersion.Tag] = langVersion
|
|
}
|
|
|
|
inOrder := make([]*models.LangVersion, len(keys))
|
|
for i, tag := range tags {
|
|
inOrder[i] = langVersionByTag[tag]
|
|
}
|
|
|
|
return inOrder, nil
|
|
},
|
|
},
|
|
}
|
|
}
|