Files
query-orchestration/internal/query/result/processor/parse.go
T

130 lines
2.6 KiB
Go
Raw Normal View History

package resultprocessor
2024-12-20 17:35:33 +00:00
import (
2024-12-24 12:47:40 +00:00
"fmt"
2025-03-05 12:05:46 +00:00
2024-12-24 17:13:48 +00:00
"queryorchestration/internal/database/repository"
2025-01-20 13:31:48 +00:00
"github.com/google/uuid"
2025-01-03 13:41:07 +00:00
)
2024-12-20 17:35:33 +00:00
2025-01-03 10:35:42 +00:00
func ParseDBNullType(qType repository.NullQuerytype) (Type, error) {
2024-12-24 12:47:40 +00:00
if !qType.Valid {
return TypeJsonExtractor, fmt.Errorf("invalid database query type")
}
2025-01-03 10:35:42 +00:00
return ParseDBType(qType.Querytype)
}
func ParseDBType(qType repository.Querytype) (Type, error) {
switch qType {
2024-12-20 17:35:33 +00:00
case repository.QuerytypeJsonExtractor:
2024-12-24 12:47:40 +00:00
return TypeJsonExtractor, nil
2024-12-24 17:13:48 +00:00
case repository.QuerytypeContextFull:
return TypeContextFull, nil
2024-12-20 17:35:33 +00:00
default:
2024-12-24 12:47:40 +00:00
return TypeJsonExtractor, fmt.Errorf("invalid database query type")
2024-12-20 17:35:33 +00:00
}
}
2025-01-06 12:26:28 +00:00
func ToDBQueryType(t Type) (repository.Querytype, error) {
2024-12-20 17:35:33 +00:00
var dbType repository.Querytype
switch t {
2024-12-24 12:47:40 +00:00
case TypeJsonExtractor:
2024-12-20 17:35:33 +00:00
dbType = repository.QuerytypeJsonExtractor
2024-12-24 17:13:48 +00:00
case TypeContextFull:
dbType = repository.QuerytypeContextFull
2024-12-20 17:35:33 +00:00
default:
2025-01-06 12:26:28 +00:00
return repository.QuerytypeContextFull, fmt.Errorf("invalid database query type")
}
return dbType, nil
}
func ToDBQueryTypeArray(t []Type) ([]repository.Querytype, error) {
arr := make([]repository.Querytype, len(t))
for index, value := range t {
v, err := ToDBQueryType(value)
if err != nil {
return nil, err
}
arr[index] = v
}
return arr, nil
}
2025-01-06 12:26:28 +00:00
func ToDBNullQueryType(t Type) (repository.NullQuerytype, error) {
dbType, err := ToDBQueryType(t)
if err != nil {
return repository.NullQuerytype{}, err
2024-12-20 17:35:33 +00:00
}
2024-12-24 12:47:40 +00:00
return repository.NullQuerytype{Querytype: dbType, Valid: true}, nil
2024-12-20 17:35:33 +00:00
}
2025-01-03 13:41:07 +00:00
func ParseDBCollectorQuery(q *repository.ListCollectorQueriesRow) (*Query, error) {
qType, err := ParseDBNullType(q.Querytype)
2025-01-03 13:41:07 +00:00
if err != nil {
return nil, err
}
var reqIds *[]uuid.UUID
if len(q.Requiredids) > 0 {
reqIds = &q.Requiredids
}
2025-01-03 13:41:07 +00:00
return &Query{
ID: *q.Queryid,
Version: *q.Queryversion,
2025-01-03 13:41:07 +00:00
Type: qType,
RequiredQueryIDs: reqIds,
2025-01-03 13:41:07 +00:00
}, nil
}
func ParseFullQuery(qs *repository.Fullactivequery) (*Query, error) {
if qs == nil {
return nil, nil
}
qt, err := ParseDBType(qs.Querytype)
if err != nil {
return nil, err
}
var cfg *string
if qs.Config != nil {
c := string(qs.Config)
cfg = &c
}
var reqIds *[]uuid.UUID
if len(qs.Requiredids) > 0 {
reqIds = &qs.Requiredids
}
return &Query{
ID: qs.Queryid,
Type: qt,
Version: qs.Activeversion,
RequiredQueryIDs: reqIds,
Config: cfg,
}, nil
}
func ParseFullQueryArray(qs []*repository.Fullactivequery) ([]*Query, error) {
parsed := make([]*Query, len(qs))
for i, q := range qs {
p, err := ParseFullQuery(q)
if err != nil {
return nil, err
}
parsed[i] = p
}
return parsed, nil
}