Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2026-01-17 13:37:41 -08:00
parent f4153b5dcc
commit 2dade8236b
4 changed files with 135 additions and 132 deletions

View File

@@ -2222,8 +2222,8 @@ type StateOfApplicability implements Node {
snapshotId: ID snapshotId: ID
organization: Organization @goField(forceResolver: true) organization: Organization @goField(forceResolver: true)
owner: People! @goField(forceResolver: true) owner: People! @goField(forceResolver: true)
createdAt: Datetime!
permission(action: String!): Boolean! @goField(forceResolver: true) updatedAt: Datetime!
controls( controls(
first: Int first: Int
@@ -2233,10 +2233,11 @@ type StateOfApplicability implements Node {
orderBy: ControlOrder orderBy: ControlOrder
filter: ControlFilter filter: ControlFilter
): ControlConnection! @goField(forceResolver: true) ): ControlConnection! @goField(forceResolver: true)
availableControls: [AvailableStateOfApplicabilityControl!]! availableControls: [AvailableStateOfApplicabilityControl!]!
@goField(forceResolver: true) @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true)
} }
type Risk implements Node { type Risk implements Node {

View File

@@ -2333,9 +2333,10 @@ type SnapshotConnectionResolver interface {
type StateOfApplicabilityResolver interface { type StateOfApplicabilityResolver interface {
Organization(ctx context.Context, obj *types.StateOfApplicability) (*types.Organization, error) Organization(ctx context.Context, obj *types.StateOfApplicability) (*types.Organization, error)
Owner(ctx context.Context, obj *types.StateOfApplicability) (*types.People, error) Owner(ctx context.Context, obj *types.StateOfApplicability) (*types.People, error)
Permission(ctx context.Context, obj *types.StateOfApplicability, action string) (bool, error)
Controls(ctx context.Context, obj *types.StateOfApplicability, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) (*types.ControlConnection, error) Controls(ctx context.Context, obj *types.StateOfApplicability, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) (*types.ControlConnection, error)
AvailableControls(ctx context.Context, obj *types.StateOfApplicability) ([]*types.AvailableStateOfApplicabilityControl, error) AvailableControls(ctx context.Context, obj *types.StateOfApplicability) ([]*types.AvailableStateOfApplicabilityControl, error)
Permission(ctx context.Context, obj *types.StateOfApplicability, action string) (bool, error)
} }
type StateOfApplicabilityConnectionResolver interface { type StateOfApplicabilityConnectionResolver interface {
TotalCount(ctx context.Context, obj *types.StateOfApplicabilityConnection) (int, error) TotalCount(ctx context.Context, obj *types.StateOfApplicabilityConnection) (int, error)
@@ -12564,8 +12565,8 @@ type StateOfApplicability implements Node {
snapshotId: ID snapshotId: ID
organization: Organization @goField(forceResolver: true) organization: Organization @goField(forceResolver: true)
owner: People! @goField(forceResolver: true) owner: People! @goField(forceResolver: true)
createdAt: Datetime!
permission(action: String!): Boolean! @goField(forceResolver: true) updatedAt: Datetime!
controls( controls(
first: Int first: Int
@@ -12575,10 +12576,11 @@ type StateOfApplicability implements Node {
orderBy: ControlOrder orderBy: ControlOrder
filter: ControlFilter filter: ControlFilter
): ControlConnection! @goField(forceResolver: true) ): ControlConnection! @goField(forceResolver: true)
availableControls: [AvailableStateOfApplicabilityControl!]! availableControls: [AvailableStateOfApplicabilityControl!]!
@goField(forceResolver: true) @goField(forceResolver: true)
createdAt: Datetime!
updatedAt: Datetime! permission(action: String!): Boolean! @goField(forceResolver: true)
} }
type Risk implements Node { type Risk implements Node {
@@ -48542,43 +48544,60 @@ func (ec *executionContext) fieldContext_StateOfApplicability_owner(_ context.Co
return fc, nil return fc, nil
} }
func (ec *executionContext) _StateOfApplicability_permission(ctx context.Context, field graphql.CollectedField, obj *types.StateOfApplicability) (ret graphql.Marshaler) { func (ec *executionContext) _StateOfApplicability_createdAt(ctx context.Context, field graphql.CollectedField, obj *types.StateOfApplicability) (ret graphql.Marshaler) {
return graphql.ResolveField( return graphql.ResolveField(
ctx, ctx,
ec.OperationContext, ec.OperationContext,
field, field,
ec.fieldContext_StateOfApplicability_permission, ec.fieldContext_StateOfApplicability_createdAt,
func(ctx context.Context) (any, error) { func(ctx context.Context) (any, error) {
fc := graphql.GetFieldContext(ctx) return obj.CreatedAt, nil
return ec.resolvers.StateOfApplicability().Permission(ctx, obj, fc.Args["action"].(string))
}, },
nil, nil,
ec.marshalNBoolean2bool, ec.marshalNDatetime2timeᚐTime,
true, true,
true, true,
) )
} }
func (ec *executionContext) fieldContext_StateOfApplicability_permission(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { func (ec *executionContext) fieldContext_StateOfApplicability_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{ fc = &graphql.FieldContext{
Object: "StateOfApplicability", Object: "StateOfApplicability",
Field: field, Field: field,
IsMethod: true, IsMethod: false,
IsResolver: true, IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type Boolean does not have child fields") return nil, errors.New("field of type Datetime does not have child fields")
}, },
} }
defer func() { return fc, nil
if r := recover(); r != nil {
err = ec.Recover(ctx, r)
ec.Error(ctx, err)
} }
}()
ctx = graphql.WithFieldContext(ctx, fc) func (ec *executionContext) _StateOfApplicability_updatedAt(ctx context.Context, field graphql.CollectedField, obj *types.StateOfApplicability) (ret graphql.Marshaler) {
if fc.Args, err = ec.field_StateOfApplicability_permission_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { return graphql.ResolveField(
ec.Error(ctx, err) ctx,
return fc, err ec.OperationContext,
field,
ec.fieldContext_StateOfApplicability_updatedAt,
func(ctx context.Context) (any, error) {
return obj.UpdatedAt, nil
},
nil,
ec.marshalNDatetime2timeᚐTime,
true,
true,
)
}
func (ec *executionContext) fieldContext_StateOfApplicability_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "StateOfApplicability",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type Datetime does not have child fields")
},
} }
return fc, nil return fc, nil
} }
@@ -48689,60 +48708,43 @@ func (ec *executionContext) fieldContext_StateOfApplicability_availableControls(
return fc, nil return fc, nil
} }
func (ec *executionContext) _StateOfApplicability_createdAt(ctx context.Context, field graphql.CollectedField, obj *types.StateOfApplicability) (ret graphql.Marshaler) { func (ec *executionContext) _StateOfApplicability_permission(ctx context.Context, field graphql.CollectedField, obj *types.StateOfApplicability) (ret graphql.Marshaler) {
return graphql.ResolveField( return graphql.ResolveField(
ctx, ctx,
ec.OperationContext, ec.OperationContext,
field, field,
ec.fieldContext_StateOfApplicability_createdAt, ec.fieldContext_StateOfApplicability_permission,
func(ctx context.Context) (any, error) { func(ctx context.Context) (any, error) {
return obj.CreatedAt, nil fc := graphql.GetFieldContext(ctx)
return ec.resolvers.StateOfApplicability().Permission(ctx, obj, fc.Args["action"].(string))
}, },
nil, nil,
ec.marshalNDatetime2timeᚐTime, ec.marshalNBoolean2bool,
true, true,
true, true,
) )
} }
func (ec *executionContext) fieldContext_StateOfApplicability_createdAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { func (ec *executionContext) fieldContext_StateOfApplicability_permission(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{ fc = &graphql.FieldContext{
Object: "StateOfApplicability", Object: "StateOfApplicability",
Field: field, Field: field,
IsMethod: false, IsMethod: true,
IsResolver: false, IsResolver: true,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type Datetime does not have child fields") return nil, errors.New("field of type Boolean does not have child fields")
}, },
} }
return fc, nil defer func() {
if r := recover(); r != nil {
err = ec.Recover(ctx, r)
ec.Error(ctx, err)
} }
}()
func (ec *executionContext) _StateOfApplicability_updatedAt(ctx context.Context, field graphql.CollectedField, obj *types.StateOfApplicability) (ret graphql.Marshaler) { ctx = graphql.WithFieldContext(ctx, fc)
return graphql.ResolveField( if fc.Args, err = ec.field_StateOfApplicability_permission_args(ctx, field.ArgumentMap(ec.Variables)); err != nil {
ctx, ec.Error(ctx, err)
ec.OperationContext, return fc, err
field,
ec.fieldContext_StateOfApplicability_updatedAt,
func(ctx context.Context) (any, error) {
return obj.UpdatedAt, nil
},
nil,
ec.marshalNDatetime2timeᚐTime,
true,
true,
)
}
func (ec *executionContext) fieldContext_StateOfApplicability_updatedAt(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
fc = &graphql.FieldContext{
Object: "StateOfApplicability",
Field: field,
IsMethod: false,
IsResolver: false,
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
return nil, errors.New("field of type Datetime does not have child fields")
},
} }
return fc, nil return fc, nil
} }
@@ -48973,16 +48975,16 @@ func (ec *executionContext) fieldContext_StateOfApplicabilityControl_stateOfAppl
return ec.fieldContext_StateOfApplicability_organization(ctx, field) return ec.fieldContext_StateOfApplicability_organization(ctx, field)
case "owner": case "owner":
return ec.fieldContext_StateOfApplicability_owner(ctx, field) return ec.fieldContext_StateOfApplicability_owner(ctx, field)
case "permission":
return ec.fieldContext_StateOfApplicability_permission(ctx, field)
case "controls":
return ec.fieldContext_StateOfApplicability_controls(ctx, field)
case "availableControls":
return ec.fieldContext_StateOfApplicability_availableControls(ctx, field)
case "createdAt": case "createdAt":
return ec.fieldContext_StateOfApplicability_createdAt(ctx, field) return ec.fieldContext_StateOfApplicability_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
return ec.fieldContext_StateOfApplicability_updatedAt(ctx, field) return ec.fieldContext_StateOfApplicability_updatedAt(ctx, field)
case "controls":
return ec.fieldContext_StateOfApplicability_controls(ctx, field)
case "availableControls":
return ec.fieldContext_StateOfApplicability_availableControls(ctx, field)
case "permission":
return ec.fieldContext_StateOfApplicability_permission(ctx, field)
} }
return nil, fmt.Errorf("no field named %q was found under type StateOfApplicability", field.Name) return nil, fmt.Errorf("no field named %q was found under type StateOfApplicability", field.Name)
}, },
@@ -49288,16 +49290,16 @@ func (ec *executionContext) fieldContext_StateOfApplicabilityEdge_node(_ context
return ec.fieldContext_StateOfApplicability_organization(ctx, field) return ec.fieldContext_StateOfApplicability_organization(ctx, field)
case "owner": case "owner":
return ec.fieldContext_StateOfApplicability_owner(ctx, field) return ec.fieldContext_StateOfApplicability_owner(ctx, field)
case "permission":
return ec.fieldContext_StateOfApplicability_permission(ctx, field)
case "controls":
return ec.fieldContext_StateOfApplicability_controls(ctx, field)
case "availableControls":
return ec.fieldContext_StateOfApplicability_availableControls(ctx, field)
case "createdAt": case "createdAt":
return ec.fieldContext_StateOfApplicability_createdAt(ctx, field) return ec.fieldContext_StateOfApplicability_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
return ec.fieldContext_StateOfApplicability_updatedAt(ctx, field) return ec.fieldContext_StateOfApplicability_updatedAt(ctx, field)
case "controls":
return ec.fieldContext_StateOfApplicability_controls(ctx, field)
case "availableControls":
return ec.fieldContext_StateOfApplicability_availableControls(ctx, field)
case "permission":
return ec.fieldContext_StateOfApplicability_permission(ctx, field)
} }
return nil, fmt.Errorf("no field named %q was found under type StateOfApplicability", field.Name) return nil, fmt.Errorf("no field named %q was found under type StateOfApplicability", field.Name)
}, },
@@ -54253,16 +54255,16 @@ func (ec *executionContext) fieldContext_UpdateStateOfApplicabilityPayload_state
return ec.fieldContext_StateOfApplicability_organization(ctx, field) return ec.fieldContext_StateOfApplicability_organization(ctx, field)
case "owner": case "owner":
return ec.fieldContext_StateOfApplicability_owner(ctx, field) return ec.fieldContext_StateOfApplicability_owner(ctx, field)
case "permission":
return ec.fieldContext_StateOfApplicability_permission(ctx, field)
case "controls":
return ec.fieldContext_StateOfApplicability_controls(ctx, field)
case "availableControls":
return ec.fieldContext_StateOfApplicability_availableControls(ctx, field)
case "createdAt": case "createdAt":
return ec.fieldContext_StateOfApplicability_createdAt(ctx, field) return ec.fieldContext_StateOfApplicability_createdAt(ctx, field)
case "updatedAt": case "updatedAt":
return ec.fieldContext_StateOfApplicability_updatedAt(ctx, field) return ec.fieldContext_StateOfApplicability_updatedAt(ctx, field)
case "controls":
return ec.fieldContext_StateOfApplicability_controls(ctx, field)
case "availableControls":
return ec.fieldContext_StateOfApplicability_availableControls(ctx, field)
case "permission":
return ec.fieldContext_StateOfApplicability_permission(ctx, field)
} }
return nil, fmt.Errorf("no field named %q was found under type StateOfApplicability", field.Name) return nil, fmt.Errorf("no field named %q was found under type StateOfApplicability", field.Name)
}, },
@@ -83525,42 +83527,16 @@ func (ec *executionContext) _StateOfApplicability(ctx context.Context, sel ast.S
} }
out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "permission": case "createdAt":
field := field out.Values[i] = ec._StateOfApplicability_createdAt(ctx, field, obj)
if out.Values[i] == graphql.Null {
innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { atomic.AddUint32(&out.Invalids, 1)
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
} }
}() case "updatedAt":
res = ec._StateOfApplicability_permission(ctx, field, obj) out.Values[i] = ec._StateOfApplicability_updatedAt(ctx, field, obj)
if res == graphql.Null { if out.Values[i] == graphql.Null {
atomic.AddUint32(&fs.Invalids, 1) atomic.AddUint32(&out.Invalids, 1)
} }
return res
}
if field.Deferrable != nil {
dfs, ok := deferred[field.Deferrable.Label]
di := 0
if ok {
dfs.AddField(field)
di = len(dfs.Values) - 1
} else {
dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
deferred[field.Deferrable.Label] = dfs
}
dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
return innerFunc(ctx, dfs)
})
// don't run the out.Concurrently() call below
out.Values[i] = graphql.Null
continue
}
out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "controls": case "controls":
field := field field := field
@@ -83633,16 +83609,42 @@ func (ec *executionContext) _StateOfApplicability(ctx context.Context, sel ast.S
} }
out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
case "createdAt": case "permission":
out.Values[i] = ec._StateOfApplicability_createdAt(ctx, field, obj) field := field
if out.Values[i] == graphql.Null {
atomic.AddUint32(&out.Invalids, 1) innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) {
defer func() {
if r := recover(); r != nil {
ec.Error(ctx, ec.Recover(ctx, r))
} }
case "updatedAt": }()
out.Values[i] = ec._StateOfApplicability_updatedAt(ctx, field, obj) res = ec._StateOfApplicability_permission(ctx, field, obj)
if out.Values[i] == graphql.Null { if res == graphql.Null {
atomic.AddUint32(&out.Invalids, 1) atomic.AddUint32(&fs.Invalids, 1)
} }
return res
}
if field.Deferrable != nil {
dfs, ok := deferred[field.Deferrable.Label]
di := 0
if ok {
dfs.AddField(field)
di = len(dfs.Values) - 1
} else {
dfs = graphql.NewFieldSet([]graphql.CollectedField{field})
deferred[field.Deferrable.Label] = dfs
}
dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler {
return innerFunc(ctx, dfs)
})
// don't run the out.Concurrently() call below
out.Values[i] = graphql.Null
continue
}
out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) })
default: default:
panic("unknown field " + strconv.Quote(field.Name)) panic("unknown field " + strconv.Quote(field.Name))
} }

View File

@@ -1752,11 +1752,11 @@ type StateOfApplicability struct {
SnapshotID *gid.GID `json:"snapshotId,omitempty"` SnapshotID *gid.GID `json:"snapshotId,omitempty"`
Organization *Organization `json:"organization,omitempty"` Organization *Organization `json:"organization,omitempty"`
Owner *People `json:"owner"` Owner *People `json:"owner"`
Permission bool `json:"permission"`
Controls *ControlConnection `json:"controls"`
AvailableControls []*AvailableStateOfApplicabilityControl `json:"availableControls"`
CreatedAt time.Time `json:"createdAt"` CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"` UpdatedAt time.Time `json:"updatedAt"`
Controls *ControlConnection `json:"controls"`
AvailableControls []*AvailableStateOfApplicabilityControl `json:"availableControls"`
Permission bool `json:"permission"`
} }
func (StateOfApplicability) IsNode() {} func (StateOfApplicability) IsNode() {}

View File

@@ -7201,11 +7201,6 @@ func (r *stateOfApplicabilityResolver) Owner(ctx context.Context, obj *types.Sta
return types.NewPeople(people), nil return types.NewPeople(people), nil
} }
// Permission is the resolver for the permission field.
func (r *stateOfApplicabilityResolver) Permission(ctx context.Context, obj *types.StateOfApplicability, action string) (bool, error) {
return r.Resolver.Permission(ctx, obj, action)
}
// Controls is the resolver for the controls field. // Controls is the resolver for the controls field.
func (r *stateOfApplicabilityResolver) Controls(ctx context.Context, obj *types.StateOfApplicability, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) (*types.ControlConnection, error) { func (r *stateOfApplicabilityResolver) Controls(ctx context.Context, obj *types.StateOfApplicability, 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 { if err := r.authorize(ctx, obj.ID, probo.ActionControlList); err != nil {
@@ -7275,6 +7270,11 @@ func (r *stateOfApplicabilityResolver) AvailableControls(ctx context.Context, ob
return result, nil return result, nil
} }
// Permission is the resolver for the permission field.
func (r *stateOfApplicabilityResolver) Permission(ctx context.Context, obj *types.StateOfApplicability, action string) (bool, error) {
return r.Resolver.Permission(ctx, obj, action)
}
// TotalCount is the resolver for the totalCount field. // TotalCount is the resolver for the totalCount field.
func (r *stateOfApplicabilityConnectionResolver) TotalCount(ctx context.Context, obj *types.StateOfApplicabilityConnection) (int, error) { func (r *stateOfApplicabilityConnectionResolver) TotalCount(ctx context.Context, obj *types.StateOfApplicabilityConnection) (int, error) {
prb := r.ProboService(ctx, obj.ParentID.TenantID()) prb := r.ProboService(ctx, obj.ParentID.TenantID())