Change state of applicability

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2026-01-02 15:04:11 +01:00
parent c60e19a7a8
commit 4ed3f5a067
105 changed files with 18351 additions and 284 deletions

View File

@@ -136,3 +136,56 @@ WHERE
*cms = controlMeasures
return nil
}
type ControlWithRisk struct {
ControlID gid.GID `db:"control_id"`
}
type ControlsWithRisk []*ControlWithRisk
func (cwrs *ControlsWithRisk) LoadByControlIDs(
ctx context.Context,
conn pg.Conn,
scope Scoper,
controlIDs []gid.GID,
) error {
q := `
WITH control_risks AS (
SELECT DISTINCT
cm.control_id,
rm.risk_id,
r.tenant_id
FROM
controls_measures cm
INNER JOIN
risks_measures rm ON cm.measure_id = rm.measure_id
INNER JOIN
risks r ON rm.risk_id = r.id
WHERE
cm.control_id = ANY(@control_ids)
)
SELECT DISTINCT
control_id
FROM
control_risks
WHERE
%s
`
q = fmt.Sprintf(q, scope.SQLFragment())
args := pgx.NamedArgs{"control_ids": controlIDs}
maps.Copy(args, scope.SQLArguments())
rows, err := conn.Query(ctx, q, args)
if err != nil {
return fmt.Errorf("cannot query control risks: %w", err)
}
controlsWithRisk, err := pgx.CollectRows(rows, pgx.RowToAddrOfStructByName[ControlWithRisk])
if err != nil {
return fmt.Errorf("cannot collect control risks: %w", err)
}
*cwrs = controlsWithRisk
return nil
}