GraphQL: Optimized dataloaders by adding a 'priming' mechanic to make fewer trips to the database.
the build failed

This commit is contained in:
2018-09-02 12:38:17 +02:00
parent 675c09ef04
commit 3184b60310
4 changed files with 71 additions and 0 deletions
+14
View File
@@ -2,7 +2,9 @@ package queries
import (
"context"
"errors"
"git.aiterp.net/rpdata/api/graphql/loader"
"git.aiterp.net/rpdata/api/graphql/resolver/types"
"git.aiterp.net/rpdata/api/model/log"
)
@@ -70,6 +72,18 @@ func (r *QueryResolver) Logs(ctx context.Context, args *LogsArgs) ([]*types.LogR
}
}
if len(logs) >= 100 {
loader := loader.FromContext(ctx)
if loader == nil {
return nil, errors.New("no loader")
}
for _, log := range logs {
loader.PrimeCharacters("id", log.CharacterIDs...)
loader.PrimeChannels("name", log.Channel)
}
}
resolvers := make([]*types.LogResolver, len(logs))
for i := range logs {
resolvers[i] = &types.LogResolver{L: logs[i]}