Skip to content

Commit 6eaf57d

Browse files
author
Olivier Costi
committed
feat: add flatten function for inlcluded referenced entities
1 parent 0a0ab2d commit 6eaf57d

5 files changed

Lines changed: 28 additions & 6 deletions

File tree

src/generator/01-base/static/queriesWithFilter.ts.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export type CountQuery<F> = {
3737

3838
export type SomeQuery<E, F, I, P> = {
3939
serializeNulls?: boolean;
40-
include?: QuerySelect<I>;
40+
include?: QuerySelectIncludedReferences<I>;
4141
properties?: P;
4242
filter?: QueryFilter<F> & CustomAttributeFilter;
4343
select?: QuerySelect<E>;
@@ -171,7 +171,7 @@ const _some = (
171171
serializeNulls: query?.serializeNulls,
172172
additionalProperties: query?.properties?.join(','),
173173
properties: query?.select ? flattenSelect(query.select).join(',') : undefined,
174-
includeReferencedEntities: query?.include ? Object.keys(query.include).join(',') : undefined,
174+
includeReferencedEntities: query?.include ? flattenIncludedReferences(query.include).join(',') : undefined,
175175
...flattenOrFilter(query?.or),
176176
...flattenFilter(query?.filter),
177177
...flattenSort(query?.sort),

src/generator/01-base/static/queriesWithQueryLanguage.ts.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export type CountQuery<F> = {
4747

4848
export type SomeQuery<E, F, I, P> = {
4949
serializeNulls?: boolean;
50-
include?: QuerySelect<I>;
50+
include?: QuerySelectIncludedReferences<I>;
5151
properties?: P;
5252
where?: QueryFilter<F>;
5353
select?: QuerySelect<E>;
@@ -234,7 +234,7 @@ const _some = (
234234
? flattenSelect(query.select).join(',')
235235
: undefined,
236236
includeReferencedEntities: query?.include
237-
? Object.keys(query.include).join(',')
237+
? flattenIncludedReferences(query.include).join(',')
238238
: undefined,
239239
...assembleFilterParam(query?.where),
240240
...flattenSort(query?.sort),

src/generator/01-base/static/types.ts.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ export type QuerySelect<T> = {
3030
: boolean;
3131
};
3232

33+
export type QuerySelectIncludedReferences<T> = {
34+
[P in keyof T]?: T[P] extends Array<infer U> | undefined
35+
? QuerySelectIncludedReferences<U>
36+
: T[P] extends Record<any, any> | undefined
37+
? QuerySelectIncludedReferences<T[P]>
38+
: boolean;
39+
};
40+
3341
export type Select<T, Q extends QuerySelect<T> | undefined> =
3442
Q extends QuerySelect<T>
3543
? {

src/generator/01-base/static/utils.ts.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,22 @@ const flattenSelect = (obj: Select<any, any> = {}): string[] => {
1212
return entries;
1313
};
1414

15+
const flattenIncludedReferences = (obj: QuerySelectIncludedReferences<any> = {}, base = ''): string[] => {
16+
const entries: string[] = [];
17+
18+
for (const [prop, value] of Object.entries(obj)) {
19+
const path = base ? `${base}.${prop}` : prop;
20+
21+
if (typeof value === 'object' && value) {
22+
entries.push(...flattenIncludedReferences(value as QuerySelectIncludedReferences<any>, path));
23+
} else if (value) {
24+
entries.push(path);
25+
}
26+
}
27+
28+
return entries;
29+
};
30+
1531
export const flattenSort = (obj: Sort<any>[] = []): { sort?: string } => {
1632
const flatten = (obj: Sort<any>, base = ''): string | undefined => {
1733
const [key, value] = Object.entries(obj ?? {})[0] ?? [];

src/generator/04-services/endpoints/some.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,6 @@ const resolveArrayReferenceProperties = (
9898
return properties;
9999
};
100100

101-
// TODO: check v1 and v2
102-
// TODO: remove boolean from arrays in QuerySelect
103101
const resolveReferences = (entity: string, entities: Map<string, GeneratedEntity>) => {
104102
const references: InterfaceProperty[] = [];
105103
const generatedEntity = entities.get(entity);

0 commit comments

Comments
 (0)