Skip to content

Commit 9bcdc5f

Browse files
committed
Added option to create id GUID.
And added tests for implementation.
1 parent a308e46 commit 9bcdc5f

22 files changed

Lines changed: 193 additions & 81 deletions

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "database-builder",
3-
"version": "0.1.0-beta.3",
3+
"version": "0.1.0-beta.4",
44
"description": "Library to assist in creating and maintaining SQL commands.",
55
"main": "./src/index.js",
66
"types": "./src/index.d.ts",
@@ -12,12 +12,14 @@
1212
"publish-npm": "tsc & npm publish"
1313
},
1414
"dependencies": {
15+
"lambda-expression": ">=0.1.3",
1516
"moment": ">=2.22.0",
16-
"lambda-expression": ">=0.1.3"
17+
"uuid": ">=3.3.2"
1718
},
1819
"devDependencies": {
1920
"@types/chai": "^4.1.1",
2021
"@types/mocha": "^2.2.46",
22+
"@types/uuid": "^3.4.4",
2123
"chai": "^4.1.2",
2224
"mocha": "^5.0.0",
2325
"ts-node": "^4.1.0",

src/core/column.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { ValueType} from "./utils";
22
import { FieldType } from "./enums/field-type";
3+
import { PrimaryKeyType } from "./enums/primary-key-type";
34

45
export interface Column {
56
value: ValueType;
67
name: string;
78
type: FieldType;
8-
isKeyColumn?: boolean;
9-
isAutoIncrement?: boolean;
9+
// isKeyColumn?: boolean;
10+
// isAutoIncrement?: boolean;
11+
primaryKeyType?: PrimaryKeyType;
1012
}

src/core/columns-base-builder.ts

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { MapperTable } from "../mapper-table";
44
import { Column } from "./column";
55
import { FieldType } from "./enums/field-type";
66
import { ColumnsCompiled } from "./columns-compiled";
7+
import { PrimaryKeyType } from "./enums/primary-key-type";
78

89
export abstract class ColumnsBaseBuilder<
910
TThis extends ColumnsBaseBuilder<TThis, T, TColumn>,
@@ -28,28 +29,32 @@ export abstract class ColumnsBaseBuilder<
2829
public setColumn(
2930
column: string,
3031
type: FieldType,
31-
isKeyColumn: boolean,
32-
isAutoIncrement: boolean
32+
primaryKeyType: PrimaryKeyType
33+
// isKeyColumn: boolean,
34+
// isAutoIncrement: boolean
3335
): TThis {
3436
this.columns.push({
3537
name: column,
3638
type,
37-
isKeyColumn,
38-
isAutoIncrement
39+
primaryKeyType
40+
// isKeyColumn,
41+
// isAutoIncrement
3942
} as TColumn);
4043
return this.getInstance();
4144
}
4245

4346
public set<TReturn extends ValueTypeToParse>(
4447
expression: ExpressionOrColumn<TReturn, T>,
45-
isKeyColumn: boolean,
46-
isAutoIncrement: boolean
48+
primaryKeyType: PrimaryKeyType
49+
// isKeyColumn: boolean,
50+
// isAutoIncrement: boolean
4751
): TThis {
4852
return this.setColumn(
4953
Utils.getColumn(expression),
5054
Utils.getType(this.metadata.instance, expression),
51-
isKeyColumn,
52-
isAutoIncrement
55+
primaryKeyType
56+
// isKeyColumn,
57+
// isAutoIncrement
5358
);
5459
}
5560

@@ -62,7 +67,8 @@ export abstract class ColumnsBaseBuilder<
6267
for (const key in this.columns) {
6368
if (this.columns.hasOwnProperty(key)) {
6469
const column = this.columns[key];
65-
if (column.isKeyColumn) {
70+
if (column.primaryKeyType) {
71+
// if (column.isKeyColumn) {
6672
result.keyColumns.push(column.name);
6773
}
6874
result.columns.push(this.columnFormat(column));
@@ -72,7 +78,8 @@ export abstract class ColumnsBaseBuilder<
7278
}
7379

7480
protected isCompositeKey(): boolean {
75-
return this.metadata.mapperTable.columns.filter(x => x.isKeyColumn === true).length > 1;
81+
return this.metadata.mapperTable.columns.filter(x => !!x.primaryKeyType).length > 1;
82+
// return this.metadata.mapperTable.columns.filter(x => x.isKeyColumn === true).length > 1;
7683
}
7784

7885
protected abstract columnFormat(column: TColumn): string;
@@ -83,8 +90,9 @@ export abstract class ColumnsBaseBuilder<
8390
column: string,
8491
value: ValueTypeToParse,
8592
fieldType: FieldType,
86-
isKeyColumn: boolean,
87-
isAutoIncrement: boolean
93+
primaryKeyType: PrimaryKeyType
94+
// isKeyColumn: boolean,
95+
// isAutoIncrement: boolean
8896
): TThis;
8997

9098
private setAllColumns(mapper: MapperTable, modelWithValue: T): void {
@@ -95,8 +103,9 @@ export abstract class ColumnsBaseBuilder<
95103
column.column,
96104
Utils.getValue(modelWithValue, column.fieldReference),
97105
column.fieldType,
98-
column.isKeyColumn,
99-
column.isAutoIncrement
106+
column.primaryKeyType
107+
// column.isKeyColumn,
108+
// column.isAutoIncrement
100109
);
101110
}
102111
}

src/core/columns-values-builder.ts

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { PrimaryKeyType } from "./enums/primary-key-type";
12
import { MetadataTable } from "../metadata-table";
23
import { ExpressionOrColumn, Utils, ValueTypeToParse } from "./utils";
34
import { ColumnsBaseBuilder } from "./columns-base-builder";
@@ -20,43 +21,55 @@ export abstract class ColumnsValuesBuilder<
2021
column: string,
2122
value: ValueTypeToParse,
2223
fieldType: FieldType,
23-
isKeyColumn?: boolean,
24-
isAutoIncrement?: boolean): TThis {
24+
primaryKeyType?: PrimaryKeyType
25+
// isKeyColumn?: boolean,
26+
// isAutoIncrement?: boolean
27+
): TThis {
28+
// verificar se é GUID, se for gerar um valor para o mesmo
29+
if (primaryKeyType === PrimaryKeyType.Guid) {
30+
// gerar GUID
31+
value = Utils.GUID();
32+
}
2533
this.columns.push({
2634
name: column,
2735
type: fieldType,
2836
value: Utils.getValueType(value, fieldType),
29-
isKeyColumn,
30-
isAutoIncrement
37+
primaryKeyType
38+
// isKeyColumn,
39+
// isAutoIncrement
3140
});
3241
return this.getInstance();
3342
}
3443

3544
public setValue<TReturn extends ValueTypeToParse>(
3645
expression: ExpressionOrColumn<TReturn, T>,
3746
value: TReturn,
38-
isKeyColumn?: boolean,
39-
isAutoIncrement?: boolean
47+
primaryKeyType?: PrimaryKeyType
48+
// isKeyColumn?: boolean,
49+
// isAutoIncrement?: boolean
4050
): TThis {
4151
return this.setColumnValue(
4252
Utils.getColumn(expression),
4353
value,
4454
Utils.getType(value),
45-
isKeyColumn,
46-
isAutoIncrement
55+
primaryKeyType
56+
// isKeyColumn,
57+
// isAutoIncrement
4758
);
4859
}
4960

5061
public set<TReturn extends ValueTypeToParse>(
5162
expression: ExpressionOrColumn<TReturn, T>,
52-
isKeyColumn?: boolean,
53-
isAutoIncrement?: boolean
63+
primaryKeyType?: PrimaryKeyType
64+
// isKeyColumn?: boolean,
65+
// isAutoIncrement?: boolean
5466
): TThis {
5567
return this.setValue(
5668
expression,
5769
this.getValueByExpression(expression),
58-
isKeyColumn,
59-
isAutoIncrement
70+
primaryKeyType
71+
// isKeyColumn,
72+
// isAutoIncrement
6073
);
6174
}
6275

@@ -66,7 +79,8 @@ export abstract class ColumnsValuesBuilder<
6679
keyColumns: [],
6780
params: [],
6881
};
69-
result.keyColumns = this.columns.filter(x => x.isKeyColumn).map(x => x.name);
82+
result.keyColumns = this.columns.filter(x => !!x.primaryKeyType).map(x => x.name);
83+
// result.keyColumns = this.columns.filter(x => x.isKeyColumn).map(x => x.name);
7084
this.columns.forEach((column) => {
7185
const columnName = this.columnFormat(column);
7286
if (columnName !== void 0) {

src/core/enums/field-type.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ export enum FieldType {
66
OBJECT,
77
FUNCTION,
88
ARRAY,
9-
NULL
9+
NULL,
10+
// GUID
1011
}

src/core/enums/primary-key-type.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export enum PrimaryKeyType {
2+
Assigned = 1,
3+
AutoIncrement,
4+
Guid
5+
}

src/core/utils.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { ProjectionsHelper } from "./projections-helper";
1616
import { ColumnParams } from "./column-params";
1717
import { ColumnRef } from "./column-ref";
1818
import { PlanRef } from "./plan-ref";
19+
import * as uuidv4 from "uuid/v4";
1920

2021
export type ValueType = number | string | boolean;
2122
export type ValueTypeToParse = ValueType | moment.Moment | Date | object;
@@ -35,6 +36,11 @@ export class Utils {
3536
private static _expressionUtils: ExpressionUtils;
3637
private static _databaseHelper: DatabaseHelper;
3738

39+
// Fonte: https://www.npmjs.com/package/uuid
40+
public static GUID() {
41+
return uuidv4();
42+
}
43+
3844
public static is(value: any, type: string): boolean {
3945
return typeof value === type;
4046
}

src/crud/crud-base-builder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export abstract class CrudBaseBuilder<T, TColumnsBuilder extends ColumnsValuesBu
1717
constructor(
1818
protected readonly _typeT: new () => T,
1919
protected readonly _alias: string = void 0,
20-
protected readonly _modelToSave: T = void 0,
20+
// protected readonly _modelToSave: T = void 0,
2121
) {
2222
this._tablename = _typeT.name;
2323
if (!this._alias) {

src/crud/insert/insert-builder.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ export class InsertBuilder<T> extends CrudBaseBuilder<T, InsertColumnsBuilder<T>
1010
typeT: new () => T,
1111
private _metadata: MetadataTable<T>,
1212
alias: string = void 0,
13-
modelToSave: T = void 0,
13+
protected readonly _modelToSave: T = void 0,
1414
) {
15-
super(typeT, alias, modelToSave);
15+
super(typeT, alias);
1616
}
1717

1818
public columns(columnsCallback: (columns: InsertColumnsBuilder<T>) => void): InsertBuilder<T> {
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ColumnsValuesBuilder } from "../../core/columns-values-builder";
22
import { Column } from "../../core/column";
3+
import { PrimaryKeyType } from "../../core/enums/primary-key-type";
34

45
export class InsertColumnsBuilder<T> extends ColumnsValuesBuilder<T, InsertColumnsBuilder<T>> {
56

@@ -8,6 +9,7 @@ export class InsertColumnsBuilder<T> extends ColumnsValuesBuilder<T, InsertColum
89
}
910

1011
protected columnFormat(column: Column): string {
11-
return column.isAutoIncrement ? void 0 : column.name;
12+
return column.primaryKeyType === PrimaryKeyType.AutoIncrement ? void 0 : column.name;
13+
// return column.isAutoIncrement ? void 0 : column.name;
1214
}
1315
}

0 commit comments

Comments
 (0)