Skip to content

Commit 5a3c2fb

Browse files
committed
3278: Permitir mapear lista simples de uma entidade em tabela de relação (implementando apenas o create table)
1 parent d40b69a commit 5a3c2fb

35 files changed

Lines changed: 587 additions & 208 deletions

src/core/column.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,5 @@ export interface Column {
66
value: ValueType;
77
name: string;
88
type: FieldType;
9-
// isKeyColumn?: boolean;
10-
// isAutoIncrement?: boolean;
119
primaryKeyType?: PrimaryKeyType;
1210
}

src/core/columns-base-builder.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@ export abstract class ColumnsBaseBuilder<
1515
protected columns: TColumn[] = [];
1616

1717
constructor(
18-
protected readonly metadata: MetadataTable<T>,
19-
protected readonly modelToSave: T = metadata.instance,
18+
// protected readonly metadata: MetadataTable<T>,
19+
protected readonly mapperTable: MapperTable,
20+
protected readonly modelToSave: T,
21+
// protected readonly modelToSave: T = metadata.instance,
2022
) {
2123
}
2224

2325
public allColumns() {
2426
// clear columns
2527
this.columns = [];
26-
this.setAllColumns(this.metadata.mapperTable, this.modelToSave);
28+
this.setAllColumns(this.mapperTable, this.modelToSave);
29+
// this.setAllColumns(this.metadata.mapperTable, this.modelToSave);
2730
}
2831

2932
public setColumn(
@@ -45,7 +48,8 @@ export abstract class ColumnsBaseBuilder<
4548
): TThis {
4649
return this.setColumn(
4750
Utils.getColumn(expression),
48-
Utils.getType(this.metadata.instance, expression),
51+
Utils.getType(this.modelToSave, expression),
52+
// Utils.getType(this.metadata.instance, expression),
4953
primaryKeyType
5054
);
5155
}
@@ -62,14 +66,18 @@ export abstract class ColumnsBaseBuilder<
6266
if (column.primaryKeyType) {
6367
result.keyColumns.push(column.name);
6468
}
65-
result.columns.push(this.columnFormat(column));
69+
const columnFormat = this.columnFormat(column);
70+
if (columnFormat) {
71+
result.columns.push(columnFormat);
72+
}
6673
}
6774
}
6875
return result;
6976
}
7077

7178
protected isCompositeKey(): boolean {
72-
return this.metadata.mapperTable.columns.filter(x => !!x.primaryKeyType).length > 1;
79+
return this.mapperTable.columns.filter(x => !!x.primaryKeyType).length > 1;
80+
// return this.metadata.mapperTable.columns.filter(x => !!x.primaryKeyType).length > 1;
7381
}
7482

7583
protected abstract columnFormat(column: TColumn): string;
@@ -95,5 +103,10 @@ export abstract class ColumnsBaseBuilder<
95103
);
96104
}
97105
}
106+
// for (const key in mapper.dependencies) {
107+
// if (mapper.dependencies.hasOwnProperty(key)) {
108+
// const dependency = mapper.dependencies[key];
109+
// }
110+
// }
98111
}
99112
}

src/core/columns-values-builder.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@ export abstract class ColumnsValuesBuilder<
1212
T, TThis extends ColumnsValuesBuilder<T, TThis>>
1313
extends ColumnsBaseBuilder<TThis, T, Column> {
1414

15+
// TODO: fixed list task
1516
constructor(
1617
metadata: MetadataTable<T>,
17-
modelToSave: T = void 0,
18+
modelToSave: T = metadata.instance,
19+
// modelToSave: T = void 0,
1820
) {
19-
super(metadata, modelToSave);
21+
super(metadata.mapperTable, modelToSave);
22+
// super(metadata, modelToSave);
2023
}
2124

2225
public setColumnValue(
@@ -35,7 +38,8 @@ export abstract class ColumnsValuesBuilder<
3538
// gerar GUID
3639
value = Utils.GUID();
3740
// set value GUID in model
38-
KeyUtils.setKey(this.metadata, this.modelToSave, value);
41+
KeyUtils.setKey(this.mapperTable, this.modelToSave, value);
42+
// KeyUtils.setKey(this.metadata, this.modelToSave, value);
3943
}
4044
break;
4145
case PrimaryKeyType.AutoIncrement:

src/core/ddl-compided.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface DdlCompiled {
2+
script: string;
3+
dependencies: DdlCompiled[];
4+
}

src/core/enums/column-type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ export enum ColumnType {
22
TEXT = "TEXT",
33
INTEGER = "INTEGER",
44
BOOLEAN = "BOOLEAN",
5+
TABLE_REFERENCE = "TABLE_REFERENCE",
56
}

src/core/enums/expression-or-value-enum.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export enum ExpressionOrValueEnum {
22
Expression,
33
Value,
44
Ref,
5+
Plan,
56
Projection,
67
Null
78
}

src/core/enums/field-type.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
export enum FieldType {
2-
STRING = 1,
3-
NUMBER,
4-
BOOLEAN,
5-
DATE,
6-
OBJECT,
7-
FUNCTION,
8-
ARRAY,
9-
NULL,
2+
STRING = 1 << 0,
3+
NUMBER = 1 << 1,
4+
BOOLEAN = 1 << 2,
5+
DATE = 1 << 3,
6+
OBJECT = 1 << 4,
7+
FUNCTION = 1 << 5,
8+
ARRAY = 1 << 6,
9+
NULL = 1 << 7,
1010
// GUID
1111
}

src/core/key-utils.ts

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,36 @@
1+
import { MapperTable } from "./../mapper-table";
12
import { MapperColumn } from "../mapper-column";
23
import { PrimaryKeyType } from "./enums/primary-key-type";
34
import { Utils } from "./utils";
45
import * as lodash from "lodash";
5-
import { MetadataTable } from "../metadata-table";
66

77
export class KeyUtils {
88

9-
public static setKey<T>(metadata: MetadataTable<T>, model: any, keyValue: any): void {
9+
public static setKey(mapperTable: MapperTable, model: any, keyValue: any): void {
1010
// model[this.primaryKeyMapper(metadata).fieldReference] = keyValue;
11-
lodash.set(model, this.primaryKeyMapper(metadata).fieldReference, keyValue);
11+
lodash.set(model, this.primaryKeyMapper(mapperTable).fieldReference, keyValue);
1212
}
1313

14-
public static getKey<T>(metadata: MetadataTable<T>, model: any): any {
15-
return Utils.getValue(model, this.primaryKeyMapper(metadata).fieldReference);
14+
public static getKey(mapperTable: MapperTable, model: any): any {
15+
return Utils.getValue(model, this.primaryKeyMapper(mapperTable).fieldReference);
1616
}
1717

18-
public static primaryKeyType<T>(metadata: MetadataTable<T>): PrimaryKeyType {
19-
return this.primaryKeyMapper(metadata).primaryKeyType;
18+
public static primaryKeyType(mapperTable: MapperTable): PrimaryKeyType {
19+
return this.primaryKeyMapper(mapperTable).primaryKeyType;
2020
}
2121

22-
public static isCompositeKey<T>(metadata: MetadataTable<T>): boolean {
23-
return this.primaryKeysMapper(metadata).length > 1;
22+
public static isCompositeKey(mapperTable: MapperTable): boolean {
23+
return this.primaryKeysMapper(mapperTable).length > 1;
2424
}
2525

26-
public static primaryKeyMapper<T>(metadata: MetadataTable<T>): MapperColumn {
27-
return this.primaryKeysMapper(metadata).find(_ => true);
26+
public static primaryKeyMapper(mapperTable: MapperTable): MapperColumn {
27+
return this.primaryKeysMapper(mapperTable).find(_ => true);
2828
}
2929

30-
public static primaryKeysMapper<T>(metadata: MetadataTable<T>): MapperColumn[] {
31-
return metadata.mapperTable.columns.filter(x => !!x.primaryKeyType);
30+
public static primaryKeysMapper(mapperTable: MapperTable): MapperColumn[] {
31+
return mapperTable.columns.filter(x => !!x.primaryKeyType);
3232
}
33+
// public static primaryKeysMapper<T>(metadata: MetadataTable<T>): MapperColumn[] {
34+
// return metadata.mapperTable.columns.filter(x => !!x.primaryKeyType);
35+
// }
3336
}

src/core/utils.ts

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export type TypeOrString<T> = (new () => T) | string;
2525

2626
export type ExpressionOrColumn<TReturn, T> = ReturnExpression<TReturn, T> | string;
2727

28-
export type TypeWhere<T> = Expression<T> | ValueTypeToParse | ColumnRef | ProjectionsHelper<T>;
28+
export type TypeWhere<T> = Expression<T> | ValueTypeToParse | ColumnRef | ProjectionsHelper<T> | PlanRef;
2929

3030
export type TypeProjection<T> = ProjectionsHelper<T> | ColumnRef | PlanRef;
3131

@@ -43,6 +43,10 @@ export class Utils {
4343
return uuidv4();
4444
}
4545

46+
public static isFlag(value: any, flag: any) {
47+
return this.getDatabaseHelper().isFlag(value, flag);
48+
}
49+
4650
public static is(value: any, type: string): boolean {
4751
return typeof value === type;
4852
}
@@ -148,9 +152,11 @@ export class Utils {
148152
? ExpressionOrValueEnum.Projection
149153
: this.isColumnRef(value)
150154
? ExpressionOrValueEnum.Ref
151-
: this.isValue(value)
152-
? ExpressionOrValueEnum.Value
153-
: ExpressionOrValueEnum.Expression;
155+
: this.isPlanRef(value)
156+
? ExpressionOrValueEnum.Plan
157+
: this.isValue(value)
158+
? ExpressionOrValueEnum.Value
159+
: ExpressionOrValueEnum.Expression;
154160
}
155161

156162
public static getValueByTypeOrString<T>(param: TypeOrString<T>): string {
@@ -180,14 +186,18 @@ export class Utils {
180186
column: (expression as ColumnRef).result(),
181187
params: []
182188
};
189+
case (ExpressionOrValueEnum.Plan):
190+
return {
191+
column: (expression as PlanRef).result(),
192+
params: []
193+
};
183194
case (ExpressionOrValueEnum.Value):
184195
return {
185196
column: "?",
186197
params: [expression]
187198
};
188199
case (ExpressionOrValueEnum.Projection):
189200
const compiled = this.resolveExpressionProjection(expression as ProjectionsHelper<T>);
190-
// const compiled = this.resolveProjection(expression as ProjectionsHelper<T>);
191201
return {
192202
column: compiled.projection,
193203
params: compiled.params
@@ -200,19 +210,6 @@ export class Utils {
200210
}
201211
}
202212

203-
// public static resolveProjection<T>(projection: TypeProjection<T>): ProjectionCompiled {
204-
// if (this.isProjectionsHelper(projection)) {
205-
// return (projection as ProjectionsHelper<T>)._compiled();
206-
// }
207-
// if (this.isColumnRef(projection)) {
208-
// return new ProjectionCompiled((projection as ColumnRef).result());
209-
// }
210-
// if (this.isPlanRef(projection)) {
211-
// return new ProjectionCompiled((projection as PlanRef).result());
212-
// }
213-
// return new ProjectionCompiled(projection + "");
214-
// }
215-
216213
public static resolveExpressionProjection<TReturn, T>(projection: ExpressionProjection<TReturn, T>): ProjectionCompiled {
217214
if (this.isProjectionsHelper(projection)) {
218215
return (projection as ProjectionsHelper<T>)._compiled();
@@ -223,10 +220,6 @@ export class Utils {
223220
if (this.isPlanRef(projection)) {
224221
return new ProjectionCompiled((projection as PlanRef).result());
225222
}
226-
// const expressionOrColumn = this.expressionOrColumn(projection as ExpressionOrColumn<TReturn, T>);
227-
// if(expressionOrColumn === ExpressionOrColumnEnum.Expression){
228-
// return this.getColumn(projection as Expression)
229-
// }
230223
return new ProjectionCompiled(this.getColumn(projection as ExpressionOrColumn<TReturn, T>));
231224
}
232225

src/crud/crud-base.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ export class CrudBase<
3939
if (this._typeCrud === TypeCrud.CREATE) {
4040
return new Promise<DatabaseResult>((resolve, reject) => {
4141
promise.then(result => {
42-
if (KeyUtils.primaryKeyType(this._builder.getMetadata()) === PrimaryKeyType.AutoIncrement) {
43-
KeyUtils.setKey(this._builder.getMetadata(), this._builder.getModel(), result.insertId);
42+
if (KeyUtils.primaryKeyType(this._builder.getMetadata().mapperTable) === PrimaryKeyType.AutoIncrement) {
43+
KeyUtils.setKey(this._builder.getMetadata().mapperTable, this._builder.getModel(), result.insertId);
4444
} else {
45-
result.insertId = KeyUtils.getKey(this._builder.getMetadata(), this._builder.getModel());
45+
result.insertId = KeyUtils.getKey(this._builder.getMetadata().mapperTable, this._builder.getModel());
4646
}
4747
resolve(result);
4848
}).catch(reject);

0 commit comments

Comments
 (0)