Skip to content

Commit 98b9c24

Browse files
committed
Add FieldRegion/FieldZone director sorting/filtering
1 parent 640b884 commit 98b9c24

File tree

4 files changed

+46
-1
lines changed

4 files changed

+46
-1
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ import {
88
SortablePaginationInput,
99
} from '~/common';
1010
import { FieldZoneFilters } from '../../field-zone/dto';
11+
import { UserFilters } from '../../user/dto';
1112
import { FieldRegion } from './field-region.dto';
1213

1314
@InputType()
1415
export abstract class FieldRegionFilters {
1516
@IdField({ optional: true })
1617
readonly id?: ID<'FieldRegion'>;
1718

19+
@FilterField(() => UserFilters)
20+
readonly director?: UserFilters & {};
21+
1822
@FilterField(() => FieldZoneFilters)
1923
readonly fieldZone?: FieldZoneFilters & {};
2024
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
fieldZoneFilters,
2626
fieldZoneSorters,
2727
} from '../field-zone/field-zone.repository';
28+
import { userFilters, userSorters } from '../user/user.repository';
2829
import {
2930
type CreateFieldRegion,
3031
FieldRegion,
@@ -139,6 +140,13 @@ export class FieldRegionRepository extends DtoRepository(FieldRegion) {
139140

140141
export const fieldRegionFilters = filter.define(() => FieldRegionFilters, {
141142
id: filter.baseNodeProp(),
143+
director: filter.sub(() => userFilters)((sub) =>
144+
sub.match([
145+
node('outer'),
146+
relation('out', '', 'director', ACTIVE),
147+
node('node', 'User'),
148+
]),
149+
),
142150
fieldZone: filter.sub(() => fieldZoneFilters)((sub) =>
143151
sub.match([
144152
node('outer'),
@@ -150,6 +158,16 @@ export const fieldRegionFilters = filter.define(() => FieldRegionFilters, {
150158

151159
export const fieldRegionSorters = defineSorters(FieldRegion, {
152160
// eslint-disable-next-line @typescript-eslint/naming-convention
161+
'director.*': (query, input) =>
162+
query
163+
.with('node as region')
164+
.match([
165+
node('region'),
166+
relation('out', '', 'director', ACTIVE),
167+
node('node', 'User'),
168+
])
169+
.apply(sortWith(userSorters, input)),
170+
// eslint-disable-next-line @typescript-eslint/naming-convention
153171
'fieldZone.*': (query, input) =>
154172
query
155173
.with('node as region')

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@ import {
77
SecuredList,
88
SortablePaginationInput,
99
} from '~/common';
10+
import { UserFilters } from '../../user/dto';
1011
import { FieldZone } from './field-zone.dto';
1112

1213
@InputType()
1314
export abstract class FieldZoneFilters {
1415
@IdField({ optional: true })
1516
readonly id?: ID<'FieldZone'>;
17+
18+
@FilterField(() => UserFilters)
19+
readonly director?: UserFilters & {};
1620
}
1721

1822
@InputType()

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
paginate,
2323
sortWith,
2424
} from '~/core/database/query';
25+
import { userFilters, userSorters } from '../user/user.repository';
2526
import {
2627
type CreateFieldZone,
2728
FieldZone,
@@ -154,6 +155,24 @@ export class FieldZoneRepository extends DtoRepository(FieldZone) {
154155

155156
export const fieldZoneFilters = filter.define(() => FieldZoneFilters, {
156157
id: filter.baseNodeProp(),
158+
director: filter.sub(() => userFilters)((sub) =>
159+
sub.match([
160+
node('outer'),
161+
relation('out', '', 'director', ACTIVE),
162+
node('node', 'User'),
163+
]),
164+
),
157165
});
158166

159-
export const fieldZoneSorters = defineSorters(FieldZone, {});
167+
export const fieldZoneSorters = defineSorters(FieldZone, {
168+
// eslint-disable-next-line @typescript-eslint/naming-convention
169+
'director.*': (query, input) =>
170+
query
171+
.with('node as zone')
172+
.match([
173+
node('zone'),
174+
relation('out', '', 'director', ACTIVE),
175+
node('node', 'User'),
176+
])
177+
.apply(sortWith(userSorters, input)),
178+
});

0 commit comments

Comments
 (0)