66 lines
2.0 KiB
Go
66 lines
2.0 KiB
Go
// VOR-05: Liste aller Akten mit Status- und Verantwortlicher-Filter fuer
|
|
// die workflow-eigene Uebersicht. Leerer Filterwert bedeutet "nicht
|
|
// filtern" auf dieser Dimension (Akzeptanzkriterium 1).
|
|
package caseobj
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
)
|
|
|
|
// List liefert alle Akten dieses Mandanten, optional nach Status und/oder
|
|
// Verantwortlichem gefiltert. Der Status kommt aus der Statemachine-Engine
|
|
// (workflow_instances), nicht aus case_files selbst.
|
|
func (s *Service) List(ctx context.Context, status, responsible string) ([]Case, error) {
|
|
rows, err := s.pool.Query(ctx, `
|
|
SELECT cf.id, cf.instance_id, cf.case_number, cf.responsible, cf.created_at, wi.state
|
|
FROM case_files cf
|
|
JOIN workflow_instances wi ON wi.id = cf.instance_id
|
|
WHERE ($1 = '' OR wi.state = $1)
|
|
AND ($2 = '' OR cf.responsible = $2)
|
|
ORDER BY cf.created_at DESC
|
|
`, status, responsible)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("caseobj: liste lesen: %w", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
var out []Case
|
|
var ids []string
|
|
for rows.Next() {
|
|
var c Case
|
|
if err := rows.Scan(&c.ID, &c.InstanceID, &c.CaseNumber, &c.Responsible, &c.CreatedAt, &c.Status); err != nil {
|
|
return nil, fmt.Errorf("caseobj: liste scannen: %w", err)
|
|
}
|
|
out = append(out, c)
|
|
ids = append(ids, c.ID)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, fmt.Errorf("caseobj: liste iterieren: %w", err)
|
|
}
|
|
|
|
for i, id := range ids {
|
|
refRows, err := s.pool.Query(ctx, `
|
|
SELECT module_name, object_type, object_id FROM case_references
|
|
WHERE case_id = $1 ORDER BY created_at ASC
|
|
`, id)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("caseobj: referenzen der liste lesen: %w", err)
|
|
}
|
|
for refRows.Next() {
|
|
var r Reference
|
|
if err := refRows.Scan(&r.ModuleName, &r.ObjectType, &r.ObjectID); err != nil {
|
|
refRows.Close()
|
|
return nil, fmt.Errorf("caseobj: referenz der liste lesen: %w", err)
|
|
}
|
|
out[i].References = append(out[i].References, r)
|
|
}
|
|
refErr := refRows.Err()
|
|
refRows.Close()
|
|
if refErr != nil {
|
|
return nil, fmt.Errorf("caseobj: referenzen der liste iterieren: %w", err)
|
|
}
|
|
}
|
|
return out, nil
|
|
}
|