Skip to content

Commit d216694

Browse files
author
fernandocode
committed
v.0.4.2
Correções na mapeando de references sem instanciado do atributo
1 parent 4a4a028 commit d216694

File tree

4 files changed

+19
-10
lines changed

4 files changed

+19
-10
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "database-builder",
3-
"version": "0.4.1",
3+
"version": "0.4.2",
44
"description": "Library to assist in creating and maintaining SQL commands.",
55
"main": "./src/index.js",
66
"types": "./src/index.d.ts",

src/metadata-table.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,20 @@ export class MetadataTable<T> extends MetadataTableBase<T> {
8787
const columnKey = this.columnName(expressionKey);
8888
const column = `${columnReference}_${columnKey}`;
8989
const instance = this.validInstanceMapper(this.instance, column);
90-
const referenceInstance = this.validExpressionMapper(instance, expression)(instance);
91-
const mapperReference = this.getMapper(referenceInstance.constructor.name);
92-
const mapperColumnReference = mapperReference.mapperTable.getColumnByField(expressionKey);
90+
let fieldType: FieldType;
91+
if (type) {
92+
fieldType = this._databaseHelper.getFieldType(type);
93+
} else {
94+
const referenceInstance = this.validExpressionMapper(instance, expression)(instance);
95+
const mapperReference = this.getMapper(referenceInstance.constructor.name);
96+
const mapperColumnReference = mapperReference.mapperTable.getColumnByField(expressionKey);
97+
fieldType = mapperColumnReference
98+
? mapperColumnReference.fieldType
99+
: this.getTypeByExpression(referenceInstance, this.validExpressionMapper(referenceInstance, expressionKey));
100+
}
93101
this.addReference(
94102
column,
95-
type
96-
? this._databaseHelper.getFieldType(type)
97-
: mapperColumnReference
98-
? mapperColumnReference.fieldType
99-
: this.getTypeByExpression(referenceInstance, this.validExpressionMapper(referenceInstance, expressionKey))
103+
fieldType
100104
);
101105
return this;
102106
}
@@ -165,7 +169,8 @@ export class MetadataTable<T> extends MetadataTableBase<T> {
165169
private validExpressionMapper<TReturn, TType>(
166170
instance: TType, expression: ReturnExpression<TReturn, TType>
167171
): ReturnExpression<TReturn, TType> {
168-
if (Utils.isNull(expression) || Utils.isNull(expression(instance))) {
172+
const expressionByInstance = expression(instance);
173+
if (Utils.isNull(expression) || Utils.isNull(expressionByInstance)) {
169174
throw new DatabaseBuilderError(`Mapper: ${this.newable.name}, can not get instance of mapped property ('${this.columnName(expression)}')`);
170175
}
171176
return expression;

src/test/mapper.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,11 @@ describe("Mapper", () => {
2929
m = m.ignore(x => x.cliente);
3030
expect(m.mapperTable.getColumnByField(expressionClienteKey)).to.equal(void 0);
3131
m = m.referenceKey(x => x.cliente, x => x.idErp);
32+
m = m.referenceKey(x => x.clienteNotInitialized, x => x.idErp, Number);
3233
const expressionClienteCodeImport: Expression<ContasAReceber> = (x => x.cliente.idErp);
34+
const expressionClienteNotInitializedCodeImport: Expression<ContasAReceber> = (x => x.clienteNotInitialized.idErp);
3335
expect(m.mapperTable.getColumnByField(expressionClienteCodeImport).column).to.equal(Utils.getColumn(expressionClienteCodeImport));
36+
expect(m.mapperTable.getColumnByField(expressionClienteNotInitializedCodeImport).column).to.equal(Utils.getColumn(expressionClienteNotInitializedCodeImport));
3437
});
3538

3639
const mapperGuidClass = mapperBase.mapper(GuidClazz)

src/test/models/contas-a-receber.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export class ContasAReceber extends BaseModelErp {
66
// public numero: string = "";
77
// public dataEmissao: moment.Moment = moment();
88
public cliente: Cliente = new Cliente();
9+
public clienteNotInitialized: Cliente;
910
public dataVencimento: moment.Moment = moment();
1011
public dataRecebimento: string;
1112
// public dataProtesto: moment.Moment = moment();

0 commit comments

Comments
 (0)