GraphQL: фильтрация по полям
artifactTree
Расширенный query в artifacts/graphql/schema.ts:
graphql
query {
artifactTree(
spaceId: "…"
fieldFilters: [
{ key: "my-ext.flag", op: eq, value: "true" }
{ key: "my-ext.status", op: in, values: ["open", "review"] }
]
) {
# tree nodes
}
}Операции (EntityFieldFilterOp)
| Op | Семантика (string) |
|---|---|
eq | равенство |
neq | не равно |
contains | подстрока |
startsWith | префикс |
in | одно из значений (values или comma-separated value) |
Реализация
entity-field-query.service.ts — JOIN EntityFieldValue по (entityType, fieldKey, value) → список entityId → фильтр tree/list.
Только поля с filterable: true в registry.
Ограничения
- Не добавляйте поля в Keystone
ArtifactWhereInput— только custom args. - Лимитируйте число
fieldFiltersв запросе (performance). - Numeric/boolean сравнения — convention на стороне расширения (каноническая строка).
Пример use case
Space flag workflow-engine.strictMode=true + filter artifacts с workflow-engine.deliverableState=approved в дереве — без custom SQL в расширении.