Remove tenant service pattern

Signed-off-by: Bryan Frimin <bryan@probo.com>
This commit is contained in:
Bryan Frimin
2026-05-20 16:18:23 -07:00
parent 30db98455d
commit 3e4a9be7c0
89 changed files with 3510 additions and 3031 deletions

View File

@@ -28,9 +28,10 @@ func (r *applicabilityStatementResolver) StatementOfApplicability(ctx context.Co
return nil, err
}
prb := r.ProboService(ctx, obj.StatementOfApplicability.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.StatementOfApplicability.ID)
prb := r.probo
soa, err := prb.StatementsOfApplicability.Get(ctx, obj.StatementOfApplicability.ID)
soa, err := prb.StatementsOfApplicability.Get(ctx, scope, obj.StatementOfApplicability.ID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot get statement of applicability", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -72,11 +73,12 @@ func (r *applicabilityStatementConnectionResolver) TotalCount(ctx context.Contex
return 0, err
}
prb := r.ProboService(ctx, obj.ParentID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ParentID)
prb := r.probo
switch obj.Resolver.(type) {
case *statementOfApplicabilityResolver:
count, err := prb.StatementsOfApplicability.CountApplicabilityStatements(ctx, obj.ParentID)
count, err := prb.StatementsOfApplicability.CountApplicabilityStatements(ctx, scope, obj.ParentID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot count applicability statements", log.Error(err))
return 0, gqlutils.Internal(ctx)
@@ -114,9 +116,10 @@ func (r *controlResolver) Organization(ctx context.Context, obj *types.Control)
// Regulatory is the resolver for the regulatory field.
func (r *controlResolver) Regulatory(ctx context.Context, obj *types.Control) (bool, error) {
prb := r.ProboService(ctx, obj.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ID)
prb := r.probo
hasRegulatory, err := prb.Controls.HasRegulatoryObligation(ctx, obj.ID)
hasRegulatory, err := prb.Controls.HasRegulatoryObligation(ctx, scope, obj.ID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot check regulatory obligation", log.Error(err))
return false, gqlutils.Internal(ctx)
@@ -127,9 +130,10 @@ func (r *controlResolver) Regulatory(ctx context.Context, obj *types.Control) (b
// Contractual is the resolver for the contractual field.
func (r *controlResolver) Contractual(ctx context.Context, obj *types.Control) (bool, error) {
prb := r.ProboService(ctx, obj.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ID)
prb := r.probo
hasContractual, err := prb.Controls.HasContractualObligation(ctx, obj.ID)
hasContractual, err := prb.Controls.HasContractualObligation(ctx, scope, obj.ID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot check contractual obligation", log.Error(err))
return false, gqlutils.Internal(ctx)
@@ -140,9 +144,10 @@ func (r *controlResolver) Contractual(ctx context.Context, obj *types.Control) (
// RiskAssessment is the resolver for the riskAssessment field.
func (r *controlResolver) RiskAssessment(ctx context.Context, obj *types.Control) (bool, error) {
prb := r.ProboService(ctx, obj.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ID)
prb := r.probo
hasRisk, err := prb.Controls.HasRiskAssessment(ctx, obj.ID)
hasRisk, err := prb.Controls.HasRiskAssessment(ctx, scope, obj.ID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot check risk assessment", log.Error(err))
return false, gqlutils.Internal(ctx)
@@ -179,7 +184,8 @@ func (r *controlResolver) Measures(ctx context.Context, obj *types.Control, firs
return nil, err
}
prb := r.ProboService(ctx, obj.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ID)
prb := r.probo
pageOrderBy := page.OrderBy[coredata.MeasureOrderField]{
Field: coredata.MeasureOrderFieldCreatedAt,
@@ -199,7 +205,7 @@ func (r *controlResolver) Measures(ctx context.Context, obj *types.Control, firs
measureFilter = coredata.NewMeasureFilter(filter.Query, filter.State, filter.Category)
}
page, err := prb.Measures.ListForControlID(ctx, obj.ID, cursor, measureFilter)
page, err := prb.Measures.ListForControlID(ctx, scope, obj.ID, cursor, measureFilter)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot list measures", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -214,7 +220,8 @@ func (r *controlResolver) Documents(ctx context.Context, obj *types.Control, fir
return nil, err
}
prb := r.ProboService(ctx, obj.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ID)
prb := r.probo
pageOrderBy := page.OrderBy[coredata.DocumentOrderField]{
Field: coredata.DocumentOrderFieldCreatedAt,
@@ -237,7 +244,7 @@ func (r *controlResolver) Documents(ctx context.Context, obj *types.Control, fir
WithClassifications(filter.Classifications)
}
page, err := prb.Documents.ListForControlID(ctx, obj.ID, cursor, documentFilter)
page, err := prb.Documents.ListForControlID(ctx, scope, obj.ID, cursor, documentFilter)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot list documents", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -252,7 +259,8 @@ func (r *controlResolver) Audits(ctx context.Context, obj *types.Control, first
return nil, err
}
prb := r.ProboService(ctx, obj.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ID)
prb := r.probo
pageOrderBy := page.OrderBy[coredata.AuditOrderField]{
Field: coredata.AuditOrderFieldCreatedAt,
@@ -267,7 +275,7 @@ func (r *controlResolver) Audits(ctx context.Context, obj *types.Control, first
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := prb.Audits.ListForControlID(ctx, obj.ID, cursor)
page, err := prb.Audits.ListForControlID(ctx, scope, obj.ID, cursor)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot list control audits", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -282,7 +290,8 @@ func (r *controlResolver) Obligations(ctx context.Context, obj *types.Control, f
return nil, err
}
prb := r.ProboService(ctx, obj.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ID)
prb := r.probo
pageOrderBy := page.OrderBy[coredata.ObligationOrderField]{
Field: coredata.ObligationOrderFieldCreatedAt,
@@ -297,7 +306,7 @@ func (r *controlResolver) Obligations(ctx context.Context, obj *types.Control, f
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := prb.Obligations.ListForControlID(ctx, obj.ID, cursor)
page, err := prb.Obligations.ListForControlID(ctx, scope, obj.ID, cursor)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot list control obligations", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -317,11 +326,12 @@ func (r *controlConnectionResolver) TotalCount(ctx context.Context, obj *types.C
return 0, err
}
prb := r.ProboService(ctx, obj.ParentID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ParentID)
prb := r.probo
switch obj.Resolver.(type) {
case *organizationResolver:
count, err := prb.Controls.CountForOrganizationID(ctx, obj.ParentID, obj.Filters)
count, err := prb.Controls.CountForOrganizationID(ctx, scope, obj.ParentID, obj.Filters)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot count controls", log.Error(err))
return 0, gqlutils.Internal(ctx)
@@ -329,7 +339,7 @@ func (r *controlConnectionResolver) TotalCount(ctx context.Context, obj *types.C
return count, nil
case *frameworkResolver:
count, err := prb.Controls.CountForFrameworkID(ctx, obj.ParentID, obj.Filters)
count, err := prb.Controls.CountForFrameworkID(ctx, scope, obj.ParentID, obj.Filters)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot count controls", log.Error(err))
return 0, gqlutils.Internal(ctx)
@@ -337,7 +347,7 @@ func (r *controlConnectionResolver) TotalCount(ctx context.Context, obj *types.C
return count, nil
case *documentResolver:
count, err := prb.Controls.CountForDocumentID(ctx, obj.ParentID, obj.Filters)
count, err := prb.Controls.CountForDocumentID(ctx, scope, obj.ParentID, obj.Filters)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot count controls", log.Error(err))
return 0, gqlutils.Internal(ctx)
@@ -345,7 +355,7 @@ func (r *controlConnectionResolver) TotalCount(ctx context.Context, obj *types.C
return count, nil
case *measureResolver:
count, err := prb.Controls.CountForMeasureID(ctx, obj.ParentID, obj.Filters)
count, err := prb.Controls.CountForMeasureID(ctx, scope, obj.ParentID, obj.Filters)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot count controls", log.Error(err))
return 0, gqlutils.Internal(ctx)
@@ -353,7 +363,7 @@ func (r *controlConnectionResolver) TotalCount(ctx context.Context, obj *types.C
return count, nil
case *riskResolver:
count, err := prb.Controls.CountForRiskID(ctx, obj.ParentID, obj.Filters)
count, err := prb.Controls.CountForRiskID(ctx, scope, obj.ParentID, obj.Filters)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot count controls", log.Error(err))
return 0, gqlutils.Internal(ctx)
@@ -361,7 +371,7 @@ func (r *controlConnectionResolver) TotalCount(ctx context.Context, obj *types.C
return count, nil
case *statementOfApplicabilityResolver:
count, err := prb.Controls.CountForStatementOfApplicabilityID(ctx, obj.ParentID, obj.Filters)
count, err := prb.Controls.CountForStatementOfApplicabilityID(ctx, scope, obj.ParentID, obj.Filters)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot count controls", log.Error(err))
return 0, gqlutils.Internal(ctx)
@@ -381,10 +391,11 @@ func (r *mutationResolver) CreateControl(ctx context.Context, input types.Create
return nil, err
}
prb := r.ProboService(ctx, input.FrameworkID.TenantID())
scope := coredata.NewScopeFromObjectID(input.FrameworkID)
prb := r.probo
control, err := prb.Controls.Create(
ctx,
ctx, scope,
probo.CreateControlRequest{
FrameworkID: input.FrameworkID,
Name: input.Name,
@@ -420,10 +431,11 @@ func (r *mutationResolver) UpdateControl(ctx context.Context, input types.Update
return nil, err
}
prb := r.ProboService(ctx, input.ID.TenantID())
scope := coredata.NewScopeFromObjectID(input.ID)
prb := r.probo
control, err := prb.Controls.Update(
ctx,
ctx, scope,
probo.UpdateControlRequest{
ID: input.ID,
Name: input.Name,
@@ -459,9 +471,10 @@ func (r *mutationResolver) DeleteControl(ctx context.Context, input types.Delete
return nil, err
}
prb := r.ProboService(ctx, input.ControlID.TenantID())
scope := coredata.NewScopeFromObjectID(input.ControlID)
prb := r.probo
err := prb.Controls.Delete(ctx, input.ControlID)
err := prb.Controls.Delete(ctx, scope, input.ControlID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot delete control", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -478,9 +491,10 @@ func (r *mutationResolver) CreateControlMeasureMapping(ctx context.Context, inpu
return nil, err
}
prb := r.ProboService(ctx, input.MeasureID.TenantID())
scope := coredata.NewScopeFromObjectID(input.MeasureID)
prb := r.probo
control, measure, err := prb.Controls.CreateMeasureMapping(ctx, input.ControlID, input.MeasureID)
control, measure, err := prb.Controls.CreateMeasureMapping(ctx, scope, input.ControlID, input.MeasureID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot create control measure mapping", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -498,9 +512,10 @@ func (r *mutationResolver) CreateControlDocumentMapping(ctx context.Context, inp
return nil, err
}
prb := r.ProboService(ctx, input.DocumentID.TenantID())
scope := coredata.NewScopeFromObjectID(input.DocumentID)
prb := r.probo
control, document, err := prb.Controls.CreateDocumentMapping(ctx, input.ControlID, input.DocumentID)
control, document, err := prb.Controls.CreateDocumentMapping(ctx, scope, input.ControlID, input.DocumentID)
if err != nil {
if errors.Is(err, coredata.ErrResourceAlreadyExists) {
return nil, gqlutils.Conflict(ctx, err)
@@ -523,9 +538,10 @@ func (r *mutationResolver) DeleteControlMeasureMapping(ctx context.Context, inpu
return nil, err
}
prb := r.ProboService(ctx, input.MeasureID.TenantID())
scope := coredata.NewScopeFromObjectID(input.MeasureID)
prb := r.probo
control, measure, err := prb.Controls.DeleteMeasureMapping(ctx, input.ControlID, input.MeasureID)
control, measure, err := prb.Controls.DeleteMeasureMapping(ctx, scope, input.ControlID, input.MeasureID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot delete control measure mapping", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -543,9 +559,10 @@ func (r *mutationResolver) DeleteControlDocumentMapping(ctx context.Context, inp
return nil, err
}
prb := r.ProboService(ctx, input.DocumentID.TenantID())
scope := coredata.NewScopeFromObjectID(input.DocumentID)
prb := r.probo
control, document, err := prb.Controls.DeleteDocumentMapping(ctx, input.ControlID, input.DocumentID)
control, document, err := prb.Controls.DeleteDocumentMapping(ctx, scope, input.ControlID, input.DocumentID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot delete control document mapping", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -563,9 +580,10 @@ func (r *mutationResolver) CreateApplicabilityStatement(ctx context.Context, inp
return nil, err
}
prb := r.ProboService(ctx, input.StatementOfApplicabilityID.TenantID())
scope := coredata.NewScopeFromObjectID(input.StatementOfApplicabilityID)
prb := r.probo
applicabilityStatement, err := prb.StatementsOfApplicability.CreateApplicabilityStatement(ctx, input.StatementOfApplicabilityID, input.ControlID, input.Applicability, input.Justification)
applicabilityStatement, err := prb.StatementsOfApplicability.CreateApplicabilityStatement(ctx, scope, input.StatementOfApplicabilityID, input.ControlID, input.Applicability, input.Justification)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot create applicability statement", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -582,9 +600,10 @@ func (r *mutationResolver) UpdateApplicabilityStatement(ctx context.Context, inp
return nil, err
}
prb := r.ProboService(ctx, input.ApplicabilityStatementID.TenantID())
scope := coredata.NewScopeFromObjectID(input.ApplicabilityStatementID)
prb := r.probo
applicabilityStatement, err := prb.StatementsOfApplicability.UpdateApplicabilityStatement(ctx, input.ApplicabilityStatementID, input.Applicability, input.Justification)
applicabilityStatement, err := prb.StatementsOfApplicability.UpdateApplicabilityStatement(ctx, scope, input.ApplicabilityStatementID, input.Applicability, input.Justification)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot update applicability statement", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -601,9 +620,10 @@ func (r *mutationResolver) DeleteApplicabilityStatement(ctx context.Context, inp
return nil, err
}
prb := r.ProboService(ctx, input.ApplicabilityStatementID.TenantID())
scope := coredata.NewScopeFromObjectID(input.ApplicabilityStatementID)
prb := r.probo
err := prb.StatementsOfApplicability.DeleteApplicabilityStatement(ctx, input.ApplicabilityStatementID)
err := prb.StatementsOfApplicability.DeleteApplicabilityStatement(ctx, scope, input.ApplicabilityStatementID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot delete applicability statement", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -620,9 +640,10 @@ func (r *mutationResolver) CreateControlAuditMapping(ctx context.Context, input
return nil, err
}
prb := r.ProboService(ctx, input.AuditID.TenantID())
scope := coredata.NewScopeFromObjectID(input.AuditID)
prb := r.probo
control, audit, err := prb.Controls.CreateAuditMapping(ctx, input.ControlID, input.AuditID)
control, audit, err := prb.Controls.CreateAuditMapping(ctx, scope, input.ControlID, input.AuditID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot create control audit mapping", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -640,9 +661,10 @@ func (r *mutationResolver) DeleteControlAuditMapping(ctx context.Context, input
return nil, err
}
prb := r.ProboService(ctx, input.AuditID.TenantID())
scope := coredata.NewScopeFromObjectID(input.AuditID)
prb := r.probo
control, audit, err := prb.Controls.DeleteAuditMapping(ctx, input.ControlID, input.AuditID)
control, audit, err := prb.Controls.DeleteAuditMapping(ctx, scope, input.ControlID, input.AuditID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot delete control audit mapping", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -660,9 +682,10 @@ func (r *mutationResolver) CreateControlObligationMapping(ctx context.Context, i
return nil, err
}
prb := r.ProboService(ctx, input.ObligationID.TenantID())
scope := coredata.NewScopeFromObjectID(input.ObligationID)
prb := r.probo
control, obligation, err := prb.Controls.CreateObligationMapping(ctx, input.ControlID, input.ObligationID)
control, obligation, err := prb.Controls.CreateObligationMapping(ctx, scope, input.ControlID, input.ObligationID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot create control obligation mapping", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -680,9 +703,10 @@ func (r *mutationResolver) DeleteControlObligationMapping(ctx context.Context, i
return nil, err
}
prb := r.ProboService(ctx, input.ObligationID.TenantID())
scope := coredata.NewScopeFromObjectID(input.ObligationID)
prb := r.probo
control, obligation, err := prb.Controls.DeleteObligationMapping(ctx, input.ControlID, input.ObligationID)
control, obligation, err := prb.Controls.DeleteObligationMapping(ctx, scope, input.ControlID, input.ObligationID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot delete control obligation mapping", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -700,10 +724,11 @@ func (r *mutationResolver) CreateStatementOfApplicability(ctx context.Context, i
return nil, err
}
prb := r.ProboService(ctx, input.OrganizationID.TenantID())
scope := coredata.NewScopeFromObjectID(input.OrganizationID)
prb := r.probo
statementOfApplicability, err := prb.StatementsOfApplicability.Create(
ctx,
ctx, scope,
probo.CreateStatementOfApplicabilityRequest{
OrganizationID: input.OrganizationID,
Name: input.Name,
@@ -734,7 +759,8 @@ func (r *mutationResolver) UpdateStatementOfApplicability(ctx context.Context, i
return nil, err
}
prb := r.ProboService(ctx, input.ID.TenantID())
scope := coredata.NewScopeFromObjectID(input.ID)
prb := r.probo
var name *string
if input.Name != nil {
@@ -742,7 +768,7 @@ func (r *mutationResolver) UpdateStatementOfApplicability(ctx context.Context, i
}
statementOfApplicability, err := prb.StatementsOfApplicability.Update(
ctx,
ctx, scope,
probo.UpdateStatementOfApplicabilityRequest{
StatementOfApplicabilityID: input.ID,
Name: name,
@@ -773,9 +799,10 @@ func (r *mutationResolver) DeleteStatementOfApplicability(ctx context.Context, i
return nil, err
}
prb := r.ProboService(ctx, input.StatementOfApplicabilityID.TenantID())
scope := coredata.NewScopeFromObjectID(input.StatementOfApplicabilityID)
prb := r.probo
err := prb.StatementsOfApplicability.Delete(ctx, input.StatementOfApplicabilityID)
err := prb.StatementsOfApplicability.Delete(ctx, scope, input.StatementOfApplicabilityID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot delete statement_of_applicability", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -792,9 +819,10 @@ func (r *mutationResolver) PublishStatementOfApplicability(ctx context.Context,
return nil, err
}
prb := r.ProboService(ctx, input.StatementOfApplicabilityID.TenantID())
scope := coredata.NewScopeFromObjectID(input.StatementOfApplicabilityID)
prb := r.probo
document, documentVersion, err := prb.GeneratedDocuments.PublishStatementOfApplicability(ctx, input.StatementOfApplicabilityID, input.ApproverIds, input.Minor)
document, documentVersion, err := prb.GeneratedDocuments.PublishStatementOfApplicability(ctx, scope, input.StatementOfApplicabilityID, input.ApproverIds, input.Minor)
if err != nil {
if errors.Is(err, coredata.ErrResourceAlreadyExists) {
return nil, gqlutils.Conflict(ctx, err)
@@ -825,9 +853,10 @@ func (r *statementOfApplicabilityResolver) Document(ctx context.Context, obj *ty
return nil, err
}
prb := r.ProboService(ctx, obj.Document.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.Document.ID)
prb := r.probo
document, err := prb.Documents.Get(ctx, obj.Document.ID)
document, err := prb.Documents.Get(ctx, scope, obj.Document.ID)
if err != nil {
if errors.Is(err, coredata.ErrResourceNotFound) {
return nil, nil
@@ -869,7 +898,8 @@ func (r *statementOfApplicabilityResolver) ApplicabilityStatements(ctx context.C
return nil, err
}
prb := r.ProboService(ctx, obj.ID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ID)
prb := r.probo
pageOrderBy := page.OrderBy[coredata.ApplicabilityStatementOrderField]{
Field: coredata.ApplicabilityStatementOrderFieldCreatedAt,
@@ -884,7 +914,7 @@ func (r *statementOfApplicabilityResolver) ApplicabilityStatements(ctx context.C
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
p, err := prb.StatementsOfApplicability.ListApplicabilityStatements(ctx, obj.ID, cursor)
p, err := prb.StatementsOfApplicability.ListApplicabilityStatements(ctx, scope, obj.ID, cursor)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot list applicability statements", log.Error(err))
return nil, gqlutils.Internal(ctx)
@@ -900,11 +930,12 @@ func (r *statementOfApplicabilityResolver) Permission(ctx context.Context, obj *
// TotalCount is the resolver for the totalCount field.
func (r *statementOfApplicabilityConnectionResolver) TotalCount(ctx context.Context, obj *types.StatementOfApplicabilityConnection) (int, error) {
prb := r.ProboService(ctx, obj.ParentID.TenantID())
scope := coredata.NewScopeFromObjectID(obj.ParentID)
prb := r.probo
switch obj.Resolver.(type) {
case *organizationResolver:
count, err := prb.StatementsOfApplicability.CountForOrganizationID(ctx, obj.ParentID)
count, err := prb.StatementsOfApplicability.CountForOrganizationID(ctx, scope, obj.ParentID)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot count statements_of_applicability", log.Error(err))
return 0, gqlutils.Internal(ctx)