-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaggregated.go
40 lines (33 loc) · 1.06 KB
/
aggregated.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package mapper
import (
"sort"
api "github.com/michaljurecko/ch-demo/api/gen/go/demo/v1"
model "github.com/michaljurecko/ch-demo/internal/pkg/app/demo/model/gen"
"github.com/michaljurecko/ch-demo/internal/pkg/common/dataverse/webapi"
)
func PlayersAndCharacters(
playersCol *webapi.Collection[model.Player],
charactersCol *webapi.Collection[model.Character],
) []*api.CharactersPerPlayer {
players := playersCol.Items
sort.SliceStable(players, func(i, j int) bool {
return players[i].ID < players[j].ID
})
characters := charactersCol.Items
sort.SliceStable(characters, func(i, j int) bool {
return characters[i].ID < characters[j].ID
})
charactersMap := make(map[string][]*api.Character)
for _, character := range characters {
playerID := character.Player.ID()
charactersMap[playerID] = append(charactersMap[playerID], Character(character))
}
var out []*api.CharactersPerPlayer
for _, player := range players {
out = append(out, &api.CharactersPerPlayer{
Player: Player(player),
Characters: charactersMap[player.ID],
})
}
return out
}