Allow to filter measures by state

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2025-10-13 21:21:18 +02:00
parent 579a4ea783
commit 344b340d1a
6 changed files with 43 additions and 18 deletions

View File

@@ -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
)
`
}