Skip to content

Commit 890a1bd

Browse files
committed
Define new style filters for FieldRegion & FieldZone
1 parent 90b551e commit 890a1bd

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

src/components/field-region/dto/list-field-region.dto.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,21 @@ import { InputType, ObjectType } from '@nestjs/graphql';
22
import {
33
FilterField,
44
type ID,
5+
IdField,
56
PaginatedList,
67
SecuredList,
78
SortablePaginationInput,
89
} from '~/common';
10+
import { FieldZoneFilters } from '../../field-zone/dto';
911
import { FieldRegion } from './field-region.dto';
1012

1113
@InputType()
1214
export abstract class FieldRegionFilters {
13-
readonly fieldZoneId?: ID;
15+
@IdField({ optional: true })
16+
readonly id?: ID<'FieldRegion'>;
17+
18+
@FilterField(() => FieldZoneFilters)
19+
readonly fieldZone?: FieldZoneFilters & {};
1420
}
1521

1622
@InputType()
@@ -19,7 +25,7 @@ export class FieldRegionListInput extends SortablePaginationInput<
1925
>({
2026
defaultSort: 'name',
2127
}) {
22-
@FilterField(() => FieldRegionFilters, { internal: true })
28+
@FilterField(() => FieldRegionFilters)
2329
readonly filter?: FieldRegionFilters;
2430
}
2531

src/components/field-region/field-region.repository.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,17 @@ import {
1414
ACTIVE,
1515
createNode,
1616
createRelationships,
17+
filter,
1718
matchProps,
1819
merge,
1920
paginate,
2021
sorting,
2122
} from '~/core/database/query';
23+
import { fieldZoneFilters } from '../field-zone/field-zone.repository';
2224
import {
2325
type CreateFieldRegion,
2426
FieldRegion,
27+
FieldRegionFilters,
2528
type FieldRegionListInput,
2629
type UpdateFieldRegion,
2730
} from './dto';
@@ -102,13 +105,14 @@ export class FieldRegionRepository extends DtoRepository(FieldRegion) {
102105
);
103106
}
104107

105-
async list({ filter, ...input }: FieldRegionListInput) {
108+
async list(input: FieldRegionListInput) {
106109
if (!this.privileges.can('read')) {
107110
return SecuredList.Redacted;
108111
}
109112
const result = await this.db
110113
.query()
111114
.match(node('node', 'FieldRegion'))
115+
.apply(fieldRegionFilters(input.filter))
112116
.apply(sorting(FieldRegion, input))
113117
.apply(paginate(input, this.hydrate()))
114118
.first();
@@ -128,3 +132,14 @@ export class FieldRegionRepository extends DtoRepository(FieldRegion) {
128132
.run();
129133
}
130134
}
135+
136+
export const fieldRegionFilters = filter.define(() => FieldRegionFilters, {
137+
id: filter.baseNodeProp(),
138+
fieldZone: filter.sub(() => fieldZoneFilters)((sub) =>
139+
sub.match([
140+
node('outer'),
141+
relation('out', '', 'zone', ACTIVE),
142+
node('node', 'FieldZone'),
143+
]),
144+
),
145+
});

src/components/field-zone/dto/list-field-zone.dto.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { InputType, ObjectType } from '@nestjs/graphql';
22
import {
33
FilterField,
44
type ID,
5+
IdField,
56
PaginatedList,
67
SecuredList,
78
SortablePaginationInput,
@@ -10,7 +11,8 @@ import { FieldZone } from './field-zone.dto';
1011

1112
@InputType()
1213
export abstract class FieldZoneFilters {
13-
readonly fieldZoneId?: ID;
14+
@IdField({ optional: true })
15+
readonly id?: ID<'FieldZone'>;
1416
}
1517

1618
@InputType()
@@ -19,7 +21,7 @@ export class FieldZoneListInput extends SortablePaginationInput<
1921
>({
2022
defaultSort: 'name',
2123
}) {
22-
@FilterField(() => FieldZoneFilters, { internal: true })
24+
@FilterField(() => FieldZoneFilters)
2325
readonly filter?: FieldZoneFilters;
2426
}
2527

src/components/field-zone/field-zone.repository.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
ACTIVE,
1616
createNode,
1717
createRelationships,
18+
filter,
1819
matchProps,
1920
merge,
2021
paginate,
@@ -23,6 +24,7 @@ import {
2324
import {
2425
type CreateFieldZone,
2526
FieldZone,
27+
FieldZoneFilters,
2628
type FieldZoneListInput,
2729
type UpdateFieldZone,
2830
} from './dto';
@@ -121,13 +123,14 @@ export class FieldZoneRepository extends DtoRepository(FieldZone) {
121123
await query.run();
122124
}
123125

124-
async list({ filter, ...input }: FieldZoneListInput) {
126+
async list(input: FieldZoneListInput) {
125127
if (!this.privileges.can('read')) {
126128
return SecuredList.Redacted;
127129
}
128130
const result = await this.db
129131
.query()
130132
.match(node('node', 'FieldZone'))
133+
.apply(fieldZoneFilters(input.filter))
131134
.apply(sorting(FieldZone, input))
132135
.apply(paginate(input, this.hydrate()))
133136
.first();
@@ -147,3 +150,7 @@ export class FieldZoneRepository extends DtoRepository(FieldZone) {
147150
.run();
148151
}
149152
}
153+
154+
export const fieldZoneFilters = filter.define(() => FieldZoneFilters, {
155+
id: filter.baseNodeProp(),
156+
});

0 commit comments

Comments
 (0)