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 (
|
type (
|
||||||
MeasureFilter struct {
|
MeasureFilter struct {
|
||||||
query *string
|
query *string
|
||||||
|
state *MeasureState
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewMeasureFilter(query *string) *MeasureFilter {
|
func NewMeasureFilter(query *string, state *MeasureState) *MeasureFilter {
|
||||||
return &MeasureFilter{
|
return &MeasureFilter{
|
||||||
query: query,
|
query: query,
|
||||||
|
state: state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *MeasureFilter) SQLArguments() pgx.NamedArgs {
|
func (f *MeasureFilter) SQLArguments() pgx.NamedArgs {
|
||||||
return pgx.NamedArgs{
|
return pgx.NamedArgs{
|
||||||
"query": f.query,
|
"query": f.query,
|
||||||
|
"state": f.state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *MeasureFilter) SQLFragment() string {
|
func (f *MeasureFilter) SQLFragment() string {
|
||||||
if f.query == nil || *f.query == "" {
|
|
||||||
return "TRUE"
|
|
||||||
}
|
|
||||||
|
|
||||||
return `
|
return `
|
||||||
search_vector @@ (
|
(
|
||||||
SELECT to_tsquery('simple', string_agg(lexeme || ':*', ' & '))
|
CASE
|
||||||
FROM unnest(regexp_split_to_array(trim(@query), '\s+')) AS lexeme
|
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,
|
Direction: page.OrderDirectionAsc,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
coredata.NewMeasureFilter(nil),
|
coredata.NewMeasureFilter(nil, nil),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot load measures: %w", err)
|
return fmt.Errorf("cannot load measures: %w", err)
|
||||||
@@ -603,7 +603,7 @@ func (s FrameworkService) StateOfApplicability(ctx context.Context, frameworkID
|
|||||||
Direction: page.OrderDirectionAsc,
|
Direction: page.OrderDirectionAsc,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
coredata.NewMeasureFilter(nil),
|
coredata.NewMeasureFilter(nil, nil),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot load measures: %w", err)
|
return fmt.Errorf("cannot load measures: %w", err)
|
||||||
|
|||||||
@@ -1425,6 +1425,7 @@ input DocumentFilter {
|
|||||||
|
|
||||||
input MeasureFilter {
|
input MeasureFilter {
|
||||||
query: String
|
query: String
|
||||||
|
state: MeasureState
|
||||||
}
|
}
|
||||||
|
|
||||||
input RiskFilter {
|
input RiskFilter {
|
||||||
|
|||||||
@@ -10142,6 +10142,7 @@ input DocumentFilter {
|
|||||||
|
|
||||||
input MeasureFilter {
|
input MeasureFilter {
|
||||||
query: String
|
query: String
|
||||||
|
state: MeasureState
|
||||||
}
|
}
|
||||||
|
|
||||||
input RiskFilter {
|
input RiskFilter {
|
||||||
@@ -69569,7 +69570,7 @@ func (ec *executionContext) unmarshalInputMeasureFilter(ctx context.Context, obj
|
|||||||
asMap[k] = v
|
asMap[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldsInOrder := [...]string{"query"}
|
fieldsInOrder := [...]string{"query", "state"}
|
||||||
for _, k := range fieldsInOrder {
|
for _, k := range fieldsInOrder {
|
||||||
v, ok := asMap[k]
|
v, ok := asMap[k]
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -69583,6 +69584,13 @@ func (ec *executionContext) unmarshalInputMeasureFilter(ctx context.Context, obj
|
|||||||
return it, err
|
return it, err
|
||||||
}
|
}
|
||||||
it.Query = data
|
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 {
|
type MeasureFilter struct {
|
||||||
Query *string `json:"query,omitempty"`
|
Query *string `json:"query,omitempty"`
|
||||||
|
State *coredata.MeasureState `json:"state,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mutation struct {
|
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)
|
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||||
|
|
||||||
var measureFilter = coredata.NewMeasureFilter(nil)
|
var measureFilter = coredata.NewMeasureFilter(nil, nil)
|
||||||
if filter != 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)
|
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)
|
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||||
|
|
||||||
var measureFilter = coredata.NewMeasureFilter(nil)
|
var measureFilter = coredata.NewMeasureFilter(nil, nil)
|
||||||
if filter != 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)
|
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)
|
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||||
|
|
||||||
var measureFilter = coredata.NewMeasureFilter(nil)
|
var measureFilter = coredata.NewMeasureFilter(nil, nil)
|
||||||
if filter != 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)
|
page, err := prb.Measures.ListForRiskID(ctx, obj.ID, cursor, measureFilter)
|
||||||
|
|||||||
Reference in New Issue
Block a user