summaryrefslogtreecommitdiffstatshomepage
path: root/graphql/resolvers/repo.go
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2020-06-21 22:12:04 +0200
committerMichael Muré <batolettre@gmail.com>2020-06-27 23:03:05 +0200
commit2ab6381a94d55fa22b80acdbb18849d6b24951f9 (patch)
tree99942b000955623ea7466b9fa4cc7dab37645df6 /graphql/resolvers/repo.go
parent5f72b04ef8e84b1c367ca6874519706318e351f5 (diff)
downloadgit-bug-2ab6381a94d55fa22b80acdbb18849d6b24951f9.tar.gz
git-bug-2ab6381a94d55fa22b80acdbb18849d6b24951f9.zip
Reorganize the webUI and API code
Included in the changes: - create a new /api root package to hold all API code, migrate /graphql in there - git API handlers all use the cache instead of the repo directly - git API handlers are now tested - git API handlers now require a "repo" mux parameter - lots of untangling of API/handlers/middleware - less code in commands/webui.go
Diffstat (limited to 'graphql/resolvers/repo.go')
-rw-r--r--graphql/resolvers/repo.go188
1 files changed, 0 insertions, 188 deletions
diff --git a/graphql/resolvers/repo.go b/graphql/resolvers/repo.go
deleted file mode 100644
index 009ccab6..00000000
--- a/graphql/resolvers/repo.go
+++ /dev/null
@@ -1,188 +0,0 @@
-package resolvers
-
-import (
- "context"
-
- "github.com/MichaelMure/git-bug/bug"
- "github.com/MichaelMure/git-bug/entity"
- "github.com/MichaelMure/git-bug/graphql/connections"
- "github.com/MichaelMure/git-bug/graphql/graph"
- "github.com/MichaelMure/git-bug/graphql/graphqlidentity"
- "github.com/MichaelMure/git-bug/graphql/models"
- "github.com/MichaelMure/git-bug/query"
-)
-
-var _ graph.RepositoryResolver = &repoResolver{}
-
-type repoResolver struct{}
-
-func (repoResolver) Name(_ context.Context, obj *models.Repository) (*string, error) {
- name := obj.Repo.Name()
- return &name, nil
-}
-
-func (repoResolver) AllBugs(_ context.Context, obj *models.Repository, after *string, before *string, first *int, last *int, queryStr *string) (*models.BugConnection, error) {
- input := models.ConnectionInput{
- Before: before,
- After: after,
- First: first,
- Last: last,
- }
-
- var q *query.Query
- if queryStr != nil {
- query2, err := query.Parse(*queryStr)
- if err != nil {
- return nil, err
- }
- q = query2
- } else {
- q = query.NewQuery()
- }
-
- // Simply pass a []string with the ids to the pagination algorithm
- source := obj.Repo.QueryBugs(q)
-
- // The edger create a custom edge holding just the id
- edger := func(id entity.Id, offset int) connections.Edge {
- return connections.LazyBugEdge{
- Id: id,
- Cursor: connections.OffsetToCursor(offset),
- }
- }
-
- // The conMaker will finally load and compile bugs from git to replace the selected edges
- conMaker := func(lazyBugEdges []*connections.LazyBugEdge, lazyNode []entity.Id, info *models.PageInfo, totalCount int) (*models.BugConnection, error) {
- edges := make([]*models.BugEdge, len(lazyBugEdges))
- nodes := make([]models.BugWrapper, len(lazyBugEdges))
-
- for i, lazyBugEdge := range lazyBugEdges {
- excerpt, err := obj.Repo.ResolveBugExcerpt(lazyBugEdge.Id)
- if err != nil {
- return nil, err
- }
-
- b := models.NewLazyBug(obj.Repo, excerpt)
-
- edges[i] = &models.BugEdge{
- Cursor: lazyBugEdge.Cursor,
- Node: b,
- }
- nodes[i] = b
- }
-
- return &models.BugConnection{
- Edges: edges,
- Nodes: nodes,
- PageInfo: info,
- TotalCount: totalCount,
- }, nil
- }
-
- return connections.LazyBugCon(source, edger, conMaker, input)
-}
-
-func (repoResolver) Bug(_ context.Context, obj *models.Repository, prefix string) (models.BugWrapper, error) {
- excerpt, err := obj.Repo.ResolveBugExcerptPrefix(prefix)
- if err != nil {
- return nil, err
- }
-
- return models.NewLazyBug(obj.Repo, excerpt), nil
-}
-
-func (repoResolver) AllIdentities(_ context.Context, obj *models.Repository, after *string, before *string, first *int, last *int) (*models.IdentityConnection, error) {
- input := models.ConnectionInput{
- Before: before,
- After: after,
- First: first,
- Last: last,
- }
-
- // Simply pass a []string with the ids to the pagination algorithm
- source := obj.Repo.AllIdentityIds()
-
- // The edger create a custom edge holding just the id
- edger := func(id entity.Id, offset int) connections.Edge {
- return connections.LazyIdentityEdge{
- Id: id,
- Cursor: connections.OffsetToCursor(offset),
- }
- }
-
- // The conMaker will finally load and compile identities from git to replace the selected edges
- conMaker := func(lazyIdentityEdges []*connections.LazyIdentityEdge, lazyNode []entity.Id, info *models.PageInfo, totalCount int) (*models.IdentityConnection, error) {
- edges := make([]*models.IdentityEdge, len(lazyIdentityEdges))
- nodes := make([]models.IdentityWrapper, len(lazyIdentityEdges))
-
- for k, lazyIdentityEdge := range lazyIdentityEdges {
- excerpt, err := obj.Repo.ResolveIdentityExcerpt(lazyIdentityEdge.Id)
- if err != nil {
- return nil, err
- }
-
- i := models.NewLazyIdentity(obj.Repo, excerpt)
-
- edges[k] = &models.IdentityEdge{
- Cursor: lazyIdentityEdge.Cursor,
- Node: i,
- }
- nodes[k] = i
- }
-
- return &models.IdentityConnection{
- Edges: edges,
- Nodes: nodes,
- PageInfo: info,
- TotalCount: totalCount,
- }, nil
- }
-
- return connections.LazyIdentityCon(source, edger, conMaker, input)
-}
-
-func (repoResolver) Identity(_ context.Context, obj *models.Repository, prefix string) (models.IdentityWrapper, error) {
- excerpt, err := obj.Repo.ResolveIdentityExcerptPrefix(prefix)
- if err != nil {
- return nil, err
- }
-
- return models.NewLazyIdentity(obj.Repo, excerpt), nil
-}
-
-func (repoResolver) UserIdentity(ctx context.Context, obj *models.Repository) (models.IdentityWrapper, error) {
- id, err := graphqlidentity.ForContext(ctx, obj.Repo)
- if err == graphqlidentity.ErrNotAuthenticated {
- return nil, nil
- } else if err != nil {
- return nil, err
- }
- return models.NewLoadedIdentity(id.Identity), nil
-}
-
-func (repoResolver) ValidLabels(_ context.Context, obj *models.Repository, after *string, before *string, first *int, last *int) (*models.LabelConnection, error) {
- input := models.ConnectionInput{
- Before: before,
- After: after,
- First: first,
- Last: last,
- }
-
- edger := func(label bug.Label, offset int) connections.Edge {
- return models.LabelEdge{
- Node: label,
- Cursor: connections.OffsetToCursor(offset),
- }
- }
-
- conMaker := func(edges []*models.LabelEdge, nodes []bug.Label, info *models.PageInfo, totalCount int) (*models.LabelConnection, error) {
- return &models.LabelConnection{
- Edges: edges,
- Nodes: nodes,
- PageInfo: info,
- TotalCount: totalCount,
- }, nil
- }
-
- return connections.LabelCon(obj.Repo.ValidLabels(), edger, conMaker, input)
-}