diff --git a/pkg/coredata/control_mesure.go b/pkg/coredata/control_mesure.go index 07bcc0bf6..72c1f709c 100644 --- a/pkg/coredata/control_mesure.go +++ b/pkg/coredata/control_mesure.go @@ -103,6 +103,8 @@ func (cm ControlMeasure) Delete( ctx context.Context, conn pg.Conn, scope Scoper, + controlID gid.GID, + measureID gid.GID, ) error { q := ` DELETE @@ -115,8 +117,8 @@ WHERE ` args := pgx.StrictNamedArgs{ - "control_id": cm.ControlID, - "measure_id": cm.MeasureID, + "control_id": controlID, + "measure_id": measureID, } maps.Copy(args, scope.SQLArguments()) q = fmt.Sprintf(q, scope.SQLFragment()) diff --git a/pkg/coredata/control_policy.go b/pkg/coredata/control_policy.go index 7626d44da..c653b1dcb 100644 --- a/pkg/coredata/control_policy.go +++ b/pkg/coredata/control_policy.go @@ -71,6 +71,8 @@ func (cp ControlPolicy) Delete( ctx context.Context, conn pg.Conn, scope Scoper, + controlID gid.GID, + policyID gid.GID, ) error { q := ` DELETE @@ -83,8 +85,8 @@ WHERE ` args := pgx.StrictNamedArgs{ - "control_id": cp.ControlID, - "policy_id": cp.PolicyID, + "control_id": controlID, + "policy_id": policyID, } maps.Copy(args, scope.SQLArguments()) diff --git a/pkg/probo/control_service.go b/pkg/probo/control_service.go index d6ae4f03b..54056b862 100644 --- a/pkg/probo/control_service.go +++ b/pkg/probo/control_service.go @@ -111,7 +111,7 @@ func (s ControlService) CreateMeasureMapping( ctx context.Context, controlID gid.GID, measureID gid.GID, -) error { +) (*coredata.Control, *coredata.Measure, error) { controlMeasure := &coredata.ControlMeasure{ ControlID: controlID, MeasureID: measureID, @@ -122,7 +122,7 @@ func (s ControlService) CreateMeasureMapping( control := &coredata.Control{} measure := &coredata.Measure{} - return s.svc.pg.WithConn( + err := s.svc.pg.WithConn( ctx, func(conn pg.Conn) error { if err := control.LoadByID(ctx, conn, s.svc.scope, controlID); err != nil { @@ -136,24 +136,23 @@ func (s ControlService) CreateMeasureMapping( return controlMeasure.Insert(ctx, conn, s.svc.scope) }, ) + + if err != nil { + return nil, nil, fmt.Errorf("cannot create control measure mapping: %w", err) + } + + return control, measure, nil } func (s ControlService) DeleteMeasureMapping( ctx context.Context, controlID gid.GID, measureID gid.GID, -) error { - controlMeasure := &coredata.ControlMeasure{ - ControlID: controlID, - MeasureID: measureID, - TenantID: s.svc.scope.GetTenantID(), - CreatedAt: time.Now(), - } - +) (*coredata.Control, *coredata.Measure, error) { control := &coredata.Control{} measure := &coredata.Measure{} - return s.svc.pg.WithConn( + err := s.svc.pg.WithConn( ctx, func(conn pg.Conn) error { if err := control.LoadByID(ctx, conn, s.svc.scope, controlID); err != nil { @@ -164,27 +163,31 @@ func (s ControlService) DeleteMeasureMapping( return fmt.Errorf("cannot load measure: %w", err) } - return controlMeasure.Delete(ctx, conn, s.svc.scope) + controlMeasure := &coredata.ControlMeasure{} + if err := controlMeasure.Delete(ctx, conn, s.svc.scope, control.ID, measure.ID); err != nil { + return fmt.Errorf("cannot delete control measure mapping: %w", err) + } + + return nil }, ) + + if err != nil { + return nil, nil, fmt.Errorf("cannot delete control measure mapping: %w", err) + } + + return control, measure, nil } func (s ControlService) CreatePolicyMapping( ctx context.Context, controlID gid.GID, policyID gid.GID, -) error { - controlPolicy := &coredata.ControlPolicy{ - ControlID: controlID, - PolicyID: policyID, - TenantID: s.svc.scope.GetTenantID(), - CreatedAt: time.Now(), - } - +) (*coredata.Control, *coredata.Policy, error) { control := &coredata.Control{} policy := &coredata.Policy{} - return s.svc.pg.WithConn( + err := s.svc.pg.WithConn( ctx, func(conn pg.Conn) error { if err := control.LoadByID(ctx, conn, s.svc.scope, controlID); err != nil { @@ -195,27 +198,37 @@ func (s ControlService) CreatePolicyMapping( return fmt.Errorf("cannot load policy: %w", err) } - return controlPolicy.Insert(ctx, conn, s.svc.scope) + controlPolicy := &coredata.ControlPolicy{ + ControlID: control.ID, + PolicyID: policy.ID, + TenantID: s.svc.scope.GetTenantID(), + CreatedAt: time.Now(), + } + + if err := controlPolicy.Insert(ctx, conn, s.svc.scope); err != nil { + return fmt.Errorf("cannot insert control policy: %w", err) + } + + return nil }, ) + + if err != nil { + return nil, nil, fmt.Errorf("cannot create control policy mapping: %w", err) + } + + return control, policy, nil } func (s ControlService) DeletePolicyMapping( ctx context.Context, controlID gid.GID, policyID gid.GID, -) error { - controlPolicy := &coredata.ControlPolicy{ - ControlID: controlID, - PolicyID: policyID, - TenantID: s.svc.scope.GetTenantID(), - CreatedAt: time.Now(), - } - +) (*coredata.Control, *coredata.Policy, error) { control := &coredata.Control{} policy := &coredata.Policy{} - return s.svc.pg.WithConn( + err := s.svc.pg.WithConn( ctx, func(conn pg.Conn) error { if err := control.LoadByID(ctx, conn, s.svc.scope, controlID); err != nil { @@ -226,9 +239,20 @@ func (s ControlService) DeletePolicyMapping( return fmt.Errorf("cannot load policy: %w", err) } - return controlPolicy.Delete(ctx, conn, s.svc.scope) + controlPolicy := &coredata.ControlPolicy{} + if err := controlPolicy.Delete(ctx, conn, s.svc.scope, control.ID, policy.ID); err != nil { + return fmt.Errorf("cannot delete control policy mapping: %w", err) + } + + return nil }, ) + + if err != nil { + return nil, nil, fmt.Errorf("cannot delete control policy mapping: %w", err) + } + + return control, policy, nil } func (s ControlService) Create( diff --git a/pkg/server/api/console/v1/schema.graphql b/pkg/server/api/console/v1/schema.graphql index b99082c81..855b33129 100644 --- a/pkg/server/api/console/v1/schema.graphql +++ b/pkg/server/api/console/v1/schema.graphql @@ -1468,19 +1468,23 @@ type UnassignTaskPayload { } type CreateControlMeasureMappingPayload { - success: Boolean! + controlEdge: ControlEdge! + measureEdge: MeasureEdge! } type CreateControlPolicyMappingPayload { - success: Boolean! + controlEdge: ControlEdge! + policyEdge: PolicyEdge! } type DeleteControlMeasureMappingPayload { - success: Boolean! + deletedControlId: ID! + deletedMeasureId: ID! } type DeleteControlPolicyMappingPayload { - success: Boolean! + deletedControlId: ID! + deletedPolicyId: ID! } type CreateRiskPayload { diff --git a/pkg/server/api/console/v1/schema/schema.go b/pkg/server/api/console/v1/schema/schema.go index b2f1b3eb5..0f699c75a 100644 --- a/pkg/server/api/console/v1/schema/schema.go +++ b/pkg/server/api/console/v1/schema/schema.go @@ -114,11 +114,13 @@ type ComplexityRoot struct { } CreateControlMeasureMappingPayload struct { - Success func(childComplexity int) int + ControlEdge func(childComplexity int) int + MeasureEdge func(childComplexity int) int } CreateControlPolicyMappingPayload struct { - Success func(childComplexity int) int + ControlEdge func(childComplexity int) int + PolicyEdge func(childComplexity int) int } CreateDraftPolicyVersionPayload struct { @@ -177,11 +179,13 @@ type ComplexityRoot struct { } DeleteControlMeasureMappingPayload struct { - Success func(childComplexity int) int + DeletedControlID func(childComplexity int) int + DeletedMeasureID func(childComplexity int) int } DeleteControlPolicyMappingPayload struct { - Success func(childComplexity int) int + DeletedControlID func(childComplexity int) int + DeletedPolicyID func(childComplexity int) int } DeleteEvidencePayload struct { @@ -1090,19 +1094,33 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.complexity.ControlEdge.Node(childComplexity), true - case "CreateControlMeasureMappingPayload.success": - if e.complexity.CreateControlMeasureMappingPayload.Success == nil { + case "CreateControlMeasureMappingPayload.controlEdge": + if e.complexity.CreateControlMeasureMappingPayload.ControlEdge == nil { break } - return e.complexity.CreateControlMeasureMappingPayload.Success(childComplexity), true + return e.complexity.CreateControlMeasureMappingPayload.ControlEdge(childComplexity), true - case "CreateControlPolicyMappingPayload.success": - if e.complexity.CreateControlPolicyMappingPayload.Success == nil { + case "CreateControlMeasureMappingPayload.measureEdge": + if e.complexity.CreateControlMeasureMappingPayload.MeasureEdge == nil { break } - return e.complexity.CreateControlPolicyMappingPayload.Success(childComplexity), true + return e.complexity.CreateControlMeasureMappingPayload.MeasureEdge(childComplexity), true + + case "CreateControlPolicyMappingPayload.controlEdge": + if e.complexity.CreateControlPolicyMappingPayload.ControlEdge == nil { + break + } + + return e.complexity.CreateControlPolicyMappingPayload.ControlEdge(childComplexity), true + + case "CreateControlPolicyMappingPayload.policyEdge": + if e.complexity.CreateControlPolicyMappingPayload.PolicyEdge == nil { + break + } + + return e.complexity.CreateControlPolicyMappingPayload.PolicyEdge(childComplexity), true case "CreateDraftPolicyVersionPayload.policyVersionEdge": if e.complexity.CreateDraftPolicyVersionPayload.PolicyVersionEdge == nil { @@ -1216,19 +1234,33 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.complexity.CreateVendorRiskAssessmentPayload.VendorRiskAssessmentEdge(childComplexity), true - case "DeleteControlMeasureMappingPayload.success": - if e.complexity.DeleteControlMeasureMappingPayload.Success == nil { + case "DeleteControlMeasureMappingPayload.deletedControlId": + if e.complexity.DeleteControlMeasureMappingPayload.DeletedControlID == nil { break } - return e.complexity.DeleteControlMeasureMappingPayload.Success(childComplexity), true + return e.complexity.DeleteControlMeasureMappingPayload.DeletedControlID(childComplexity), true - case "DeleteControlPolicyMappingPayload.success": - if e.complexity.DeleteControlPolicyMappingPayload.Success == nil { + case "DeleteControlMeasureMappingPayload.deletedMeasureId": + if e.complexity.DeleteControlMeasureMappingPayload.DeletedMeasureID == nil { break } - return e.complexity.DeleteControlPolicyMappingPayload.Success(childComplexity), true + return e.complexity.DeleteControlMeasureMappingPayload.DeletedMeasureID(childComplexity), true + + case "DeleteControlPolicyMappingPayload.deletedControlId": + if e.complexity.DeleteControlPolicyMappingPayload.DeletedControlID == nil { + break + } + + return e.complexity.DeleteControlPolicyMappingPayload.DeletedControlID(childComplexity), true + + case "DeleteControlPolicyMappingPayload.deletedPolicyId": + if e.complexity.DeleteControlPolicyMappingPayload.DeletedPolicyID == nil { + break + } + + return e.complexity.DeleteControlPolicyMappingPayload.DeletedPolicyID(childComplexity), true case "DeleteEvidencePayload.deletedEvidenceId": if e.complexity.DeleteEvidencePayload.DeletedEvidenceID == nil { @@ -5471,19 +5503,23 @@ type UnassignTaskPayload { } type CreateControlMeasureMappingPayload { - success: Boolean! + controlEdge: ControlEdge! + measureEdge: MeasureEdge! } type CreateControlPolicyMappingPayload { - success: Boolean! + controlEdge: ControlEdge! + policyEdge: PolicyEdge! } type DeleteControlMeasureMappingPayload { - success: Boolean! + deletedControlId: ID! + deletedMeasureId: ID! } type DeleteControlPolicyMappingPayload { - success: Boolean! + deletedControlId: ID! + deletedPolicyId: ID! } type CreateRiskPayload { @@ -10824,8 +10860,8 @@ func (ec *executionContext) fieldContext_ControlEdge_node(_ context.Context, fie return fc, nil } -func (ec *executionContext) _CreateControlMeasureMappingPayload_success(ctx context.Context, field graphql.CollectedField, obj *types.CreateControlMeasureMappingPayload) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_CreateControlMeasureMappingPayload_success(ctx, field) +func (ec *executionContext) _CreateControlMeasureMappingPayload_controlEdge(ctx context.Context, field graphql.CollectedField, obj *types.CreateControlMeasureMappingPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_CreateControlMeasureMappingPayload_controlEdge(ctx, field) if err != nil { return graphql.Null } @@ -10838,7 +10874,7 @@ func (ec *executionContext) _CreateControlMeasureMappingPayload_success(ctx cont }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return obj.Success, nil + return obj.ControlEdge, nil }) if err != nil { ec.Error(ctx, err) @@ -10850,26 +10886,32 @@ func (ec *executionContext) _CreateControlMeasureMappingPayload_success(ctx cont } return graphql.Null } - res := resTmp.(bool) + res := resTmp.(*types.ControlEdge) fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) + return ec.marshalNControlEdge2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐControlEdge(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_CreateControlMeasureMappingPayload_success(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_CreateControlMeasureMappingPayload_controlEdge(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "CreateControlMeasureMappingPayload", Field: field, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") + switch field.Name { + case "cursor": + return ec.fieldContext_ControlEdge_cursor(ctx, field) + case "node": + return ec.fieldContext_ControlEdge_node(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ControlEdge", field.Name) }, } return fc, nil } -func (ec *executionContext) _CreateControlPolicyMappingPayload_success(ctx context.Context, field graphql.CollectedField, obj *types.CreateControlPolicyMappingPayload) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_CreateControlPolicyMappingPayload_success(ctx, field) +func (ec *executionContext) _CreateControlMeasureMappingPayload_measureEdge(ctx context.Context, field graphql.CollectedField, obj *types.CreateControlMeasureMappingPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_CreateControlMeasureMappingPayload_measureEdge(ctx, field) if err != nil { return graphql.Null } @@ -10882,7 +10924,7 @@ func (ec *executionContext) _CreateControlPolicyMappingPayload_success(ctx conte }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return obj.Success, nil + return obj.MeasureEdge, nil }) if err != nil { ec.Error(ctx, err) @@ -10894,19 +10936,125 @@ func (ec *executionContext) _CreateControlPolicyMappingPayload_success(ctx conte } return graphql.Null } - res := resTmp.(bool) + res := resTmp.(*types.MeasureEdge) fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) + return ec.marshalNMeasureEdge2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐMeasureEdge(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_CreateControlPolicyMappingPayload_success(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_CreateControlMeasureMappingPayload_measureEdge(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "CreateControlMeasureMappingPayload", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "cursor": + return ec.fieldContext_MeasureEdge_cursor(ctx, field) + case "node": + return ec.fieldContext_MeasureEdge_node(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type MeasureEdge", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) _CreateControlPolicyMappingPayload_controlEdge(ctx context.Context, field graphql.CollectedField, obj *types.CreateControlPolicyMappingPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_CreateControlPolicyMappingPayload_controlEdge(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return obj.ControlEdge, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.ControlEdge) + fc.Result = res + return ec.marshalNControlEdge2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐControlEdge(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_CreateControlPolicyMappingPayload_controlEdge(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "CreateControlPolicyMappingPayload", Field: field, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") + switch field.Name { + case "cursor": + return ec.fieldContext_ControlEdge_cursor(ctx, field) + case "node": + return ec.fieldContext_ControlEdge_node(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ControlEdge", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) _CreateControlPolicyMappingPayload_policyEdge(ctx context.Context, field graphql.CollectedField, obj *types.CreateControlPolicyMappingPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_CreateControlPolicyMappingPayload_policyEdge(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return obj.PolicyEdge, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.PolicyEdge) + fc.Result = res + return ec.marshalNPolicyEdge2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐPolicyEdge(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_CreateControlPolicyMappingPayload_policyEdge(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "CreateControlPolicyMappingPayload", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "cursor": + return ec.fieldContext_PolicyEdge_cursor(ctx, field) + case "node": + return ec.fieldContext_PolicyEdge_node(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type PolicyEdge", field.Name) }, } return fc, nil @@ -11712,8 +11860,8 @@ func (ec *executionContext) fieldContext_CreateVendorRiskAssessmentPayload_vendo return fc, nil } -func (ec *executionContext) _DeleteControlMeasureMappingPayload_success(ctx context.Context, field graphql.CollectedField, obj *types.DeleteControlMeasureMappingPayload) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_DeleteControlMeasureMappingPayload_success(ctx, field) +func (ec *executionContext) _DeleteControlMeasureMappingPayload_deletedControlId(ctx context.Context, field graphql.CollectedField, obj *types.DeleteControlMeasureMappingPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_DeleteControlMeasureMappingPayload_deletedControlId(ctx, field) if err != nil { return graphql.Null } @@ -11726,7 +11874,7 @@ func (ec *executionContext) _DeleteControlMeasureMappingPayload_success(ctx cont }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return obj.Success, nil + return obj.DeletedControlID, nil }) if err != nil { ec.Error(ctx, err) @@ -11738,26 +11886,26 @@ func (ec *executionContext) _DeleteControlMeasureMappingPayload_success(ctx cont } return graphql.Null } - res := resTmp.(bool) + res := resTmp.(gid.GID) fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) + return ec.marshalNID2githubᚗcomᚋgetproboᚋproboᚋpkgᚋgidᚐGID(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_DeleteControlMeasureMappingPayload_success(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_DeleteControlMeasureMappingPayload_deletedControlId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "DeleteControlMeasureMappingPayload", Field: field, IsMethod: false, IsResolver: false, 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 ID does not have child fields") }, } return fc, nil } -func (ec *executionContext) _DeleteControlPolicyMappingPayload_success(ctx context.Context, field graphql.CollectedField, obj *types.DeleteControlPolicyMappingPayload) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_DeleteControlPolicyMappingPayload_success(ctx, field) +func (ec *executionContext) _DeleteControlMeasureMappingPayload_deletedMeasureId(ctx context.Context, field graphql.CollectedField, obj *types.DeleteControlMeasureMappingPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_DeleteControlMeasureMappingPayload_deletedMeasureId(ctx, field) if err != nil { return graphql.Null } @@ -11770,7 +11918,7 @@ func (ec *executionContext) _DeleteControlPolicyMappingPayload_success(ctx conte }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return obj.Success, nil + return obj.DeletedMeasureID, nil }) if err != nil { ec.Error(ctx, err) @@ -11782,19 +11930,107 @@ func (ec *executionContext) _DeleteControlPolicyMappingPayload_success(ctx conte } return graphql.Null } - res := resTmp.(bool) + res := resTmp.(gid.GID) fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) + return ec.marshalNID2githubᚗcomᚋgetproboᚋproboᚋpkgᚋgidᚐGID(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_DeleteControlPolicyMappingPayload_success(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_DeleteControlMeasureMappingPayload_deletedMeasureId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "DeleteControlMeasureMappingPayload", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type ID does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _DeleteControlPolicyMappingPayload_deletedControlId(ctx context.Context, field graphql.CollectedField, obj *types.DeleteControlPolicyMappingPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_DeleteControlPolicyMappingPayload_deletedControlId(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return obj.DeletedControlID, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(gid.GID) + fc.Result = res + return ec.marshalNID2githubᚗcomᚋgetproboᚋproboᚋpkgᚋgidᚐGID(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_DeleteControlPolicyMappingPayload_deletedControlId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "DeleteControlPolicyMappingPayload", Field: field, IsMethod: false, IsResolver: false, 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 ID does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _DeleteControlPolicyMappingPayload_deletedPolicyId(ctx context.Context, field graphql.CollectedField, obj *types.DeleteControlPolicyMappingPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_DeleteControlPolicyMappingPayload_deletedPolicyId(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return obj.DeletedPolicyID, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(gid.GID) + fc.Result = res + return ec.marshalNID2githubᚗcomᚋgetproboᚋproboᚋpkgᚋgidᚐGID(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_DeleteControlPolicyMappingPayload_deletedPolicyId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "DeleteControlPolicyMappingPayload", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type ID does not have child fields") }, } return fc, nil @@ -16035,8 +16271,10 @@ func (ec *executionContext) fieldContext_Mutation_createControlMeasureMapping(ct IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "success": - return ec.fieldContext_CreateControlMeasureMappingPayload_success(ctx, field) + case "controlEdge": + return ec.fieldContext_CreateControlMeasureMappingPayload_controlEdge(ctx, field) + case "measureEdge": + return ec.fieldContext_CreateControlMeasureMappingPayload_measureEdge(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type CreateControlMeasureMappingPayload", field.Name) }, @@ -16094,8 +16332,10 @@ func (ec *executionContext) fieldContext_Mutation_createControlPolicyMapping(ctx IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "success": - return ec.fieldContext_CreateControlPolicyMappingPayload_success(ctx, field) + case "controlEdge": + return ec.fieldContext_CreateControlPolicyMappingPayload_controlEdge(ctx, field) + case "policyEdge": + return ec.fieldContext_CreateControlPolicyMappingPayload_policyEdge(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type CreateControlPolicyMappingPayload", field.Name) }, @@ -16153,8 +16393,10 @@ func (ec *executionContext) fieldContext_Mutation_deleteControlMeasureMapping(ct IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "success": - return ec.fieldContext_DeleteControlMeasureMappingPayload_success(ctx, field) + case "deletedControlId": + return ec.fieldContext_DeleteControlMeasureMappingPayload_deletedControlId(ctx, field) + case "deletedMeasureId": + return ec.fieldContext_DeleteControlMeasureMappingPayload_deletedMeasureId(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type DeleteControlMeasureMappingPayload", field.Name) }, @@ -16212,8 +16454,10 @@ func (ec *executionContext) fieldContext_Mutation_deleteControlPolicyMapping(ctx IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "success": - return ec.fieldContext_DeleteControlPolicyMappingPayload_success(ctx, field) + case "deletedControlId": + return ec.fieldContext_DeleteControlPolicyMappingPayload_deletedControlId(ctx, field) + case "deletedPolicyId": + return ec.fieldContext_DeleteControlPolicyMappingPayload_deletedPolicyId(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type DeleteControlPolicyMappingPayload", field.Name) }, @@ -33881,8 +34125,13 @@ func (ec *executionContext) _CreateControlMeasureMappingPayload(ctx context.Cont switch field.Name { case "__typename": out.Values[i] = graphql.MarshalString("CreateControlMeasureMappingPayload") - case "success": - out.Values[i] = ec._CreateControlMeasureMappingPayload_success(ctx, field, obj) + case "controlEdge": + out.Values[i] = ec._CreateControlMeasureMappingPayload_controlEdge(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "measureEdge": + out.Values[i] = ec._CreateControlMeasureMappingPayload_measureEdge(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } @@ -33920,8 +34169,13 @@ func (ec *executionContext) _CreateControlPolicyMappingPayload(ctx context.Conte switch field.Name { case "__typename": out.Values[i] = graphql.MarshalString("CreateControlPolicyMappingPayload") - case "success": - out.Values[i] = ec._CreateControlPolicyMappingPayload_success(ctx, field, obj) + case "controlEdge": + out.Values[i] = ec._CreateControlPolicyMappingPayload_controlEdge(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "policyEdge": + out.Values[i] = ec._CreateControlPolicyMappingPayload_policyEdge(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } @@ -34481,8 +34735,13 @@ func (ec *executionContext) _DeleteControlMeasureMappingPayload(ctx context.Cont switch field.Name { case "__typename": out.Values[i] = graphql.MarshalString("DeleteControlMeasureMappingPayload") - case "success": - out.Values[i] = ec._DeleteControlMeasureMappingPayload_success(ctx, field, obj) + case "deletedControlId": + out.Values[i] = ec._DeleteControlMeasureMappingPayload_deletedControlId(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "deletedMeasureId": + out.Values[i] = ec._DeleteControlMeasureMappingPayload_deletedMeasureId(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } @@ -34520,8 +34779,13 @@ func (ec *executionContext) _DeleteControlPolicyMappingPayload(ctx context.Conte switch field.Name { case "__typename": out.Values[i] = graphql.MarshalString("DeleteControlPolicyMappingPayload") - case "success": - out.Values[i] = ec._DeleteControlPolicyMappingPayload_success(ctx, field, obj) + case "deletedControlId": + out.Values[i] = ec._DeleteControlPolicyMappingPayload_deletedControlId(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "deletedPolicyId": + out.Values[i] = ec._DeleteControlPolicyMappingPayload_deletedPolicyId(ctx, field, obj) if out.Values[i] == graphql.Null { out.Invalids++ } diff --git a/pkg/server/api/console/v1/types/types.go b/pkg/server/api/console/v1/types/types.go index 3db3a975c..f69ec61ac 100644 --- a/pkg/server/api/console/v1/types/types.go +++ b/pkg/server/api/console/v1/types/types.go @@ -94,7 +94,8 @@ type CreateControlMeasureMappingInput struct { } type CreateControlMeasureMappingPayload struct { - Success bool `json:"success"` + ControlEdge *ControlEdge `json:"controlEdge"` + MeasureEdge *MeasureEdge `json:"measureEdge"` } type CreateControlPolicyMappingInput struct { @@ -103,7 +104,8 @@ type CreateControlPolicyMappingInput struct { } type CreateControlPolicyMappingPayload struct { - Success bool `json:"success"` + ControlEdge *ControlEdge `json:"controlEdge"` + PolicyEdge *PolicyEdge `json:"policyEdge"` } type CreateDraftPolicyVersionInput struct { @@ -274,7 +276,8 @@ type DeleteControlMeasureMappingInput struct { } type DeleteControlMeasureMappingPayload struct { - Success bool `json:"success"` + DeletedControlID gid.GID `json:"deletedControlId"` + DeletedMeasureID gid.GID `json:"deletedMeasureId"` } type DeleteControlPolicyMappingInput struct { @@ -283,7 +286,8 @@ type DeleteControlPolicyMappingInput struct { } type DeleteControlPolicyMappingPayload struct { - Success bool `json:"success"` + DeletedControlID gid.GID `json:"deletedControlId"` + DeletedPolicyID gid.GID `json:"deletedPolicyId"` } type DeleteEvidenceInput struct { diff --git a/pkg/server/api/console/v1/v1_resolver.go b/pkg/server/api/console/v1/v1_resolver.go index dc0dab124..96555d6f3 100644 --- a/pkg/server/api/console/v1/v1_resolver.go +++ b/pkg/server/api/console/v1/v1_resolver.go @@ -709,13 +709,14 @@ func (r *mutationResolver) DeleteMeasure(ctx context.Context, input types.Delete func (r *mutationResolver) CreateControlMeasureMapping(ctx context.Context, input types.CreateControlMeasureMappingInput) (*types.CreateControlMeasureMappingPayload, error) { svc := GetTenantService(ctx, r.proboSvc, input.MeasureID.TenantID()) - err := svc.Controls.CreateMeasureMapping(ctx, input.ControlID, input.MeasureID) + control, measure, err := svc.Controls.CreateMeasureMapping(ctx, input.ControlID, input.MeasureID) if err != nil { panic(fmt.Errorf("cannot create control measure mapping: %w", err)) } return &types.CreateControlMeasureMappingPayload{ - Success: true, + ControlEdge: types.NewControlEdge(control, coredata.ControlOrderFieldCreatedAt), + MeasureEdge: types.NewMeasureEdge(measure, coredata.MeasureOrderFieldCreatedAt), }, nil } @@ -723,13 +724,14 @@ func (r *mutationResolver) CreateControlMeasureMapping(ctx context.Context, inpu func (r *mutationResolver) CreateControlPolicyMapping(ctx context.Context, input types.CreateControlPolicyMappingInput) (*types.CreateControlPolicyMappingPayload, error) { svc := GetTenantService(ctx, r.proboSvc, input.PolicyID.TenantID()) - err := svc.Controls.CreatePolicyMapping(ctx, input.ControlID, input.PolicyID) + control, policy, err := svc.Controls.CreatePolicyMapping(ctx, input.ControlID, input.PolicyID) if err != nil { panic(fmt.Errorf("cannot create control policy mapping: %w", err)) } return &types.CreateControlPolicyMappingPayload{ - Success: true, + ControlEdge: types.NewControlEdge(control, coredata.ControlOrderFieldCreatedAt), + PolicyEdge: types.NewPolicyEdge(policy, coredata.PolicyOrderFieldTitle), }, nil } @@ -737,13 +739,14 @@ func (r *mutationResolver) CreateControlPolicyMapping(ctx context.Context, input func (r *mutationResolver) DeleteControlMeasureMapping(ctx context.Context, input types.DeleteControlMeasureMappingInput) (*types.DeleteControlMeasureMappingPayload, error) { svc := GetTenantService(ctx, r.proboSvc, input.MeasureID.TenantID()) - err := svc.Controls.DeleteMeasureMapping(ctx, input.ControlID, input.MeasureID) + control, measure, err := svc.Controls.DeleteMeasureMapping(ctx, input.ControlID, input.MeasureID) if err != nil { panic(fmt.Errorf("cannot delete control measure mapping: %w", err)) } return &types.DeleteControlMeasureMappingPayload{ - Success: true, + DeletedControlID: control.ID, + DeletedMeasureID: measure.ID, }, nil } @@ -751,13 +754,14 @@ func (r *mutationResolver) DeleteControlMeasureMapping(ctx context.Context, inpu func (r *mutationResolver) DeleteControlPolicyMapping(ctx context.Context, input types.DeleteControlPolicyMappingInput) (*types.DeleteControlPolicyMappingPayload, error) { svc := GetTenantService(ctx, r.proboSvc, input.PolicyID.TenantID()) - err := svc.Controls.DeletePolicyMapping(ctx, input.ControlID, input.PolicyID) + control, policy, err := svc.Controls.DeletePolicyMapping(ctx, input.ControlID, input.PolicyID) if err != nil { panic(fmt.Errorf("cannot delete control policy mapping: %w", err)) } return &types.DeleteControlPolicyMappingPayload{ - Success: true, + DeletedControlID: control.ID, + DeletedPolicyID: policy.ID, }, nil }