package loaders import ( "context" "git.aiterp.net/stufflog/server/database/repositories" "git.aiterp.net/stufflog/server/internal/slerrors" "git.aiterp.net/stufflog/server/models" "time" ) // go run github.com/vektah/dataloaden IssueLoader string \*git.aiterp.net/stufflog/server/models.Issue var issueLoaderCtxKey = "ctx.stufflog.IssueLoader" func IssueLoaderFromContext(ctx context.Context) *IssueLoader { return ctx.Value(issueLoaderCtxKey).(*IssueLoader) } func NewIssueLoader(ctx context.Context, issueRepo repositories.IssueRepository) *IssueLoader { return &IssueLoader{ fetch: func(keys []string) ([]*models.Issue, []error) { results := make([]*models.Issue, len(keys)) errors := make([]error, len(keys)) issues, err := issueRepo.List(ctx, models.IssueFilter{IssueIDs: keys}) if err != nil { for i := range errors { errors[i] = err } return results, errors } for i, key := range keys { found := false for _, issue := range issues { if issue.ID == key { found = true results[i] = issue break } } if !found { errors[i] = slerrors.NotFound("Issue") } } return results, errors }, wait: time.Millisecond / 2, maxBatch: 16, } }