generated from mattermost/mattermost-plugin-starter-template
-
Notifications
You must be signed in to change notification settings - Fork 144
/
graphql_loader_favorite.go
53 lines (43 loc) · 1.1 KB
/
graphql_loader_favorite.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
41
42
43
44
45
46
47
48
49
50
51
52
53
package api
import (
"context"
"github.com/graph-gophers/dataloader/v7"
"github.com/mattermost/mattermost-plugin-playbooks/server/app"
)
type favoriteInfo struct {
TeamID string
UserID string
ID string
Type app.CategoryItemType
}
func graphQLFavoritesLoader[V bool](ctx context.Context, keys []favoriteInfo) []*dataloader.Result[V] {
result := make([]*dataloader.Result[V], len(keys))
if len(keys) == 0 {
return result
}
c, err := getContext(ctx)
if err != nil {
for i := range keys {
result[i] = &dataloader.Result[V]{Error: err}
}
return result
}
// assume all keys are for the same team and user
teamID := keys[0].TeamID
userID := keys[0].UserID
categoryItems := make([]app.CategoryItem, len(keys))
for i, favorite := range keys {
categoryItems[i] = app.CategoryItem{
ItemID: favorite.ID,
Type: favorite.Type,
}
}
favorites, err := c.categoryService.AreItemsFavorites(categoryItems, teamID, userID)
if err != nil {
populateResultWithError(err, result)
}
for i, fav := range favorites {
result[i] = &dataloader.Result[V]{Data: V(fav)}
}
return result
}