Allow to filter measures by state
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
@@ -21,30 +21,45 @@ import (
|
||||
type (
|
||||
MeasureFilter struct {
|
||||
query *string
|
||||
state *MeasureState
|
||||
}
|
||||
)
|
||||
|
||||
func NewMeasureFilter(query *string) *MeasureFilter {
|
||||
func NewMeasureFilter(query *string, state *MeasureState) *MeasureFilter {
|
||||
return &MeasureFilter{
|
||||
query: query,
|
||||
state: state,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *MeasureFilter) SQLArguments() pgx.NamedArgs {
|
||||
return pgx.NamedArgs{
|
||||
"query": f.query,
|
||||
"state": f.state,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *MeasureFilter) SQLFragment() string {
|
||||
if f.query == nil || *f.query == "" {
|
||||
return "TRUE"
|
||||
}
|
||||
|
||||
return `
|
||||
search_vector @@ (
|
||||
SELECT to_tsquery('simple', string_agg(lexeme || ':*', ' & '))
|
||||
FROM unnest(regexp_split_to_array(trim(@query), '\s+')) AS lexeme
|
||||
(
|
||||
CASE
|
||||
WHEN @query::text IS NULL OR @query::text = '' THEN
|
||||
TRUE
|
||||
ELSE
|
||||
search_vector @@ (
|
||||
SELECT to_tsquery('simple', string_agg(lexeme || ':*', ' & '))
|
||||
FROM unnest(regexp_split_to_array(trim(@query), '\s+')) AS lexeme
|
||||
)
|
||||
END
|
||||
)
|
||||
AND
|
||||
(
|
||||
CASE
|
||||
WHEN @state::mitigation_state IS NULL THEN
|
||||
TRUE
|
||||
ELSE
|
||||
state = @state::mitigation_state
|
||||
END
|
||||
)
|
||||
`
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ func (s FrameworkService) Export(
|
||||
Direction: page.OrderDirectionAsc,
|
||||
},
|
||||
),
|
||||
coredata.NewMeasureFilter(nil),
|
||||
coredata.NewMeasureFilter(nil, nil),
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot load measures: %w", err)
|
||||
@@ -603,7 +603,7 @@ func (s FrameworkService) StateOfApplicability(ctx context.Context, frameworkID
|
||||
Direction: page.OrderDirectionAsc,
|
||||
},
|
||||
),
|
||||
coredata.NewMeasureFilter(nil),
|
||||
coredata.NewMeasureFilter(nil, nil),
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot load measures: %w", err)
|
||||
|
||||
@@ -1425,6 +1425,7 @@ input DocumentFilter {
|
||||
|
||||
input MeasureFilter {
|
||||
query: String
|
||||
state: MeasureState
|
||||
}
|
||||
|
||||
input RiskFilter {
|
||||
|
||||
@@ -10142,6 +10142,7 @@ input DocumentFilter {
|
||||
|
||||
input MeasureFilter {
|
||||
query: String
|
||||
state: MeasureState
|
||||
}
|
||||
|
||||
input RiskFilter {
|
||||
@@ -69569,7 +69570,7 @@ func (ec *executionContext) unmarshalInputMeasureFilter(ctx context.Context, obj
|
||||
asMap[k] = v
|
||||
}
|
||||
|
||||
fieldsInOrder := [...]string{"query"}
|
||||
fieldsInOrder := [...]string{"query", "state"}
|
||||
for _, k := range fieldsInOrder {
|
||||
v, ok := asMap[k]
|
||||
if !ok {
|
||||
@@ -69583,6 +69584,13 @@ func (ec *executionContext) unmarshalInputMeasureFilter(ctx context.Context, obj
|
||||
return it, err
|
||||
}
|
||||
it.Query = data
|
||||
case "state":
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("state"))
|
||||
data, err := ec.unmarshalOMeasureState2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋcoredataᚐMeasureState(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
it.State = data
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1220,7 +1220,8 @@ type MeasureEdge struct {
|
||||
}
|
||||
|
||||
type MeasureFilter struct {
|
||||
Query *string `json:"query,omitempty"`
|
||||
Query *string `json:"query,omitempty"`
|
||||
State *coredata.MeasureState `json:"state,omitempty"`
|
||||
}
|
||||
|
||||
type Mutation struct {
|
||||
|
||||
@@ -314,9 +314,9 @@ func (r *controlResolver) Measures(ctx context.Context, obj *types.Control, firs
|
||||
|
||||
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||
|
||||
var measureFilter = coredata.NewMeasureFilter(nil)
|
||||
var measureFilter = coredata.NewMeasureFilter(nil, nil)
|
||||
if filter != nil {
|
||||
measureFilter = coredata.NewMeasureFilter(filter.Query)
|
||||
measureFilter = coredata.NewMeasureFilter(filter.Query, filter.State)
|
||||
}
|
||||
|
||||
page, err := prb.Measures.ListForControlID(ctx, obj.ID, cursor, measureFilter)
|
||||
@@ -3709,9 +3709,9 @@ func (r *organizationResolver) Measures(ctx context.Context, obj *types.Organiza
|
||||
|
||||
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||
|
||||
var measureFilter = coredata.NewMeasureFilter(nil)
|
||||
var measureFilter = coredata.NewMeasureFilter(nil, nil)
|
||||
if filter != nil {
|
||||
measureFilter = coredata.NewMeasureFilter(filter.Query)
|
||||
measureFilter = coredata.NewMeasureFilter(filter.Query, filter.State)
|
||||
}
|
||||
|
||||
page, err := prb.Measures.ListForOrganizationID(ctx, obj.ID, cursor, measureFilter)
|
||||
@@ -4353,9 +4353,9 @@ func (r *riskResolver) Measures(ctx context.Context, obj *types.Risk, first *int
|
||||
|
||||
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||
|
||||
var measureFilter = coredata.NewMeasureFilter(nil)
|
||||
var measureFilter = coredata.NewMeasureFilter(nil, nil)
|
||||
if filter != nil {
|
||||
measureFilter = coredata.NewMeasureFilter(filter.Query)
|
||||
measureFilter = coredata.NewMeasureFilter(filter.Query, filter.State)
|
||||
}
|
||||
|
||||
page, err := prb.Measures.ListForRiskID(ctx, obj.ID, cursor, measureFilter)
|
||||
|
||||
Reference in New Issue
Block a user