/
users.go
53 lines (43 loc) · 1.09 KB
/
users.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 dataloaders
import (
"context"
"log"
"github.com/dokedu/dokedu/backend/internal/db"
"github.com/dokedu/dokedu/backend/internal/middleware"
"github.com/graph-gophers/dataloader"
"github.com/uptrace/bun"
)
func (u *Reader) GetUser(ctx context.Context, keys dataloader.Keys) []*dataloader.Result {
iDs := make([]string, len(keys))
for ix, key := range keys {
iDs[ix] = key.String()
}
var users []db.User
err := u.conn.NewSelect().
Model(&users).
Where("id IN (?)", bun.In(iDs)).
Scan(ctx)
if err != nil {
log.Fatal(err)
}
// return users in the same order requested
output := make([]*dataloader.Result, len(keys))
for ix, key := range keys {
for _, user := range users {
if user.ID == key.String() {
output[ix] = &dataloader.Result{Data: &user}
break
}
}
}
return output
}
func GetUser(ctx context.Context, id string, currentUser *middleware.UserContext) (*db.User, error) {
loaders := For(ctx)
thunk := loaders.UserLoader.Load(ctx, dataloader.StringKey(id))
result, err := thunk()
if err != nil {
return nil, err
}
return result.(*db.User), nil
}