package graph // This file will be automatically regenerated based on the schema, any resolver // implementations // will be copied through when generating and any unknown code will be moved to the end. // Code generated by github.com/99designs/gqlgen version v0.17.94 import ( "context" model1 "sourcecraft.dev/bigbes/sr-ht-core/model" "sourcecraft.dev/bigbes/sr-ht-dolt/browse" "sourcecraft.dev/bigbes/sr-ht-dolt/graph/api" "sourcecraft.dev/bigbes/sr-ht-dolt/graph/model" ) // DefaultBranch is the resolver for the defaultBranch field. func (r *databaseResolver) DefaultBranch(ctx context.Context, obj *model.Database) (*string, error) { sess, err := r.openStore(ctx, "defaultBranch", obj.Repo) if err != nil { return nil, err } defer sess.Close() branches, err := sess.Branches(ctx) if err != nil { return nil, internalError("Database.defaultBranch", err) } // A store nothing has been pushed to has no branches, and that is a state // rather than a failure: null, not an error. if len(branches) == 0 { return nil, nil } name := browse.DefaultBranch(branches) return &name, nil } // Branches is the resolver for the branches field. func (r *databaseResolver) Branches(ctx context.Context, obj *model.Database) ([]*model.Branch, error) { sess, err := r.openStore(ctx, "branches", obj.Repo) if err != nil { return nil, err } defer sess.Close() branches, err := sess.Branches(ctx) if err != nil { return nil, internalError("Database.branches", err) } out := make([]*model.Branch, 0, len(branches)) for _, b := range branches { out = append(out, &model.Branch{Name: b.Name, Head: b.Head}) } return out, nil } // Log is the resolver for the log field. func (r *databaseResolver) Log(ctx context.Context, obj *model.Database, ref *string, from *model1.Cursor, limit *int) (*model.CommitCursor, error) { sess, err := r.openStore(ctx, "log", obj.Repo) if err != nil { return nil, err } defer sess.Close() refStr, err := resolveRef(ctx, sess, ref) if err != nil { return nil, err } // No branches at all: an empty log, not an error, for the same reason // defaultBranch answers null. if refStr == "" { return &model.CommitCursor{Results: []*model.Commit{}}, nil } commits, next, err := sess.Log(ctx, refStr, cursorNext(from), logLimit(limit)) if err != nil { return nil, internalError("Database.log", err) } out := make([]*model.Commit, 0, len(commits)) for _, c := range commits { out = append(out, &model.Commit{ Hash: c.Hash, Author: c.Author, Email: c.Email, Date: c.Date, Message: c.Message, Parents: c.ParentHashes, }) } return &model.CommitCursor{Results: out, Cursor: nextCursor(next)}, nil } // Tables is the resolver for the tables field. func (r *databaseResolver) Tables(ctx context.Context, obj *model.Database, ref *string) ([]*model.Table, error) { sess, err := r.openStore(ctx, "tables", obj.Repo) if err != nil { return nil, err } defer sess.Close() refStr, err := resolveRef(ctx, sess, ref) if err != nil { return nil, err } if refStr == "" { return []*model.Table{}, nil } tables, err := sess.Tables(ctx, refStr) if err != nil { return nil, internalError("Database.tables", err) } out := make([]*model.Table, 0, len(tables)) for _, t := range tables { columns := make([]*model.Column, 0, len(t.Columns)) for _, c := range t.Columns { columns = append(columns, &model.Column{ Name: c.Name, Type: c.Type, PrimaryKey: c.PrimaryKey, Nullable: c.Nullable, }) } out = append(out, &model.Table{ Name: t.Name, Columns: columns, RowCount: int(t.RowCount), }) } return out, nil } // ACL is the resolver for the acl field. func (r *databaseResolver) ACL(ctx context.Context, obj *model.Database) ([]*model.ACLEntry, error) { // Owner-only, and the empty list rather than an error for everybody else: // who collaborates on a database you do not own is not yours to enumerate, // and a refusal here would answer a question the caller may not ask. caller := callerOf(ctx) if caller == nil || caller.UserID != obj.Repo.OwnerID { return []*model.ACLEntry{}, nil } entries, err := r.repos.ListACL(ctx, obj.Repo.ID) if err != nil { return nil, internalError("Database.acl", err) } out := make([]*model.ACLEntry, 0, len(entries)) for _, e := range entries { out = append(out, &model.ACLEntry{ User: model.NewUser(e.Username), Mode: model.AccessMode(e.Mode), }) } return out, nil } // Me is the resolver for the me field. func (r *queryResolver) Me(ctx context.Context) (*model.User, error) { caller := callerOf(ctx) if caller == nil { return nil, nil } return model.NewUser(caller.Username), nil } // Databases is the resolver for the databases field. func (r *queryResolver) Databases(ctx context.Context, cursor *model1.Cursor, filter *model1.Filter) (*model.DatabaseCursor, error) { repos, err := r.repos.ListReposForViewer(ctx, callerOf(ctx)) if err != nil { return nil, internalError("databases", err) } return page(repos, cursor, filter), nil } // DatabasesByOwner is the resolver for the databasesByOwner field. func (r *queryResolver) DatabasesByOwner(ctx context.Context, owner string, cursor *model1.Cursor, filter *model1.Filter) (*model.DatabaseCursor, error) { repos, err := r.repos.ListReposByOwner(ctx, owner, callerOf(ctx)) if err != nil { return nil, internalError("databasesByOwner", err) } return page(repos, cursor, filter), nil } // Database is the resolver for the database field. func (r *queryResolver) Database(ctx context.Context, owner string, name string) (*model.Database, error) { repo, err := r.resolveDatabase(ctx, owner, name) if err != nil || repo == nil { return nil, err } return model.NewDatabase(repo), nil } // Database returns api.DatabaseResolver implementation. func (r *Resolver) Database() api.DatabaseResolver { return &databaseResolver{r} } // Query returns api.QueryResolver implementation. func (r *Resolver) Query() api.QueryResolver { return &queryResolver{r} } type ( databaseResolver struct{ *Resolver } queryResolver struct{ *Resolver } )