Skip to content

Commit 634bd4f

Browse files
authored
Merge pull request #795 from constructive-io/feat/condition
feat(codegen): wire condition arg through ORM query builder for findMany/findFirst
2 parents 9739aea + c9b992e commit 634bd4f

14 files changed

Lines changed: 631 additions & 54 deletions

graphql/codegen/src/__tests__/codegen/__snapshots__/client-generator.test.ts.snap

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,9 +276,10 @@ export interface PageInfo {
276276
endCursor?: string | null;
277277
}
278278
279-
export interface FindManyArgs<TSelect, TWhere, TOrderBy> {
279+
export interface FindManyArgs<TSelect, TWhere, TCondition, TOrderBy> {
280280
select?: TSelect;
281281
where?: TWhere;
282+
condition?: TCondition;
282283
orderBy?: TOrderBy[];
283284
first?: number;
284285
last?: number;
@@ -287,9 +288,10 @@ export interface FindManyArgs<TSelect, TWhere, TOrderBy> {
287288
offset?: number;
288289
}
289290
290-
export interface FindFirstArgs<TSelect, TWhere> {
291+
export interface FindFirstArgs<TSelect, TWhere, TCondition> {
291292
select?: TSelect;
292293
where?: TWhere;
294+
condition?: TCondition;
293295
}
294296
295297
export interface CreateArgs<TSelect, TData> {

graphql/codegen/src/__tests__/codegen/__snapshots__/input-types-generator.test.ts.snap

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,13 @@ export interface InternetAddressFilter {
166166
export interface FullTextFilter {
167167
matches?: string;
168168
}
169+
export interface VectorFilter {
170+
isNull?: boolean;
171+
equalTo?: number[];
172+
notEqualTo?: number[];
173+
distinctFrom?: number[];
174+
notDistinctFrom?: number[];
175+
}
169176
export interface StringListFilter {
170177
isNull?: boolean;
171178
equalTo?: string[];
@@ -648,6 +655,13 @@ export interface InternetAddressFilter {
648655
export interface FullTextFilter {
649656
matches?: string;
650657
}
658+
export interface VectorFilter {
659+
isNull?: boolean;
660+
equalTo?: number[];
661+
notEqualTo?: number[];
662+
distinctFrom?: number[];
663+
notDistinctFrom?: number[];
664+
}
651665
export interface StringListFilter {
652666
isNull?: boolean;
653667
equalTo?: string[];
@@ -966,6 +980,13 @@ export interface InternetAddressFilter {
966980
export interface FullTextFilter {
967981
matches?: string;
968982
}
983+
export interface VectorFilter {
984+
isNull?: boolean;
985+
equalTo?: number[];
986+
notEqualTo?: number[];
987+
distinctFrom?: number[];
988+
notDistinctFrom?: number[];
989+
}
969990
export interface StringListFilter {
970991
isNull?: boolean;
971992
equalTo?: string[];
@@ -1296,6 +1317,13 @@ export interface InternetAddressFilter {
12961317
export interface FullTextFilter {
12971318
matches?: string;
12981319
}
1320+
export interface VectorFilter {
1321+
isNull?: boolean;
1322+
equalTo?: number[];
1323+
notEqualTo?: number[];
1324+
distinctFrom?: number[];
1325+
notDistinctFrom?: number[];
1326+
}
12991327
export interface StringListFilter {
13001328
isNull?: boolean;
13011329
equalTo?: string[];
@@ -1631,6 +1659,13 @@ export interface InternetAddressFilter {
16311659
export interface FullTextFilter {
16321660
matches?: string;
16331661
}
1662+
export interface VectorFilter {
1663+
isNull?: boolean;
1664+
equalTo?: number[];
1665+
notEqualTo?: number[];
1666+
distinctFrom?: number[];
1667+
notDistinctFrom?: number[];
1668+
}
16341669
export interface StringListFilter {
16351670
isNull?: boolean;
16361671
equalTo?: string[];
@@ -2022,6 +2057,13 @@ export interface InternetAddressFilter {
20222057
export interface FullTextFilter {
20232058
matches?: string;
20242059
}
2060+
export interface VectorFilter {
2061+
isNull?: boolean;
2062+
equalTo?: number[];
2063+
notEqualTo?: number[];
2064+
distinctFrom?: number[];
2065+
notDistinctFrom?: number[];
2066+
}
20252067
export interface StringListFilter {
20262068
isNull?: boolean;
20272069
equalTo?: string[];
@@ -2409,6 +2451,13 @@ export interface InternetAddressFilter {
24092451
export interface FullTextFilter {
24102452
matches?: string;
24112453
}
2454+
export interface VectorFilter {
2455+
isNull?: boolean;
2456+
equalTo?: number[];
2457+
notEqualTo?: number[];
2458+
distinctFrom?: number[];
2459+
notDistinctFrom?: number[];
2460+
}
24122461
export interface StringListFilter {
24132462
isNull?: boolean;
24142463
equalTo?: string[];

graphql/codegen/src/__tests__/codegen/__snapshots__/model-generator.test.ts.snap

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ exports[`model-generator generates model with all CRUD methods 1`] = `
99
import { OrmClient } from "../client";
1010
import { QueryBuilder, buildFindManyDocument, buildFindFirstDocument, buildFindOneDocument, buildCreateDocument, buildUpdateByPkDocument, buildDeleteByPkDocument } from "../query-builder";
1111
import type { ConnectionResult, FindManyArgs, FindFirstArgs, CreateArgs, UpdateArgs, DeleteArgs, InferSelectResult, StrictSelect } from "../select-types";
12-
import type { User, UserWithRelations, UserSelect, UserFilter, UsersOrderBy, CreateUserInput, UpdateUserInput, UserPatch } from "../input-types";
12+
import type { User, UserWithRelations, UserSelect, UserFilter, UserCondition, UsersOrderBy, CreateUserInput, UpdateUserInput, UserPatch } from "../input-types";
1313
import { connectionFieldsMap } from "../input-types";
1414
export class UserModel {
1515
constructor(private client: OrmClient) {}
16-
findMany<S extends UserSelect>(args: FindManyArgs<S, UserFilter, UsersOrderBy> & {
16+
findMany<S extends UserSelect>(args: FindManyArgs<S, UserFilter, UserCondition, UsersOrderBy> & {
1717
select: S;
1818
} & StrictSelect<S, UserSelect>): QueryBuilder<{
1919
users: ConnectionResult<InferSelectResult<UserWithRelations, S>>;
@@ -23,13 +23,14 @@ export class UserModel {
2323
variables
2424
} = buildFindManyDocument("User", "users", args.select, {
2525
where: args?.where,
26+
condition: args?.condition,
2627
orderBy: args?.orderBy as string[] | undefined,
2728
first: args?.first,
2829
last: args?.last,
2930
after: args?.after,
3031
before: args?.before,
3132
offset: args?.offset
32-
}, "UserFilter", "UsersOrderBy", connectionFieldsMap);
33+
}, "UserFilter", "UsersOrderBy", connectionFieldsMap, "UserCondition");
3334
return new QueryBuilder({
3435
client: this.client,
3536
operation: "query",
@@ -39,7 +40,7 @@ export class UserModel {
3940
variables
4041
});
4142
}
42-
findFirst<S extends UserSelect>(args: FindFirstArgs<S, UserFilter> & {
43+
findFirst<S extends UserSelect>(args: FindFirstArgs<S, UserFilter, UserCondition> & {
4344
select: S;
4445
} & StrictSelect<S, UserSelect>): QueryBuilder<{
4546
users: {
@@ -50,8 +51,9 @@ export class UserModel {
5051
document,
5152
variables
5253
} = buildFindFirstDocument("User", "users", args.select, {
53-
where: args?.where
54-
}, "UserFilter", connectionFieldsMap);
54+
where: args?.where,
55+
condition: args?.condition
56+
}, "UserFilter", connectionFieldsMap, "UserCondition");
5557
return new QueryBuilder({
5658
client: this.client,
5759
operation: "query",
@@ -156,11 +158,11 @@ exports[`model-generator generates model without update/delete when not availabl
156158
import { OrmClient } from "../client";
157159
import { QueryBuilder, buildFindManyDocument, buildFindFirstDocument, buildFindOneDocument, buildCreateDocument, buildUpdateByPkDocument, buildDeleteByPkDocument } from "../query-builder";
158160
import type { ConnectionResult, FindManyArgs, FindFirstArgs, CreateArgs, UpdateArgs, DeleteArgs, InferSelectResult, StrictSelect } from "../select-types";
159-
import type { AuditLog, AuditLogWithRelations, AuditLogSelect, AuditLogFilter, AuditLogsOrderBy, CreateAuditLogInput, UpdateAuditLogInput, AuditLogPatch } from "../input-types";
161+
import type { AuditLog, AuditLogWithRelations, AuditLogSelect, AuditLogFilter, AuditLogCondition, AuditLogsOrderBy, CreateAuditLogInput, UpdateAuditLogInput, AuditLogPatch } from "../input-types";
160162
import { connectionFieldsMap } from "../input-types";
161163
export class AuditLogModel {
162164
constructor(private client: OrmClient) {}
163-
findMany<S extends AuditLogSelect>(args: FindManyArgs<S, AuditLogFilter, AuditLogsOrderBy> & {
165+
findMany<S extends AuditLogSelect>(args: FindManyArgs<S, AuditLogFilter, AuditLogCondition, AuditLogsOrderBy> & {
164166
select: S;
165167
} & StrictSelect<S, AuditLogSelect>): QueryBuilder<{
166168
auditLogs: ConnectionResult<InferSelectResult<AuditLogWithRelations, S>>;
@@ -170,13 +172,14 @@ export class AuditLogModel {
170172
variables
171173
} = buildFindManyDocument("AuditLog", "auditLogs", args.select, {
172174
where: args?.where,
175+
condition: args?.condition,
173176
orderBy: args?.orderBy as string[] | undefined,
174177
first: args?.first,
175178
last: args?.last,
176179
after: args?.after,
177180
before: args?.before,
178181
offset: args?.offset
179-
}, "AuditLogFilter", "AuditLogsOrderBy", connectionFieldsMap);
182+
}, "AuditLogFilter", "AuditLogsOrderBy", connectionFieldsMap, "AuditLogCondition");
180183
return new QueryBuilder({
181184
client: this.client,
182185
operation: "query",
@@ -186,7 +189,7 @@ export class AuditLogModel {
186189
variables
187190
});
188191
}
189-
findFirst<S extends AuditLogSelect>(args: FindFirstArgs<S, AuditLogFilter> & {
192+
findFirst<S extends AuditLogSelect>(args: FindFirstArgs<S, AuditLogFilter, AuditLogCondition> & {
190193
select: S;
191194
} & StrictSelect<S, AuditLogSelect>): QueryBuilder<{
192195
auditLogs: {
@@ -197,8 +200,9 @@ export class AuditLogModel {
197200
document,
198201
variables
199202
} = buildFindFirstDocument("AuditLog", "auditLogs", args.select, {
200-
where: args?.where
201-
}, "AuditLogFilter", connectionFieldsMap);
203+
where: args?.where,
204+
condition: args?.condition
205+
}, "AuditLogFilter", connectionFieldsMap, "AuditLogCondition");
202206
return new QueryBuilder({
203207
client: this.client,
204208
operation: "query",
@@ -259,11 +263,11 @@ exports[`model-generator handles custom query/mutation names 1`] = `
259263
import { OrmClient } from "../client";
260264
import { QueryBuilder, buildFindManyDocument, buildFindFirstDocument, buildFindOneDocument, buildCreateDocument, buildUpdateByPkDocument, buildDeleteByPkDocument } from "../query-builder";
261265
import type { ConnectionResult, FindManyArgs, FindFirstArgs, CreateArgs, UpdateArgs, DeleteArgs, InferSelectResult, StrictSelect } from "../select-types";
262-
import type { Organization, OrganizationWithRelations, OrganizationSelect, OrganizationFilter, OrganizationsOrderBy, CreateOrganizationInput, UpdateOrganizationInput, OrganizationPatch } from "../input-types";
266+
import type { Organization, OrganizationWithRelations, OrganizationSelect, OrganizationFilter, OrganizationCondition, OrganizationsOrderBy, CreateOrganizationInput, UpdateOrganizationInput, OrganizationPatch } from "../input-types";
263267
import { connectionFieldsMap } from "../input-types";
264268
export class OrganizationModel {
265269
constructor(private client: OrmClient) {}
266-
findMany<S extends OrganizationSelect>(args: FindManyArgs<S, OrganizationFilter, OrganizationsOrderBy> & {
270+
findMany<S extends OrganizationSelect>(args: FindManyArgs<S, OrganizationFilter, OrganizationCondition, OrganizationsOrderBy> & {
267271
select: S;
268272
} & StrictSelect<S, OrganizationSelect>): QueryBuilder<{
269273
allOrganizations: ConnectionResult<InferSelectResult<OrganizationWithRelations, S>>;
@@ -273,13 +277,14 @@ export class OrganizationModel {
273277
variables
274278
} = buildFindManyDocument("Organization", "allOrganizations", args.select, {
275279
where: args?.where,
280+
condition: args?.condition,
276281
orderBy: args?.orderBy as string[] | undefined,
277282
first: args?.first,
278283
last: args?.last,
279284
after: args?.after,
280285
before: args?.before,
281286
offset: args?.offset
282-
}, "OrganizationFilter", "OrganizationsOrderBy", connectionFieldsMap);
287+
}, "OrganizationFilter", "OrganizationsOrderBy", connectionFieldsMap, "OrganizationCondition");
283288
return new QueryBuilder({
284289
client: this.client,
285290
operation: "query",
@@ -289,7 +294,7 @@ export class OrganizationModel {
289294
variables
290295
});
291296
}
292-
findFirst<S extends OrganizationSelect>(args: FindFirstArgs<S, OrganizationFilter> & {
297+
findFirst<S extends OrganizationSelect>(args: FindFirstArgs<S, OrganizationFilter, OrganizationCondition> & {
293298
select: S;
294299
} & StrictSelect<S, OrganizationSelect>): QueryBuilder<{
295300
allOrganizations: {
@@ -300,8 +305,9 @@ export class OrganizationModel {
300305
document,
301306
variables
302307
} = buildFindFirstDocument("Organization", "allOrganizations", args.select, {
303-
where: args?.where
304-
}, "OrganizationFilter", connectionFieldsMap);
308+
where: args?.where,
309+
condition: args?.condition
310+
}, "OrganizationFilter", connectionFieldsMap, "OrganizationCondition");
305311
return new QueryBuilder({
306312
client: this.client,
307313
operation: "query",

graphql/codegen/src/__tests__/codegen/__snapshots__/react-query-hooks.test.ts.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2138,7 +2138,7 @@ exports[`Schema Types Generator generateSchemaTypesFile generates schema types f
21382138
* DO NOT EDIT - changes will be overwritten
21392139
*/
21402140

2141-
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
2141+
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter, VectorFilter } from "./types";
21422142
export type UserRole = "ADMIN" | "USER" | "GUEST";
21432143
export interface RegisterInput {
21442144
email: string;
@@ -2165,7 +2165,7 @@ exports[`Schema Types Generator generateSchemaTypesFile generates schema types f
21652165
* DO NOT EDIT - changes will be overwritten
21662166
*/
21672167

2168-
import type { User, BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
2168+
import type { User, BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter, VectorFilter } from "./types";
21692169
export type UserRole = "ADMIN" | "USER" | "GUEST";
21702170
export interface RegisterInput {
21712171
email: string;

graphql/codegen/src/__tests__/codegen/__snapshots__/schema-types-generator.test.ts.snap

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ exports[`schema-types-generator generates enum types as string unions 1`] = `
77
* DO NOT EDIT - changes will be overwritten
88
*/
99
10-
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
10+
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter, VectorFilter } from "./types";
1111
export type Status = "ACTIVE" | "INACTIVE" | "PENDING";
1212
export type Priority = "LOW" | "MEDIUM" | "HIGH";"
1313
`;
@@ -19,7 +19,7 @@ exports[`schema-types-generator generates input object types as interfaces 1`] =
1919
* DO NOT EDIT - changes will be overwritten
2020
*/
2121
22-
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
22+
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter, VectorFilter } from "./types";
2323
export interface CreateUserInput {
2424
email: string;
2525
name?: string;
@@ -38,7 +38,7 @@ exports[`schema-types-generator generates payload types from mutation return typ
3838
* DO NOT EDIT - changes will be overwritten
3939
*/
4040
41-
import type { User, BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
41+
import type { User, BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter, VectorFilter } from "./types";
4242
export interface LoginPayload {
4343
token: string;
4444
refreshToken?: string | null;
@@ -53,7 +53,7 @@ exports[`schema-types-generator generates union types 1`] = `
5353
* DO NOT EDIT - changes will be overwritten
5454
*/
5555
56-
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
56+
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter, VectorFilter } from "./types";
5757
export type SearchResult = User | Post | Comment;"
5858
`;
5959

@@ -64,6 +64,6 @@ exports[`schema-types-generator skips table types and standard scalars 1`] = `
6464
* DO NOT EDIT - changes will be overwritten
6565
*/
6666
67-
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter } from "./types";
67+
import type { BigFloatFilter, BigIntFilter, BitStringFilter, BooleanFilter, DateFilter, DatetimeFilter, FloatFilter, FullTextFilter, IntFilter, IntListFilter, InternetAddressFilter, JSONFilter, StringFilter, StringListFilter, UUIDFilter, UUIDListFilter, VectorFilter } from "./types";
6868
export type CustomEnum = "VALUE_A" | "VALUE_B";"
6969
`;

0 commit comments

Comments
 (0)