package console_v1 // 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.87 import ( "context" "errors" "go.gearno.de/kit/log" "go.probo.inc/probo/pkg/coredata" "go.probo.inc/probo/pkg/page" "go.probo.inc/probo/pkg/probo" "go.probo.inc/probo/pkg/server/api/console/v1/schema" "go.probo.inc/probo/pkg/server/api/console/v1/types" "go.probo.inc/probo/pkg/server/gqlutils" ) // CreateSnapshot is the resolver for the createSnapshot field. func (r *mutationResolver) CreateSnapshot(ctx context.Context, input types.CreateSnapshotInput) (*types.CreateSnapshotPayload, error) { if err := r.authorize(ctx, input.OrganizationID, probo.ActionSnapshotCreate); err != nil { return nil, err } prb := r.ProboService(ctx, input.OrganizationID.TenantID()) snapshot, err := prb.Snapshots.Create( ctx, &probo.CreateSnapshotRequest{ OrganizationID: input.OrganizationID, Name: input.Name, Description: input.Description, Type: input.Type, }, ) if err != nil { r.logger.ErrorCtx(ctx, "cannot create snapshot", log.Error(err)) return nil, gqlutils.Internal(ctx) } return &types.CreateSnapshotPayload{ SnapshotEdge: types.NewSnapshotEdge(snapshot, coredata.SnapshotOrderFieldCreatedAt), }, nil } // DeleteSnapshot is the resolver for the deleteSnapshot field. func (r *mutationResolver) DeleteSnapshot(ctx context.Context, input types.DeleteSnapshotInput) (*types.DeleteSnapshotPayload, error) { if err := r.authorize(ctx, input.SnapshotID, probo.ActionSnapshotDelete); err != nil { return nil, err } prb := r.ProboService(ctx, input.SnapshotID.TenantID()) err := prb.Snapshots.Delete(ctx, input.SnapshotID) if err != nil { r.logger.ErrorCtx(ctx, "cannot delete snapshot", log.Error(err)) return nil, gqlutils.Internal(ctx) } return &types.DeleteSnapshotPayload{ DeletedSnapshotID: input.SnapshotID, }, nil } // Organization is the resolver for the organization field. func (r *snapshotResolver) Organization(ctx context.Context, obj *types.Snapshot) (*types.Organization, error) { if err := r.authorize(ctx, obj.ID, probo.ActionOrganizationGet); err != nil { return nil, err } prb := r.ProboService(ctx, obj.ID.TenantID()) snapshot, err := prb.Snapshots.Get(ctx, obj.ID) if err != nil { r.logger.ErrorCtx(ctx, "cannot get snapshot", log.Error(err)) return nil, gqlutils.Internal(ctx) } organization, err := prb.Organizations.Get(ctx, snapshot.OrganizationID) if err != nil { if errors.Is(err, coredata.ErrResourceNotFound) { return nil, gqlutils.NotFound(ctx, err) } r.logger.ErrorCtx(ctx, "cannot get organization", log.Error(err)) return nil, gqlutils.Internal(ctx) } return types.NewOrganization(organization), nil } // Controls is the resolver for the controls field. func (r *snapshotResolver) Controls(ctx context.Context, obj *types.Snapshot, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) (*types.ControlConnection, error) { if err := r.authorize(ctx, obj.ID, probo.ActionControlList); err != nil { return nil, err } prb := r.ProboService(ctx, obj.ID.TenantID()) pageOrderBy := page.OrderBy[coredata.ControlOrderField]{ Field: coredata.ControlOrderFieldCreatedAt, Direction: page.OrderDirectionDesc, } if orderBy != nil { pageOrderBy = page.OrderBy[coredata.ControlOrderField]{ Field: orderBy.Field, Direction: orderBy.Direction, } } cursor := types.NewCursor(first, after, last, before, pageOrderBy) var controlFilter = coredata.NewControlFilter(nil) if filter != nil { controlFilter = coredata.NewControlFilter(filter.Query) } page, err := prb.Controls.ListForSnapshotID(ctx, obj.ID, cursor, controlFilter) if err != nil { r.logger.ErrorCtx(ctx, "cannot list snapshot controls", log.Error(err)) return nil, gqlutils.Internal(ctx) } return types.NewControlConnection(page, r, obj.ID, controlFilter), nil } // Permission is the resolver for the permission field. func (r *snapshotResolver) Permission(ctx context.Context, obj *types.Snapshot, action string) (bool, error) { return r.Resolver.Permission(ctx, obj, action) } // TotalCount is the resolver for the totalCount field. func (r *snapshotConnectionResolver) TotalCount(ctx context.Context, obj *types.SnapshotConnection) (int, error) { if err := r.authorize(ctx, obj.ParentID, probo.ActionSnapshotList); err != nil { return 0, err } prb := r.ProboService(ctx, obj.ParentID.TenantID()) switch obj.Resolver.(type) { case *organizationResolver: count, err := prb.Snapshots.CountForOrganizationID(ctx, obj.ParentID) if err != nil { r.logger.ErrorCtx(ctx, "cannot count snapshots", log.Error(err)) return 0, gqlutils.Internal(ctx) } return count, nil } r.logger.ErrorCtx(ctx, "unsupported resolver") return 0, gqlutils.Internal(ctx) } // Snapshot returns schema.SnapshotResolver implementation. func (r *Resolver) Snapshot() schema.SnapshotResolver { return &snapshotResolver{r} } // SnapshotConnection returns schema.SnapshotConnectionResolver implementation. func (r *Resolver) SnapshotConnection() schema.SnapshotConnectionResolver { return &snapshotConnectionResolver{r} } type snapshotResolver struct{ *Resolver } type snapshotConnectionResolver struct{ *Resolver }