Add fulltext search on risks, documents, and measures

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2025-06-09 14:25:44 -07:00
parent 9d29189167
commit a9a5f9cf49
16 changed files with 613 additions and 72 deletions

View File

@@ -30,8 +30,8 @@ func NewControlFilter(query *string) *ControlFilter {
} }
} }
func (f *ControlFilter) SQLArguments() pgx.StrictNamedArgs { func (f *ControlFilter) SQLArguments() pgx.NamedArgs {
return pgx.StrictNamedArgs{ return pgx.NamedArgs{
"query": f.query, "query": f.query,
} }
} }

View File

@@ -102,6 +102,7 @@ func (p *Documents) LoadByOrganizationID(
scope Scoper, scope Scoper,
organizationID gid.GID, organizationID gid.GID,
cursor *page.Cursor[DocumentOrderField], cursor *page.Cursor[DocumentOrderField],
filter *DocumentFilter,
) error { ) error {
q := ` q := `
SELECT SELECT
@@ -119,12 +120,14 @@ WHERE
%s %s
AND organization_id = @organization_id AND organization_id = @organization_id
AND %s AND %s
AND %s
` `
q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment()) q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment())
args := pgx.StrictNamedArgs{"organization_id": organizationID} args := pgx.NamedArgs{"organization_id": organizationID}
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
maps.Copy(args, cursor.SQLArguments()) maps.Copy(args, cursor.SQLArguments())
rows, err := conn.Query(ctx, q, args) rows, err := conn.Query(ctx, q, args)
@@ -249,6 +252,7 @@ func (p *Documents) LoadByControlID(
scope Scoper, scope Scoper,
controlID gid.GID, controlID gid.GID,
cursor *page.Cursor[DocumentOrderField], cursor *page.Cursor[DocumentOrderField],
filter *DocumentFilter,
) error { ) error {
q := ` q := `
WITH plcs AS ( WITH plcs AS (
@@ -282,11 +286,13 @@ FROM
plcs plcs
WHERE %s WHERE %s
AND %s AND %s
AND %s
` `
q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment()) q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment())
args := pgx.StrictNamedArgs{"control_id": controlID} args := pgx.NamedArgs{"control_id": controlID}
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
maps.Copy(args, cursor.SQLArguments()) maps.Copy(args, cursor.SQLArguments())
rows, err := conn.Query(ctx, q, args) rows, err := conn.Query(ctx, q, args)
@@ -310,6 +316,7 @@ func (p *Documents) LoadByRiskID(
scope Scoper, scope Scoper,
riskID gid.GID, riskID gid.GID,
cursor *page.Cursor[DocumentOrderField], cursor *page.Cursor[DocumentOrderField],
filter *DocumentFilter,
) error { ) error {
q := ` q := `
WITH plcs AS ( WITH plcs AS (
@@ -343,11 +350,13 @@ FROM
plcs plcs
WHERE %s WHERE %s
AND %s AND %s
AND %s
` `
q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment()) q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment())
args := pgx.StrictNamedArgs{"risk_id": riskID} args := pgx.NamedArgs{"risk_id": riskID}
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
maps.Copy(args, cursor.SQLArguments()) maps.Copy(args, cursor.SQLArguments())
rows, err := conn.Query(ctx, q, args) rows, err := conn.Query(ctx, q, args)

View File

@@ -0,0 +1,45 @@
// Copyright (c) 2025 Probo Inc <hello@getprobo.com>.
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
package coredata
import (
"github.com/jackc/pgx/v5"
)
type (
DocumentFilter struct {
query *string
}
)
func NewDocumentFilter(query *string) *DocumentFilter {
return &DocumentFilter{
query: query,
}
}
func (f *DocumentFilter) SQLArguments() pgx.NamedArgs {
return pgx.NamedArgs{
"query": f.query,
}
}
func (f *DocumentFilter) SQLFragment() string {
if f.query == nil || *f.query == "" {
return "TRUE"
}
return "search_vector @@ websearch_to_tsquery('simple', @query)"
}

View File

@@ -58,6 +58,7 @@ func (m *Measures) LoadByRiskID(
scope Scoper, scope Scoper,
riskID gid.GID, riskID gid.GID,
cursor *page.Cursor[MeasureOrderField], cursor *page.Cursor[MeasureOrderField],
filter *MeasureFilter,
) error { ) error {
q := ` q := `
WITH msrs AS ( WITH msrs AS (
@@ -93,11 +94,13 @@ FROM
msrs msrs
WHERE %s WHERE %s
AND %s AND %s
AND %s
` `
q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment()) q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment())
args := pgx.StrictNamedArgs{"risk_id": riskID} args := pgx.NamedArgs{"risk_id": riskID}
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
maps.Copy(args, cursor.SQLArguments()) maps.Copy(args, cursor.SQLArguments())
rows, err := conn.Query(ctx, q, args) rows, err := conn.Query(ctx, q, args)
@@ -121,6 +124,7 @@ func (m *Measures) LoadByControlID(
scope Scoper, scope Scoper,
controlID gid.GID, controlID gid.GID,
cursor *page.Cursor[MeasureOrderField], cursor *page.Cursor[MeasureOrderField],
filter *MeasureFilter,
) error { ) error {
q := ` q := `
WITH mtgtns AS ( WITH mtgtns AS (
@@ -156,11 +160,13 @@ FROM
mtgtns mtgtns
WHERE %s WHERE %s
AND %s AND %s
AND %s
` `
q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment()) q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment())
args := pgx.StrictNamedArgs{"control_id": controlID} args := pgx.NamedArgs{"control_id": controlID}
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
maps.Copy(args, cursor.SQLArguments()) maps.Copy(args, cursor.SQLArguments())
rows, err := conn.Query(ctx, q, args) rows, err := conn.Query(ctx, q, args)
@@ -184,6 +190,7 @@ func (m *Measures) LoadByOrganizationID(
scope Scoper, scope Scoper,
organizationID gid.GID, organizationID gid.GID,
cursor *page.Cursor[MeasureOrderField], cursor *page.Cursor[MeasureOrderField],
filter *MeasureFilter,
) error { ) error {
q := ` q := `
SELECT SELECT
@@ -202,11 +209,13 @@ WHERE
%s %s
AND organization_id = @organization_id AND organization_id = @organization_id
AND %s AND %s
AND %s
` `
q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment()) q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment())
args := pgx.StrictNamedArgs{"organization_id": organizationID} args := pgx.NamedArgs{"organization_id": organizationID}
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
maps.Copy(args, cursor.SQLArguments()) maps.Copy(args, cursor.SQLArguments())
rows, err := conn.Query(ctx, q, args) rows, err := conn.Query(ctx, q, args)

View File

@@ -0,0 +1,45 @@
// Copyright (c) 2025 Probo Inc <hello@getprobo.com>.
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
package coredata
import (
"github.com/jackc/pgx/v5"
)
type (
MeasureFilter struct {
query *string
}
)
func NewMeasureFilter(query *string) *MeasureFilter {
return &MeasureFilter{
query: query,
}
}
func (f *MeasureFilter) SQLArguments() pgx.NamedArgs {
return pgx.NamedArgs{
"query": f.query,
}
}
func (f *MeasureFilter) SQLFragment() string {
if f.query == nil || *f.query == "" {
return "TRUE"
}
return "search_vector @@ websearch_to_tsquery('simple', @query)"
}

View File

@@ -0,0 +1,26 @@
ALTER TABLE documents ADD COLUMN search_vector tsvector
GENERATED ALWAYS AS (
to_tsvector('simple',
COALESCE(title, '')
)
) STORED;
CREATE INDEX documents_search_idx ON documents USING gin(search_vector);
ALTER TABLE measures ADD COLUMN search_vector tsvector
GENERATED ALWAYS AS (
to_tsvector('simple',
COALESCE(name, '')
)
) STORED;
CREATE INDEX measures_search_idx ON measures USING gin(search_vector);
ALTER TABLE risks ADD COLUMN search_vector tsvector
GENERATED ALWAYS AS (
to_tsvector('simple',
COALESCE(name, '')
)
) STORED;
CREATE INDEX risks_search_idx ON risks USING gin(search_vector);

View File

@@ -74,6 +74,7 @@ func (r *Risks) LoadByMeasureID(
scope Scoper, scope Scoper,
measureID gid.GID, measureID gid.GID,
cursor *page.Cursor[RiskOrderField], cursor *page.Cursor[RiskOrderField],
filter *RiskFilter,
) error { ) error {
q := ` q := `
WITH rsks AS ( WITH rsks AS (
@@ -123,11 +124,14 @@ FROM
rsks rsks
WHERE %s WHERE %s
AND %s AND %s
AND %s
` `
q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment()) q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment())
args := pgx.NamedArgs{"measure_id": measureID} args := pgx.NamedArgs{"measure_id": measureID}
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
maps.Copy(args, cursor.SQLArguments())
rows, err := conn.Query(ctx, q, args) rows, err := conn.Query(ctx, q, args)
if err != nil { if err != nil {
@@ -150,6 +154,7 @@ func (r *Risks) LoadByOrganizationID(
scope Scoper, scope Scoper,
organizationID gid.GID, organizationID gid.GID,
cursor *page.Cursor[RiskOrderField], cursor *page.Cursor[RiskOrderField],
filter *RiskFilter,
) error { ) error {
q := ` q := `
SELECT SELECT
@@ -173,11 +178,13 @@ FROM risks
WHERE %s WHERE %s
AND organization_id = @organization_id AND organization_id = @organization_id
AND %s AND %s
AND %s
` `
q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment()) q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment(), cursor.SQLFragment())
args := pgx.StrictNamedArgs{"organization_id": organizationID} args := pgx.NamedArgs{"organization_id": organizationID}
maps.Copy(args, scope.SQLArguments()) maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
maps.Copy(args, cursor.SQLArguments()) maps.Copy(args, cursor.SQLArguments())
rows, err := conn.Query(ctx, q, args) rows, err := conn.Query(ctx, q, args)

View File

@@ -0,0 +1,45 @@
// Copyright (c) 2025 Probo Inc <hello@getprobo.com>.
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
package coredata
import (
"github.com/jackc/pgx/v5"
)
type (
RiskFilter struct {
query *string
}
)
func NewRiskFilter(query *string) *RiskFilter {
return &RiskFilter{
query: query,
}
}
func (f *RiskFilter) SQLArguments() pgx.NamedArgs {
return pgx.NamedArgs{
"query": f.query,
}
}
func (f *RiskFilter) SQLFragment() string {
if f.query == nil || *f.query == "" {
return "TRUE"
}
return "search_vector @@ websearch_to_tsquery('simple', @query)"
}

View File

@@ -660,6 +660,7 @@ func (s *DocumentService) ListByOrganizationID(
ctx context.Context, ctx context.Context,
organizationID gid.GID, organizationID gid.GID,
cursor *page.Cursor[coredata.DocumentOrderField], cursor *page.Cursor[coredata.DocumentOrderField],
filter *coredata.DocumentFilter,
) (*page.Page[*coredata.Document, coredata.DocumentOrderField], error) { ) (*page.Page[*coredata.Document, coredata.DocumentOrderField], error) {
var documents coredata.Documents var documents coredata.Documents
@@ -672,6 +673,7 @@ func (s *DocumentService) ListByOrganizationID(
s.svc.scope, s.svc.scope,
organizationID, organizationID,
cursor, cursor,
filter,
) )
}, },
) )
@@ -687,13 +689,14 @@ func (s *DocumentService) ListForControlID(
ctx context.Context, ctx context.Context,
controlID gid.GID, controlID gid.GID,
cursor *page.Cursor[coredata.DocumentOrderField], cursor *page.Cursor[coredata.DocumentOrderField],
filter *coredata.DocumentFilter,
) (*page.Page[*coredata.Document, coredata.DocumentOrderField], error) { ) (*page.Page[*coredata.Document, coredata.DocumentOrderField], error) {
var documents coredata.Documents var documents coredata.Documents
err := s.svc.pg.WithConn( err := s.svc.pg.WithConn(
ctx, ctx,
func(conn pg.Conn) error { func(conn pg.Conn) error {
return documents.LoadByControlID(ctx, conn, s.svc.scope, controlID, cursor) return documents.LoadByControlID(ctx, conn, s.svc.scope, controlID, cursor, filter)
}, },
) )
@@ -708,13 +711,14 @@ func (s *DocumentService) ListForRiskID(
ctx context.Context, ctx context.Context,
riskID gid.GID, riskID gid.GID,
cursor *page.Cursor[coredata.DocumentOrderField], cursor *page.Cursor[coredata.DocumentOrderField],
filter *coredata.DocumentFilter,
) (*page.Page[*coredata.Document, coredata.DocumentOrderField], error) { ) (*page.Page[*coredata.Document, coredata.DocumentOrderField], error) {
var documents coredata.Documents var documents coredata.Documents
err := s.svc.pg.WithConn( err := s.svc.pg.WithConn(
ctx, ctx,
func(conn pg.Conn) error { func(conn pg.Conn) error {
return documents.LoadByRiskID(ctx, conn, s.svc.scope, riskID, cursor) return documents.LoadByRiskID(ctx, conn, s.svc.scope, riskID, cursor, filter)
}, },
) )

View File

@@ -323,7 +323,7 @@ func (s FrameworkService) ExportAudit(
}, },
) )
if err := measures.LoadByControlID(ctx, conn, s.svc.scope, control.ID, cursor); err != nil { if err := measures.LoadByControlID(ctx, conn, s.svc.scope, control.ID, cursor, coredata.NewMeasureFilter(nil)); err != nil {
return fmt.Errorf("cannot load measures: %w", err) return fmt.Errorf("cannot load measures: %w", err)
} }
@@ -339,7 +339,7 @@ func (s FrameworkService) ExportAudit(
}, },
) )
if err := documents.LoadByControlID(ctx, conn, s.svc.scope, control.ID, cursor2); err != nil { if err := documents.LoadByControlID(ctx, conn, s.svc.scope, control.ID, cursor2, coredata.NewDocumentFilter(nil)); err != nil {
return fmt.Errorf("cannot load documents: %w", err) return fmt.Errorf("cannot load documents: %w", err)
} }

View File

@@ -73,6 +73,7 @@ func (s MeasureService) ListForRiskID(
ctx context.Context, ctx context.Context,
riskID gid.GID, riskID gid.GID,
cursor *page.Cursor[coredata.MeasureOrderField], cursor *page.Cursor[coredata.MeasureOrderField],
filter *coredata.MeasureFilter,
) (*page.Page[*coredata.Measure, coredata.MeasureOrderField], error) { ) (*page.Page[*coredata.Measure, coredata.MeasureOrderField], error) {
var measures coredata.Measures var measures coredata.Measures
risk := &coredata.Risk{} risk := &coredata.Risk{}
@@ -84,7 +85,7 @@ func (s MeasureService) ListForRiskID(
return fmt.Errorf("cannot load risk: %w", err) return fmt.Errorf("cannot load risk: %w", err)
} }
err := measures.LoadByRiskID(ctx, conn, s.svc.scope, risk.ID, cursor) err := measures.LoadByRiskID(ctx, conn, s.svc.scope, risk.ID, cursor, filter)
if err != nil { if err != nil {
return fmt.Errorf("cannot load measures: %w", err) return fmt.Errorf("cannot load measures: %w", err)
} }
@@ -104,6 +105,7 @@ func (s MeasureService) ListForControlID(
ctx context.Context, ctx context.Context,
controlID gid.GID, controlID gid.GID,
cursor *page.Cursor[coredata.MeasureOrderField], cursor *page.Cursor[coredata.MeasureOrderField],
filter *coredata.MeasureFilter,
) (*page.Page[*coredata.Measure, coredata.MeasureOrderField], error) { ) (*page.Page[*coredata.Measure, coredata.MeasureOrderField], error) {
var measures coredata.Measures var measures coredata.Measures
control := &coredata.Control{} control := &coredata.Control{}
@@ -115,7 +117,7 @@ func (s MeasureService) ListForControlID(
return fmt.Errorf("cannot load control: %w", err) return fmt.Errorf("cannot load control: %w", err)
} }
err := measures.LoadByControlID(ctx, conn, s.svc.scope, control.ID, cursor) err := measures.LoadByControlID(ctx, conn, s.svc.scope, control.ID, cursor, filter)
if err != nil { if err != nil {
return fmt.Errorf("cannot load measures: %w", err) return fmt.Errorf("cannot load measures: %w", err)
} }
@@ -321,6 +323,7 @@ func (s MeasureService) ListForOrganizationID(
ctx context.Context, ctx context.Context,
organizationID gid.GID, organizationID gid.GID,
cursor *page.Cursor[coredata.MeasureOrderField], cursor *page.Cursor[coredata.MeasureOrderField],
filter *coredata.MeasureFilter,
) (*page.Page[*coredata.Measure, coredata.MeasureOrderField], error) { ) (*page.Page[*coredata.Measure, coredata.MeasureOrderField], error) {
var measures coredata.Measures var measures coredata.Measures
organization := &coredata.Organization{} organization := &coredata.Organization{}
@@ -338,6 +341,7 @@ func (s MeasureService) ListForOrganizationID(
s.svc.scope, s.svc.scope,
organization.ID, organization.ID,
cursor, cursor,
filter,
) )
if err != nil { if err != nil {
return fmt.Errorf("cannot load measures: %w", err) return fmt.Errorf("cannot load measures: %w", err)

View File

@@ -63,13 +63,14 @@ func (s RiskService) ListForMeasureID(
ctx context.Context, ctx context.Context,
measureID gid.GID, measureID gid.GID,
cursor *page.Cursor[coredata.RiskOrderField], cursor *page.Cursor[coredata.RiskOrderField],
filter *coredata.RiskFilter,
) (*page.Page[*coredata.Risk, coredata.RiskOrderField], error) { ) (*page.Page[*coredata.Risk, coredata.RiskOrderField], error) {
var risks coredata.Risks var risks coredata.Risks
err := s.svc.pg.WithConn( err := s.svc.pg.WithConn(
ctx, ctx,
func(conn pg.Conn) error { func(conn pg.Conn) error {
return risks.LoadByMeasureID(ctx, conn, s.svc.scope, measureID, cursor) return risks.LoadByMeasureID(ctx, conn, s.svc.scope, measureID, cursor, filter)
}, },
) )
@@ -394,6 +395,7 @@ func (s RiskService) ListForOrganizationID(
ctx context.Context, ctx context.Context,
organizationID gid.GID, organizationID gid.GID,
cursor *page.Cursor[coredata.RiskOrderField], cursor *page.Cursor[coredata.RiskOrderField],
filter *coredata.RiskFilter,
) (*page.Page[*coredata.Risk, coredata.RiskOrderField], error) { ) (*page.Page[*coredata.Risk, coredata.RiskOrderField], error) {
var risks coredata.Risks var risks coredata.Risks
@@ -406,6 +408,7 @@ func (s RiskService) ListForOrganizationID(
s.svc.scope, s.svc.scope,
organizationID, organizationID,
cursor, cursor,
filter,
) )
}, },
) )

View File

@@ -498,6 +498,18 @@ input ControlFilter {
query: String query: String
} }
input DocumentFilter {
query: String
}
input MeasureFilter {
query: String
}
input RiskFilter {
query: String
}
# Core Types # Core Types
type Organization implements Node { type Organization implements Node {
id: ID! id: ID!
@@ -559,6 +571,7 @@ type Organization implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: DocumentOrder orderBy: DocumentOrder
filter: DocumentFilter
): DocumentConnection! @goField(forceResolver: true) ): DocumentConnection! @goField(forceResolver: true)
measures( measures(
@@ -567,6 +580,7 @@ type Organization implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: MeasureOrder orderBy: MeasureOrder
filter: MeasureFilter
): MeasureConnection! @goField(forceResolver: true) ): MeasureConnection! @goField(forceResolver: true)
risks( risks(
@@ -575,6 +589,7 @@ type Organization implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: RiskOrder orderBy: RiskOrder
filter: RiskFilter
): RiskConnection! @goField(forceResolver: true) ): RiskConnection! @goField(forceResolver: true)
tasks( tasks(
@@ -726,6 +741,7 @@ type Control implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: MeasureOrder orderBy: MeasureOrder
filter: MeasureFilter
): MeasureConnection! @goField(forceResolver: true) ): MeasureConnection! @goField(forceResolver: true)
documents( documents(
@@ -734,6 +750,7 @@ type Control implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: DocumentOrder orderBy: DocumentOrder
filter: DocumentFilter
): DocumentConnection! @goField(forceResolver: true) ): DocumentConnection! @goField(forceResolver: true)
createdAt: Datetime! createdAt: Datetime!
@@ -769,6 +786,7 @@ type Measure implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: RiskOrder orderBy: RiskOrder
filter: RiskFilter
): RiskConnection! @goField(forceResolver: true) ): RiskConnection! @goField(forceResolver: true)
controls( controls(
@@ -880,6 +898,7 @@ type Risk implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: MeasureOrder orderBy: MeasureOrder
filter: MeasureFilter
): MeasureConnection! @goField(forceResolver: true) ): MeasureConnection! @goField(forceResolver: true)
documents( documents(
@@ -888,6 +907,7 @@ type Risk implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: DocumentOrder orderBy: DocumentOrder
filter: DocumentFilter
): DocumentConnection! @goField(forceResolver: true) ): DocumentConnection! @goField(forceResolver: true)
controls( controls(

View File

@@ -124,10 +124,10 @@ type ComplexityRoot struct {
Control struct { Control struct {
CreatedAt func(childComplexity int) int CreatedAt func(childComplexity int) int
Description func(childComplexity int) int Description func(childComplexity int) int
Documents func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) int Documents func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) int
Framework func(childComplexity int) int Framework func(childComplexity int) int
ID func(childComplexity int) int ID func(childComplexity int) int
Measures func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) int Measures func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) int
Name func(childComplexity int) int Name func(childComplexity int) int
SectionTitle func(childComplexity int) int SectionTitle func(childComplexity int) int
UpdatedAt func(childComplexity int) int UpdatedAt func(childComplexity int) int
@@ -459,7 +459,7 @@ type ComplexityRoot struct {
Evidences func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.EvidenceOrderBy) int Evidences func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.EvidenceOrderBy) int
ID func(childComplexity int) int ID func(childComplexity int) int
Name func(childComplexity int) int Name func(childComplexity int) int
Risks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy) int Risks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy, filter *types.RiskFilter) int
State func(childComplexity int) int State func(childComplexity int) int
Tasks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) int Tasks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) int
UpdatedAt func(childComplexity int) int UpdatedAt func(childComplexity int) int
@@ -547,14 +547,14 @@ type ComplexityRoot struct {
Controls func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) int Controls func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) int
CreatedAt func(childComplexity int) int CreatedAt func(childComplexity int) int
Data func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DatumOrder) int Data func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DatumOrder) int
Documents func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) int Documents func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) int
Frameworks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.FrameworkOrderBy) int Frameworks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.FrameworkOrderBy) int
ID func(childComplexity int) int ID func(childComplexity int) int
LogoURL func(childComplexity int) int LogoURL func(childComplexity int) int
Measures func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) int Measures func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) int
Name func(childComplexity int) int Name func(childComplexity int) int
Peoples func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.PeopleOrderBy) int Peoples func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.PeopleOrderBy) int
Risks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy) int Risks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy, filter *types.RiskFilter) int
Tasks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) int Tasks func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) int
UpdatedAt func(childComplexity int) int UpdatedAt func(childComplexity int) int
Users func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.UserOrderBy) int Users func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.UserOrderBy) int
@@ -628,12 +628,12 @@ type ComplexityRoot struct {
Controls func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) int Controls func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) int
CreatedAt func(childComplexity int) int CreatedAt func(childComplexity int) int
Description func(childComplexity int) int Description func(childComplexity int) int
Documents func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) int Documents func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) int
ID func(childComplexity int) int ID func(childComplexity int) int
InherentImpact func(childComplexity int) int InherentImpact func(childComplexity int) int
InherentLikelihood func(childComplexity int) int InherentLikelihood func(childComplexity int) int
InherentRiskScore func(childComplexity int) int InherentRiskScore func(childComplexity int) int
Measures func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) int Measures func(childComplexity int, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) int
Name func(childComplexity int) int Name func(childComplexity int) int
Note func(childComplexity int) int Note func(childComplexity int) int
Organization func(childComplexity int) int Organization func(childComplexity int) int
@@ -871,8 +871,8 @@ type AssetResolver interface {
} }
type ControlResolver interface { type ControlResolver interface {
Framework(ctx context.Context, obj *types.Control) (*types.Framework, error) Framework(ctx context.Context, obj *types.Control) (*types.Framework, error)
Measures(ctx context.Context, obj *types.Control, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) (*types.MeasureConnection, error) Measures(ctx context.Context, obj *types.Control, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) (*types.MeasureConnection, error)
Documents(ctx context.Context, obj *types.Control, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) (*types.DocumentConnection, error) Documents(ctx context.Context, obj *types.Control, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) (*types.DocumentConnection, error)
} }
type DatumResolver interface { type DatumResolver interface {
Owner(ctx context.Context, obj *types.Datum) (*types.People, error) Owner(ctx context.Context, obj *types.Datum) (*types.People, error)
@@ -912,7 +912,7 @@ type FrameworkResolver interface {
type MeasureResolver interface { type MeasureResolver interface {
Evidences(ctx context.Context, obj *types.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.EvidenceOrderBy) (*types.EvidenceConnection, error) Evidences(ctx context.Context, obj *types.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.EvidenceOrderBy) (*types.EvidenceConnection, error)
Tasks(ctx context.Context, obj *types.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) (*types.TaskConnection, error) Tasks(ctx context.Context, obj *types.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) (*types.TaskConnection, error)
Risks(ctx context.Context, obj *types.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy) (*types.RiskConnection, error) Risks(ctx context.Context, obj *types.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy, filter *types.RiskFilter) (*types.RiskConnection, error)
Controls(ctx context.Context, obj *types.Measure, 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.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) (*types.ControlConnection, error)
} }
type MutationResolver interface { type MutationResolver interface {
@@ -988,9 +988,9 @@ type OrganizationResolver interface {
Controls(ctx context.Context, obj *types.Organization, 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.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) (*types.ControlConnection, error)
Vendors(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.VendorOrderBy) (*types.VendorConnection, error) Vendors(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.VendorOrderBy) (*types.VendorConnection, error)
Peoples(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.PeopleOrderBy) (*types.PeopleConnection, error) Peoples(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.PeopleOrderBy) (*types.PeopleConnection, error)
Documents(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) (*types.DocumentConnection, error) Documents(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) (*types.DocumentConnection, error)
Measures(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) (*types.MeasureConnection, error) Measures(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) (*types.MeasureConnection, error)
Risks(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy) (*types.RiskConnection, error) Risks(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy, filter *types.RiskFilter) (*types.RiskConnection, error)
Tasks(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) (*types.TaskConnection, error) Tasks(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) (*types.TaskConnection, error)
Assets(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.AssetOrder) (*types.AssetConnection, error) Assets(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.AssetOrder) (*types.AssetConnection, error)
Data(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DatumOrder) (*types.DatumConnection, error) Data(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DatumOrder) (*types.DatumConnection, error)
@@ -1002,8 +1002,8 @@ type QueryResolver interface {
type RiskResolver interface { type RiskResolver interface {
Owner(ctx context.Context, obj *types.Risk) (*types.People, error) Owner(ctx context.Context, obj *types.Risk) (*types.People, error)
Organization(ctx context.Context, obj *types.Risk) (*types.Organization, error) Organization(ctx context.Context, obj *types.Risk) (*types.Organization, error)
Measures(ctx context.Context, obj *types.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) (*types.MeasureConnection, error) Measures(ctx context.Context, obj *types.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) (*types.MeasureConnection, error)
Documents(ctx context.Context, obj *types.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) (*types.DocumentConnection, error) Documents(ctx context.Context, obj *types.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) (*types.DocumentConnection, error)
Controls(ctx context.Context, obj *types.Risk, 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.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.ControlOrderBy, filter *types.ControlFilter) (*types.ControlConnection, error)
} }
type TaskResolver interface { type TaskResolver interface {
@@ -1273,7 +1273,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
return 0, false return 0, false
} }
return e.complexity.Control.Documents(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.DocumentOrderBy)), true return e.complexity.Control.Documents(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.DocumentOrderBy), args["filter"].(*types.DocumentFilter)), true
case "Control.framework": case "Control.framework":
if e.complexity.Control.Framework == nil { if e.complexity.Control.Framework == nil {
@@ -1299,7 +1299,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
return 0, false return 0, false
} }
return e.complexity.Control.Measures(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.MeasureOrderBy)), true return e.complexity.Control.Measures(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.MeasureOrderBy), args["filter"].(*types.MeasureFilter)), true
case "Control.name": case "Control.name":
if e.complexity.Control.Name == nil { if e.complexity.Control.Name == nil {
@@ -2382,7 +2382,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
return 0, false return 0, false
} }
return e.complexity.Measure.Risks(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.RiskOrderBy)), true return e.complexity.Measure.Risks(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.RiskOrderBy), args["filter"].(*types.RiskFilter)), true
case "Measure.state": case "Measure.state":
if e.complexity.Measure.State == nil { if e.complexity.Measure.State == nil {
@@ -3259,7 +3259,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
return 0, false return 0, false
} }
return e.complexity.Organization.Documents(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.DocumentOrderBy)), true return e.complexity.Organization.Documents(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.DocumentOrderBy), args["filter"].(*types.DocumentFilter)), true
case "Organization.frameworks": case "Organization.frameworks":
if e.complexity.Organization.Frameworks == nil { if e.complexity.Organization.Frameworks == nil {
@@ -3297,7 +3297,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
return 0, false return 0, false
} }
return e.complexity.Organization.Measures(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.MeasureOrderBy)), true return e.complexity.Organization.Measures(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.MeasureOrderBy), args["filter"].(*types.MeasureFilter)), true
case "Organization.name": case "Organization.name":
if e.complexity.Organization.Name == nil { if e.complexity.Organization.Name == nil {
@@ -3328,7 +3328,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
return 0, false return 0, false
} }
return e.complexity.Organization.Risks(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.RiskOrderBy)), true return e.complexity.Organization.Risks(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.RiskOrderBy), args["filter"].(*types.RiskFilter)), true
case "Organization.tasks": case "Organization.tasks":
if e.complexity.Organization.Tasks == nil { if e.complexity.Organization.Tasks == nil {
@@ -3624,7 +3624,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
return 0, false return 0, false
} }
return e.complexity.Risk.Documents(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.DocumentOrderBy)), true return e.complexity.Risk.Documents(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.DocumentOrderBy), args["filter"].(*types.DocumentFilter)), true
case "Risk.id": case "Risk.id":
if e.complexity.Risk.ID == nil { if e.complexity.Risk.ID == nil {
@@ -3664,7 +3664,7 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin
return 0, false return 0, false
} }
return e.complexity.Risk.Measures(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.MeasureOrderBy)), true return e.complexity.Risk.Measures(childComplexity, args["first"].(*int), args["after"].(*page.CursorKey), args["last"].(*int), args["before"].(*page.CursorKey), args["orderBy"].(*types.MeasureOrderBy), args["filter"].(*types.MeasureFilter)), true
case "Risk.name": case "Risk.name":
if e.complexity.Risk.Name == nil { if e.complexity.Risk.Name == nil {
@@ -4553,6 +4553,7 @@ func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
ec.unmarshalInputDeleteTaskInput, ec.unmarshalInputDeleteTaskInput,
ec.unmarshalInputDeleteVendorComplianceReportInput, ec.unmarshalInputDeleteVendorComplianceReportInput,
ec.unmarshalInputDeleteVendorInput, ec.unmarshalInputDeleteVendorInput,
ec.unmarshalInputDocumentFilter,
ec.unmarshalInputDocumentOrder, ec.unmarshalInputDocumentOrder,
ec.unmarshalInputDocumentVersionFilter, ec.unmarshalInputDocumentVersionFilter,
ec.unmarshalInputDocumentVersionOrder, ec.unmarshalInputDocumentVersionOrder,
@@ -4565,6 +4566,7 @@ func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
ec.unmarshalInputImportFrameworkInput, ec.unmarshalInputImportFrameworkInput,
ec.unmarshalInputImportMeasureInput, ec.unmarshalInputImportMeasureInput,
ec.unmarshalInputInviteUserInput, ec.unmarshalInputInviteUserInput,
ec.unmarshalInputMeasureFilter,
ec.unmarshalInputMeasureOrder, ec.unmarshalInputMeasureOrder,
ec.unmarshalInputOrganizationOrder, ec.unmarshalInputOrganizationOrder,
ec.unmarshalInputPeopleOrder, ec.unmarshalInputPeopleOrder,
@@ -4572,6 +4574,7 @@ func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler {
ec.unmarshalInputRemoveUserInput, ec.unmarshalInputRemoveUserInput,
ec.unmarshalInputRequestEvidenceInput, ec.unmarshalInputRequestEvidenceInput,
ec.unmarshalInputRequestSignatureInput, ec.unmarshalInputRequestSignatureInput,
ec.unmarshalInputRiskFilter,
ec.unmarshalInputRiskOrder, ec.unmarshalInputRiskOrder,
ec.unmarshalInputSendSigningNotificationsInput, ec.unmarshalInputSendSigningNotificationsInput,
ec.unmarshalInputTaskOrder, ec.unmarshalInputTaskOrder,
@@ -5192,6 +5195,18 @@ input ControlFilter {
query: String query: String
} }
input DocumentFilter {
query: String
}
input MeasureFilter {
query: String
}
input RiskFilter {
query: String
}
# Core Types # Core Types
type Organization implements Node { type Organization implements Node {
id: ID! id: ID!
@@ -5253,6 +5268,7 @@ type Organization implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: DocumentOrder orderBy: DocumentOrder
filter: DocumentFilter
): DocumentConnection! @goField(forceResolver: true) ): DocumentConnection! @goField(forceResolver: true)
measures( measures(
@@ -5261,6 +5277,7 @@ type Organization implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: MeasureOrder orderBy: MeasureOrder
filter: MeasureFilter
): MeasureConnection! @goField(forceResolver: true) ): MeasureConnection! @goField(forceResolver: true)
risks( risks(
@@ -5269,6 +5286,7 @@ type Organization implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: RiskOrder orderBy: RiskOrder
filter: RiskFilter
): RiskConnection! @goField(forceResolver: true) ): RiskConnection! @goField(forceResolver: true)
tasks( tasks(
@@ -5420,6 +5438,7 @@ type Control implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: MeasureOrder orderBy: MeasureOrder
filter: MeasureFilter
): MeasureConnection! @goField(forceResolver: true) ): MeasureConnection! @goField(forceResolver: true)
documents( documents(
@@ -5428,6 +5447,7 @@ type Control implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: DocumentOrder orderBy: DocumentOrder
filter: DocumentFilter
): DocumentConnection! @goField(forceResolver: true) ): DocumentConnection! @goField(forceResolver: true)
createdAt: Datetime! createdAt: Datetime!
@@ -5463,6 +5483,7 @@ type Measure implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: RiskOrder orderBy: RiskOrder
filter: RiskFilter
): RiskConnection! @goField(forceResolver: true) ): RiskConnection! @goField(forceResolver: true)
controls( controls(
@@ -5574,6 +5595,7 @@ type Risk implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: MeasureOrder orderBy: MeasureOrder
filter: MeasureFilter
): MeasureConnection! @goField(forceResolver: true) ): MeasureConnection! @goField(forceResolver: true)
documents( documents(
@@ -5582,6 +5604,7 @@ type Risk implements Node {
last: Int last: Int
before: CursorKey before: CursorKey
orderBy: DocumentOrder orderBy: DocumentOrder
filter: DocumentFilter
): DocumentConnection! @goField(forceResolver: true) ): DocumentConnection! @goField(forceResolver: true)
controls( controls(
@@ -6916,6 +6939,11 @@ func (ec *executionContext) field_Control_documents_args(ctx context.Context, ra
return nil, err return nil, err
} }
args["orderBy"] = arg4 args["orderBy"] = arg4
arg5, err := ec.field_Control_documents_argsFilter(ctx, rawArgs)
if err != nil {
return nil, err
}
args["filter"] = arg5
return args, nil return args, nil
} }
func (ec *executionContext) field_Control_documents_argsFirst( func (ec *executionContext) field_Control_documents_argsFirst(
@@ -6983,6 +7011,19 @@ func (ec *executionContext) field_Control_documents_argsOrderBy(
return zeroVal, nil return zeroVal, nil
} }
func (ec *executionContext) field_Control_documents_argsFilter(
ctx context.Context,
rawArgs map[string]any,
) (*types.DocumentFilter, error) {
ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("filter"))
if tmp, ok := rawArgs["filter"]; ok {
return ec.unmarshalODocumentFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDocumentFilter(ctx, tmp)
}
var zeroVal *types.DocumentFilter
return zeroVal, nil
}
func (ec *executionContext) field_Control_measures_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { func (ec *executionContext) field_Control_measures_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
var err error var err error
args := map[string]any{} args := map[string]any{}
@@ -7011,6 +7052,11 @@ func (ec *executionContext) field_Control_measures_args(ctx context.Context, raw
return nil, err return nil, err
} }
args["orderBy"] = arg4 args["orderBy"] = arg4
arg5, err := ec.field_Control_measures_argsFilter(ctx, rawArgs)
if err != nil {
return nil, err
}
args["filter"] = arg5
return args, nil return args, nil
} }
func (ec *executionContext) field_Control_measures_argsFirst( func (ec *executionContext) field_Control_measures_argsFirst(
@@ -7078,6 +7124,19 @@ func (ec *executionContext) field_Control_measures_argsOrderBy(
return zeroVal, nil return zeroVal, nil
} }
func (ec *executionContext) field_Control_measures_argsFilter(
ctx context.Context,
rawArgs map[string]any,
) (*types.MeasureFilter, error) {
ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("filter"))
if tmp, ok := rawArgs["filter"]; ok {
return ec.unmarshalOMeasureFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐMeasureFilter(ctx, tmp)
}
var zeroVal *types.MeasureFilter
return zeroVal, nil
}
func (ec *executionContext) field_Datum_vendors_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { func (ec *executionContext) field_Datum_vendors_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
var err error var err error
args := map[string]any{} args := map[string]any{}
@@ -7843,6 +7902,11 @@ func (ec *executionContext) field_Measure_risks_args(ctx context.Context, rawArg
return nil, err return nil, err
} }
args["orderBy"] = arg4 args["orderBy"] = arg4
arg5, err := ec.field_Measure_risks_argsFilter(ctx, rawArgs)
if err != nil {
return nil, err
}
args["filter"] = arg5
return args, nil return args, nil
} }
func (ec *executionContext) field_Measure_risks_argsFirst( func (ec *executionContext) field_Measure_risks_argsFirst(
@@ -7910,6 +7974,19 @@ func (ec *executionContext) field_Measure_risks_argsOrderBy(
return zeroVal, nil return zeroVal, nil
} }
func (ec *executionContext) field_Measure_risks_argsFilter(
ctx context.Context,
rawArgs map[string]any,
) (*types.RiskFilter, error) {
ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("filter"))
if tmp, ok := rawArgs["filter"]; ok {
return ec.unmarshalORiskFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐRiskFilter(ctx, tmp)
}
var zeroVal *types.RiskFilter
return zeroVal, nil
}
func (ec *executionContext) field_Measure_tasks_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { func (ec *executionContext) field_Measure_tasks_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
var err error var err error
args := map[string]any{} args := map[string]any{}
@@ -9880,6 +9957,11 @@ func (ec *executionContext) field_Organization_documents_args(ctx context.Contex
return nil, err return nil, err
} }
args["orderBy"] = arg4 args["orderBy"] = arg4
arg5, err := ec.field_Organization_documents_argsFilter(ctx, rawArgs)
if err != nil {
return nil, err
}
args["filter"] = arg5
return args, nil return args, nil
} }
func (ec *executionContext) field_Organization_documents_argsFirst( func (ec *executionContext) field_Organization_documents_argsFirst(
@@ -9947,6 +10029,19 @@ func (ec *executionContext) field_Organization_documents_argsOrderBy(
return zeroVal, nil return zeroVal, nil
} }
func (ec *executionContext) field_Organization_documents_argsFilter(
ctx context.Context,
rawArgs map[string]any,
) (*types.DocumentFilter, error) {
ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("filter"))
if tmp, ok := rawArgs["filter"]; ok {
return ec.unmarshalODocumentFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDocumentFilter(ctx, tmp)
}
var zeroVal *types.DocumentFilter
return zeroVal, nil
}
func (ec *executionContext) field_Organization_frameworks_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { func (ec *executionContext) field_Organization_frameworks_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
var err error var err error
args := map[string]any{} args := map[string]any{}
@@ -10070,6 +10165,11 @@ func (ec *executionContext) field_Organization_measures_args(ctx context.Context
return nil, err return nil, err
} }
args["orderBy"] = arg4 args["orderBy"] = arg4
arg5, err := ec.field_Organization_measures_argsFilter(ctx, rawArgs)
if err != nil {
return nil, err
}
args["filter"] = arg5
return args, nil return args, nil
} }
func (ec *executionContext) field_Organization_measures_argsFirst( func (ec *executionContext) field_Organization_measures_argsFirst(
@@ -10137,6 +10237,19 @@ func (ec *executionContext) field_Organization_measures_argsOrderBy(
return zeroVal, nil return zeroVal, nil
} }
func (ec *executionContext) field_Organization_measures_argsFilter(
ctx context.Context,
rawArgs map[string]any,
) (*types.MeasureFilter, error) {
ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("filter"))
if tmp, ok := rawArgs["filter"]; ok {
return ec.unmarshalOMeasureFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐMeasureFilter(ctx, tmp)
}
var zeroVal *types.MeasureFilter
return zeroVal, nil
}
func (ec *executionContext) field_Organization_peoples_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { func (ec *executionContext) field_Organization_peoples_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
var err error var err error
args := map[string]any{} args := map[string]any{}
@@ -10260,6 +10373,11 @@ func (ec *executionContext) field_Organization_risks_args(ctx context.Context, r
return nil, err return nil, err
} }
args["orderBy"] = arg4 args["orderBy"] = arg4
arg5, err := ec.field_Organization_risks_argsFilter(ctx, rawArgs)
if err != nil {
return nil, err
}
args["filter"] = arg5
return args, nil return args, nil
} }
func (ec *executionContext) field_Organization_risks_argsFirst( func (ec *executionContext) field_Organization_risks_argsFirst(
@@ -10327,6 +10445,19 @@ func (ec *executionContext) field_Organization_risks_argsOrderBy(
return zeroVal, nil return zeroVal, nil
} }
func (ec *executionContext) field_Organization_risks_argsFilter(
ctx context.Context,
rawArgs map[string]any,
) (*types.RiskFilter, error) {
ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("filter"))
if tmp, ok := rawArgs["filter"]; ok {
return ec.unmarshalORiskFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐRiskFilter(ctx, tmp)
}
var zeroVal *types.RiskFilter
return zeroVal, nil
}
func (ec *executionContext) field_Organization_tasks_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { func (ec *executionContext) field_Organization_tasks_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
var err error var err error
args := map[string]any{} args := map[string]any{}
@@ -10799,6 +10930,11 @@ func (ec *executionContext) field_Risk_documents_args(ctx context.Context, rawAr
return nil, err return nil, err
} }
args["orderBy"] = arg4 args["orderBy"] = arg4
arg5, err := ec.field_Risk_documents_argsFilter(ctx, rawArgs)
if err != nil {
return nil, err
}
args["filter"] = arg5
return args, nil return args, nil
} }
func (ec *executionContext) field_Risk_documents_argsFirst( func (ec *executionContext) field_Risk_documents_argsFirst(
@@ -10866,6 +11002,19 @@ func (ec *executionContext) field_Risk_documents_argsOrderBy(
return zeroVal, nil return zeroVal, nil
} }
func (ec *executionContext) field_Risk_documents_argsFilter(
ctx context.Context,
rawArgs map[string]any,
) (*types.DocumentFilter, error) {
ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("filter"))
if tmp, ok := rawArgs["filter"]; ok {
return ec.unmarshalODocumentFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDocumentFilter(ctx, tmp)
}
var zeroVal *types.DocumentFilter
return zeroVal, nil
}
func (ec *executionContext) field_Risk_measures_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { func (ec *executionContext) field_Risk_measures_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
var err error var err error
args := map[string]any{} args := map[string]any{}
@@ -10894,6 +11043,11 @@ func (ec *executionContext) field_Risk_measures_args(ctx context.Context, rawArg
return nil, err return nil, err
} }
args["orderBy"] = arg4 args["orderBy"] = arg4
arg5, err := ec.field_Risk_measures_argsFilter(ctx, rawArgs)
if err != nil {
return nil, err
}
args["filter"] = arg5
return args, nil return args, nil
} }
func (ec *executionContext) field_Risk_measures_argsFirst( func (ec *executionContext) field_Risk_measures_argsFirst(
@@ -10961,6 +11115,19 @@ func (ec *executionContext) field_Risk_measures_argsOrderBy(
return zeroVal, nil return zeroVal, nil
} }
func (ec *executionContext) field_Risk_measures_argsFilter(
ctx context.Context,
rawArgs map[string]any,
) (*types.MeasureFilter, error) {
ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("filter"))
if tmp, ok := rawArgs["filter"]; ok {
return ec.unmarshalOMeasureFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐMeasureFilter(ctx, tmp)
}
var zeroVal *types.MeasureFilter
return zeroVal, nil
}
func (ec *executionContext) field_Task_evidences_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { func (ec *executionContext) field_Task_evidences_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) {
var err error var err error
args := map[string]any{} args := map[string]any{}
@@ -13121,7 +13288,7 @@ func (ec *executionContext) _Control_measures(ctx context.Context, field graphql
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Control().Measures(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.MeasureOrderBy)) return ec.resolvers.Control().Measures(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.MeasureOrderBy), fc.Args["filter"].(*types.MeasureFilter))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -13182,7 +13349,7 @@ func (ec *executionContext) _Control_documents(ctx context.Context, field graphq
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Control().Documents(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.DocumentOrderBy)) return ec.resolvers.Control().Documents(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.DocumentOrderBy), fc.Args["filter"].(*types.DocumentFilter))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -20573,7 +20740,7 @@ func (ec *executionContext) _Measure_risks(ctx context.Context, field graphql.Co
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Measure().Risks(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.RiskOrderBy)) return ec.resolvers.Measure().Risks(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.RiskOrderBy), fc.Args["filter"].(*types.RiskFilter))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -25231,7 +25398,7 @@ func (ec *executionContext) _Organization_documents(ctx context.Context, field g
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Organization().Documents(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.DocumentOrderBy)) return ec.resolvers.Organization().Documents(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.DocumentOrderBy), fc.Args["filter"].(*types.DocumentFilter))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -25292,7 +25459,7 @@ func (ec *executionContext) _Organization_measures(ctx context.Context, field gr
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Organization().Measures(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.MeasureOrderBy)) return ec.resolvers.Organization().Measures(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.MeasureOrderBy), fc.Args["filter"].(*types.MeasureFilter))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -25353,7 +25520,7 @@ func (ec *executionContext) _Organization_risks(ctx context.Context, field graph
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Organization().Risks(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.RiskOrderBy)) return ec.resolvers.Organization().Risks(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.RiskOrderBy), fc.Args["filter"].(*types.RiskFilter))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -27921,7 +28088,7 @@ func (ec *executionContext) _Risk_measures(ctx context.Context, field graphql.Co
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Risk().Measures(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.MeasureOrderBy)) return ec.resolvers.Risk().Measures(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.MeasureOrderBy), fc.Args["filter"].(*types.MeasureFilter))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -27982,7 +28149,7 @@ func (ec *executionContext) _Risk_documents(ctx context.Context, field graphql.C
}() }()
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) {
ctx = rctx // use context from middleware stack in children ctx = rctx // use context from middleware stack in children
return ec.resolvers.Risk().Documents(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.DocumentOrderBy)) return ec.resolvers.Risk().Documents(rctx, obj, fc.Args["first"].(*int), fc.Args["after"].(*page.CursorKey), fc.Args["last"].(*int), fc.Args["before"].(*page.CursorKey), fc.Args["orderBy"].(*types.DocumentOrderBy), fc.Args["filter"].(*types.DocumentFilter))
}) })
if err != nil { if err != nil {
ec.Error(ctx, err) ec.Error(ctx, err)
@@ -37564,6 +37731,33 @@ func (ec *executionContext) unmarshalInputDeleteVendorInput(ctx context.Context,
return it, nil return it, nil
} }
func (ec *executionContext) unmarshalInputDocumentFilter(ctx context.Context, obj any) (types.DocumentFilter, error) {
var it types.DocumentFilter
asMap := map[string]any{}
for k, v := range obj.(map[string]any) {
asMap[k] = v
}
fieldsInOrder := [...]string{"query"}
for _, k := range fieldsInOrder {
v, ok := asMap[k]
if !ok {
continue
}
switch k {
case "query":
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("query"))
data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
it.Query = data
}
}
return it, nil
}
func (ec *executionContext) unmarshalInputDocumentOrder(ctx context.Context, obj any) (types.DocumentOrderBy, error) { func (ec *executionContext) unmarshalInputDocumentOrder(ctx context.Context, obj any) (types.DocumentOrderBy, error) {
var it types.DocumentOrderBy var it types.DocumentOrderBy
asMap := map[string]any{} asMap := map[string]any{}
@@ -37972,6 +38166,33 @@ func (ec *executionContext) unmarshalInputInviteUserInput(ctx context.Context, o
return it, nil return it, nil
} }
func (ec *executionContext) unmarshalInputMeasureFilter(ctx context.Context, obj any) (types.MeasureFilter, error) {
var it types.MeasureFilter
asMap := map[string]any{}
for k, v := range obj.(map[string]any) {
asMap[k] = v
}
fieldsInOrder := [...]string{"query"}
for _, k := range fieldsInOrder {
v, ok := asMap[k]
if !ok {
continue
}
switch k {
case "query":
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("query"))
data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
it.Query = data
}
}
return it, nil
}
func (ec *executionContext) unmarshalInputMeasureOrder(ctx context.Context, obj any) (types.MeasureOrderBy, error) { func (ec *executionContext) unmarshalInputMeasureOrder(ctx context.Context, obj any) (types.MeasureOrderBy, error) {
var it types.MeasureOrderBy var it types.MeasureOrderBy
asMap := map[string]any{} asMap := map[string]any{}
@@ -38224,6 +38445,33 @@ func (ec *executionContext) unmarshalInputRequestSignatureInput(ctx context.Cont
return it, nil return it, nil
} }
func (ec *executionContext) unmarshalInputRiskFilter(ctx context.Context, obj any) (types.RiskFilter, error) {
var it types.RiskFilter
asMap := map[string]any{}
for k, v := range obj.(map[string]any) {
asMap[k] = v
}
fieldsInOrder := [...]string{"query"}
for _, k := range fieldsInOrder {
v, ok := asMap[k]
if !ok {
continue
}
switch k {
case "query":
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("query"))
data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
it.Query = data
}
}
return it, nil
}
func (ec *executionContext) unmarshalInputRiskOrder(ctx context.Context, obj any) (types.RiskOrderBy, error) { func (ec *executionContext) unmarshalInputRiskOrder(ctx context.Context, obj any) (types.RiskOrderBy, error) {
var it types.RiskOrderBy var it types.RiskOrderBy
asMap := map[string]any{} asMap := map[string]any{}
@@ -52473,6 +52721,14 @@ func (ec *executionContext) unmarshalODatumOrder2ᚖgithubᚗcomᚋgetproboᚋpr
return &res, graphql.ErrorOnPath(ctx, err) return &res, graphql.ErrorOnPath(ctx, err)
} }
func (ec *executionContext) unmarshalODocumentFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDocumentFilter(ctx context.Context, v any) (*types.DocumentFilter, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalInputDocumentFilter(ctx, v)
return &res, graphql.ErrorOnPath(ctx, err)
}
func (ec *executionContext) unmarshalODocumentOrder2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDocumentOrderBy(ctx context.Context, v any) (*types.DocumentOrderBy, error) { func (ec *executionContext) unmarshalODocumentOrder2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDocumentOrderBy(ctx context.Context, v any) (*types.DocumentOrderBy, error) {
if v == nil { if v == nil {
return nil, nil return nil, nil
@@ -52680,6 +52936,14 @@ func (ec *executionContext) marshalOMeasure2ᚖgithubᚗcomᚋgetproboᚋprobo
return ec._Measure(ctx, sel, v) return ec._Measure(ctx, sel, v)
} }
func (ec *executionContext) unmarshalOMeasureFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐMeasureFilter(ctx context.Context, v any) (*types.MeasureFilter, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalInputMeasureFilter(ctx, v)
return &res, graphql.ErrorOnPath(ctx, err)
}
func (ec *executionContext) unmarshalOMeasureOrder2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐMeasureOrderBy(ctx context.Context, v any) (*types.MeasureOrderBy, error) { func (ec *executionContext) unmarshalOMeasureOrder2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐMeasureOrderBy(ctx context.Context, v any) (*types.MeasureOrderBy, error) {
if v == nil { if v == nil {
return nil, nil return nil, nil
@@ -52777,6 +53041,14 @@ func (ec *executionContext) unmarshalOPeopleOrder2ᚖgithubᚗcomᚋgetproboᚋp
return &res, graphql.ErrorOnPath(ctx, err) return &res, graphql.ErrorOnPath(ctx, err)
} }
func (ec *executionContext) unmarshalORiskFilter2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐRiskFilter(ctx context.Context, v any) (*types.RiskFilter, error) {
if v == nil {
return nil, nil
}
res, err := ec.unmarshalInputRiskFilter(ctx, v)
return &res, graphql.ErrorOnPath(ctx, err)
}
func (ec *executionContext) unmarshalORiskOrder2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐRiskOrderBy(ctx context.Context, v any) (*types.RiskOrderBy, error) { func (ec *executionContext) unmarshalORiskOrder2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐRiskOrderBy(ctx context.Context, v any) (*types.RiskOrderBy, error) {
if v == nil { if v == nil {
return nil, nil return nil, nil

View File

@@ -548,6 +548,10 @@ type DocumentEdge struct {
Node *Document `json:"node"` Node *Document `json:"node"`
} }
type DocumentFilter struct {
Query *string `json:"query,omitempty"`
}
type DocumentVersion struct { type DocumentVersion struct {
ID gid.GID `json:"id"` ID gid.GID `json:"id"`
Document *Document `json:"document"` Document *Document `json:"document"`
@@ -745,6 +749,10 @@ type MeasureEdge struct {
Node *Measure `json:"node"` Node *Measure `json:"node"`
} }
type MeasureFilter struct {
Query *string `json:"query,omitempty"`
}
type Mutation struct { type Mutation struct {
} }
@@ -896,6 +904,10 @@ type RiskEdge struct {
Node *Risk `json:"node"` Node *Risk `json:"node"`
} }
type RiskFilter struct {
Query *string `json:"query,omitempty"`
}
type SendSigningNotificationsInput struct { type SendSigningNotificationsInput struct {
OrganizationID gid.GID `json:"organizationId"` OrganizationID gid.GID `json:"organizationId"`
} }

View File

@@ -108,7 +108,7 @@ func (r *controlResolver) Framework(ctx context.Context, obj *types.Control) (*t
} }
// Measures is the resolver for the measures field. // Measures is the resolver for the measures field.
func (r *controlResolver) Measures(ctx context.Context, obj *types.Control, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) (*types.MeasureConnection, error) { func (r *controlResolver) Measures(ctx context.Context, obj *types.Control, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) (*types.MeasureConnection, error) {
svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID()) svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID())
pageOrderBy := page.OrderBy[coredata.MeasureOrderField]{ pageOrderBy := page.OrderBy[coredata.MeasureOrderField]{
@@ -124,7 +124,12 @@ func (r *controlResolver) Measures(ctx context.Context, obj *types.Control, firs
cursor := types.NewCursor(first, after, last, before, pageOrderBy) cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := svc.Measures.ListForControlID(ctx, obj.ID, cursor) var measureFilter = coredata.NewMeasureFilter(nil)
if filter != nil {
measureFilter = coredata.NewMeasureFilter(filter.Query)
}
page, err := svc.Measures.ListForControlID(ctx, obj.ID, cursor, measureFilter)
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot list measures: %w", err) return nil, fmt.Errorf("cannot list measures: %w", err)
} }
@@ -133,7 +138,7 @@ func (r *controlResolver) Measures(ctx context.Context, obj *types.Control, firs
} }
// Documents is the resolver for the documents field. // Documents is the resolver for the documents field.
func (r *controlResolver) Documents(ctx context.Context, obj *types.Control, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) (*types.DocumentConnection, error) { func (r *controlResolver) Documents(ctx context.Context, obj *types.Control, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) (*types.DocumentConnection, error) {
svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID()) svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID())
pageOrderBy := page.OrderBy[coredata.DocumentOrderField]{ pageOrderBy := page.OrderBy[coredata.DocumentOrderField]{
@@ -149,7 +154,12 @@ func (r *controlResolver) Documents(ctx context.Context, obj *types.Control, fir
cursor := types.NewCursor(first, after, last, before, pageOrderBy) cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := svc.Documents.ListForControlID(ctx, obj.ID, cursor) var documentFilter = coredata.NewDocumentFilter(nil)
if filter != nil {
documentFilter = coredata.NewDocumentFilter(filter.Query)
}
page, err := svc.Documents.ListForControlID(ctx, obj.ID, cursor, documentFilter)
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot list documents: %w", err) return nil, fmt.Errorf("cannot list documents: %w", err)
} }
@@ -585,7 +595,7 @@ func (r *measureResolver) Tasks(ctx context.Context, obj *types.Measure, first *
} }
// Risks is the resolver for the risks field. // Risks is the resolver for the risks field.
func (r *measureResolver) Risks(ctx context.Context, obj *types.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy) (*types.RiskConnection, error) { func (r *measureResolver) Risks(ctx context.Context, obj *types.Measure, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy, filter *types.RiskFilter) (*types.RiskConnection, error) {
svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID()) svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID())
pageOrderBy := page.OrderBy[coredata.RiskOrderField]{ pageOrderBy := page.OrderBy[coredata.RiskOrderField]{
@@ -601,7 +611,12 @@ func (r *measureResolver) Risks(ctx context.Context, obj *types.Measure, first *
cursor := types.NewCursor(first, after, last, before, pageOrderBy) cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := svc.Risks.ListForMeasureID(ctx, obj.ID, cursor) var riskFilter = coredata.NewRiskFilter(nil)
if filter != nil {
riskFilter = coredata.NewRiskFilter(filter.Query)
}
page, err := svc.Risks.ListForMeasureID(ctx, obj.ID, cursor, riskFilter)
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot list measure risks: %w", err) return nil, fmt.Errorf("cannot list measure risks: %w", err)
} }
@@ -2055,7 +2070,7 @@ func (r *organizationResolver) Peoples(ctx context.Context, obj *types.Organizat
} }
// Documents is the resolver for the documents field. // Documents is the resolver for the documents field.
func (r *organizationResolver) Documents(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) (*types.DocumentConnection, error) { func (r *organizationResolver) Documents(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) (*types.DocumentConnection, error) {
svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID()) svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID())
pageOrderBy := page.OrderBy[coredata.DocumentOrderField]{ pageOrderBy := page.OrderBy[coredata.DocumentOrderField]{
@@ -2071,7 +2086,12 @@ func (r *organizationResolver) Documents(ctx context.Context, obj *types.Organiz
cursor := types.NewCursor(first, after, last, before, pageOrderBy) cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := svc.Documents.ListByOrganizationID(ctx, obj.ID, cursor) var documentFilter = coredata.NewDocumentFilter(nil)
if filter != nil {
documentFilter = coredata.NewDocumentFilter(filter.Query)
}
page, err := svc.Documents.ListByOrganizationID(ctx, obj.ID, cursor, documentFilter)
if err != nil { if err != nil {
panic(fmt.Errorf("cannot list organization documents: %w", err)) panic(fmt.Errorf("cannot list organization documents: %w", err))
} }
@@ -2080,7 +2100,7 @@ func (r *organizationResolver) Documents(ctx context.Context, obj *types.Organiz
} }
// Measures is the resolver for the measures field. // Measures is the resolver for the measures field.
func (r *organizationResolver) Measures(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) (*types.MeasureConnection, error) { func (r *organizationResolver) Measures(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) (*types.MeasureConnection, error) {
svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID()) svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID())
pageOrderBy := page.OrderBy[coredata.MeasureOrderField]{ pageOrderBy := page.OrderBy[coredata.MeasureOrderField]{
@@ -2096,7 +2116,12 @@ func (r *organizationResolver) Measures(ctx context.Context, obj *types.Organiza
cursor := types.NewCursor(first, after, last, before, pageOrderBy) cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := svc.Measures.ListForOrganizationID(ctx, obj.ID, cursor) var measureFilter = coredata.NewMeasureFilter(nil)
if filter != nil {
measureFilter = coredata.NewMeasureFilter(filter.Query)
}
page, err := svc.Measures.ListForOrganizationID(ctx, obj.ID, cursor, measureFilter)
if err != nil { if err != nil {
panic(fmt.Errorf("cannot list organization measures: %w", err)) panic(fmt.Errorf("cannot list organization measures: %w", err))
} }
@@ -2105,7 +2130,7 @@ func (r *organizationResolver) Measures(ctx context.Context, obj *types.Organiza
} }
// Risks is the resolver for the risks field. // Risks is the resolver for the risks field.
func (r *organizationResolver) Risks(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy) (*types.RiskConnection, error) { func (r *organizationResolver) Risks(ctx context.Context, obj *types.Organization, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.RiskOrderBy, filter *types.RiskFilter) (*types.RiskConnection, error) {
svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID()) svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID())
pageOrderBy := page.OrderBy[coredata.RiskOrderField]{ pageOrderBy := page.OrderBy[coredata.RiskOrderField]{
@@ -2121,7 +2146,12 @@ func (r *organizationResolver) Risks(ctx context.Context, obj *types.Organizatio
cursor := types.NewCursor(first, after, last, before, pageOrderBy) cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := svc.Risks.ListForOrganizationID(ctx, obj.ID, cursor) var riskFilter = coredata.NewRiskFilter(nil)
if filter != nil {
riskFilter = coredata.NewRiskFilter(filter.Query)
}
page, err := svc.Risks.ListForOrganizationID(ctx, obj.ID, cursor, riskFilter)
if err != nil { if err != nil {
panic(fmt.Errorf("cannot list organization risks: %w", err)) panic(fmt.Errorf("cannot list organization risks: %w", err))
} }
@@ -2363,7 +2393,7 @@ func (r *riskResolver) Organization(ctx context.Context, obj *types.Risk) (*type
} }
// Measures is the resolver for the measures field. // Measures is the resolver for the measures field.
func (r *riskResolver) Measures(ctx context.Context, obj *types.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy) (*types.MeasureConnection, error) { func (r *riskResolver) Measures(ctx context.Context, obj *types.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.MeasureOrderBy, filter *types.MeasureFilter) (*types.MeasureConnection, error) {
svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID()) svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID())
pageOrderBy := page.OrderBy[coredata.MeasureOrderField]{ pageOrderBy := page.OrderBy[coredata.MeasureOrderField]{
@@ -2379,7 +2409,12 @@ func (r *riskResolver) Measures(ctx context.Context, obj *types.Risk, first *int
cursor := types.NewCursor(first, after, last, before, pageOrderBy) cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := svc.Measures.ListForRiskID(ctx, obj.ID, cursor) var measureFilter = coredata.NewMeasureFilter(nil)
if filter != nil {
measureFilter = coredata.NewMeasureFilter(filter.Query)
}
page, err := svc.Measures.ListForRiskID(ctx, obj.ID, cursor, measureFilter)
if err != nil { if err != nil {
panic(fmt.Errorf("cannot list risk measures: %w", err)) panic(fmt.Errorf("cannot list risk measures: %w", err))
} }
@@ -2388,7 +2423,7 @@ func (r *riskResolver) Measures(ctx context.Context, obj *types.Risk, first *int
} }
// Documents is the resolver for the documents field. // Documents is the resolver for the documents field.
func (r *riskResolver) Documents(ctx context.Context, obj *types.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy) (*types.DocumentConnection, error) { func (r *riskResolver) Documents(ctx context.Context, obj *types.Risk, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.DocumentOrderBy, filter *types.DocumentFilter) (*types.DocumentConnection, error) {
svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID()) svc := GetTenantService(ctx, r.proboSvc, obj.ID.TenantID())
pageOrderBy := page.OrderBy[coredata.DocumentOrderField]{ pageOrderBy := page.OrderBy[coredata.DocumentOrderField]{
@@ -2404,7 +2439,12 @@ func (r *riskResolver) Documents(ctx context.Context, obj *types.Risk, first *in
cursor := types.NewCursor(first, after, last, before, pageOrderBy) cursor := types.NewCursor(first, after, last, before, pageOrderBy)
page, err := svc.Documents.ListForRiskID(ctx, obj.ID, cursor) var documentFilter = coredata.NewDocumentFilter(nil)
if filter != nil {
documentFilter = coredata.NewDocumentFilter(filter.Query)
}
page, err := svc.Documents.ListForRiskID(ctx, obj.ID, cursor, documentFilter)
if err != nil { if err != nil {
panic(fmt.Errorf("cannot list risk documents: %w", err)) panic(fmt.Errorf("cannot list risk documents: %w", err))
} }