Skip to content

Commit 51440e5

Browse files
author
fernandocode
committed
Changed return type of asynchronous methods from promises to observables.
1 parent a6d617a commit 51440e5

13 files changed

Lines changed: 259 additions & 239 deletions

package-lock.json

Lines changed: 12 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "database-builder",
3-
"version": "0.1.0-rc.26",
3+
"version": "0.1.0-rc.27",
44
"description": "Library to assist in creating and maintaining SQL commands.",
55
"main": "./src/index.js",
66
"types": "./src/index.d.ts",
@@ -14,9 +14,9 @@
1414
"dependencies": {
1515
"lambda-expression": ">=0.1.3",
1616
"lodash": "^4.17.11",
17-
"moment": ">=2.22.0",
18-
"uuid": ">=3.3.2",
19-
"rxjs": ">=5.5.9"
17+
"moment": "^2.22.0",
18+
"uuid": "^3.3.2",
19+
"rxjs": "^5.5.9"
2020
},
2121
"devDependencies": {
2222
"@types/chai": "^4.1.1",

src/core/executable-builder.ts

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,42 +9,45 @@ export class ExecutableBuilder {
99

1010
}
1111

12-
public executeObserver(
12+
public execute(
1313
compiled: QueryCompiled[],
1414
database: DatabaseBase,
1515
): Observable<DatabaseResult[]> {
1616
return Observable.create((observer: Observer<DatabaseResult[]>) => {
1717
this.executorLinked(compiled, [], database)
18-
.then(result => {
18+
.subscribe(result => {
1919
observer.next(result);
2020
observer.complete();
21-
})
22-
.catch(err => {
21+
}, err => {
2322
observer.error(err);
2423
observer.complete();
2524
});
2625
});
2726
}
2827

29-
public execute(
30-
compiled: QueryCompiled[],
31-
database: DatabaseBase,
32-
): Promise<DatabaseResult[]> {
33-
return this.executorLinked(compiled, [], database);
34-
}
35-
3628
private executeSql(
3729
database: DatabaseBase, compiled: QueryCompiled,
38-
): Promise<DatabaseResult> {
39-
this.log(compiled);
40-
return database.executeSql(
41-
compiled.query,
42-
compiled.params,
43-
);
30+
): Observable<DatabaseResult> {
31+
return Observable.create((observer: Observer<DatabaseResult>) => {
32+
this.log(compiled);
33+
database.executeSql(
34+
compiled.query,
35+
compiled.params,
36+
)
37+
.then(result => {
38+
observer.next(result);
39+
observer.complete();
40+
})
41+
.catch(err => {
42+
observer.error(err);
43+
observer.complete();
44+
});
45+
});
4446
}
4547

4648
private checkParams(
47-
script: QueryCompiled, resultadosAnteriores: DatabaseResult[]
49+
script: QueryCompiled,
50+
resultadosAnteriores: DatabaseResult[]
4851
): QueryCompiled {
4952
const paramsResult: any[] = [];
5053
script.params.forEach(param => {
@@ -66,22 +69,28 @@ export class ExecutableBuilder {
6669
compiled: QueryCompiled[],
6770
dataResultsApplied: DatabaseResult[],
6871
database: DatabaseBase
69-
): Promise<DatabaseResult[]> {
70-
return new Promise((resolve, reject) => {
72+
): Observable<DatabaseResult[]> {
73+
return Observable.create((observer: Observer<DatabaseResult[]>) => {
7174
if (compiled && compiled.length > 0) {
7275
this.executeSql(database, this.checkParams(compiled[0], dataResultsApplied))
73-
.then(result => {
76+
.subscribe(result => {
7477
// remove o item executado
7578
compiled.shift();
7679
this.executorLinked(compiled, dataResultsApplied.concat([result]), database)
77-
.then(res => {
78-
resolve([result].concat(res));
79-
})
80-
.catch((err: any) => reject(err));
81-
})
82-
.catch((err: any) => reject(err));
80+
.subscribe(res => {
81+
observer.next([result].concat(res));
82+
observer.complete();
83+
}, (err: any) => {
84+
observer.error(err);
85+
observer.complete();
86+
});
87+
}, (err: any) => {
88+
observer.error(err);
89+
observer.complete();
90+
});
8391
} else {
84-
resolve([]);
92+
observer.next([]);
93+
observer.complete();
8594
}
8695
});
8796
}

src/crud/crud-base.ts

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { PrimaryKeyType } from "../core/enums/primary-key-type";
77
import { MapperTable } from "../mapper-table";
88
import { QueryCompiled } from "../core/query-compiled";
99
import { SqlBase } from "./sql-base";
10-
import { Utils } from "../core/utils";
10+
import { Observable, Observer } from "rxjs";
1111

1212
export abstract class CrudBase<
1313
T,
@@ -33,23 +33,28 @@ export abstract class CrudBase<
3333
return this._builder.compile();
3434
}
3535

36-
protected checkDatabaseResult(promise: Promise<DatabaseResult[]>): Promise<DatabaseResult[]> {
36+
protected checkDatabaseResult(promise: Observable<DatabaseResult[]>): Observable<DatabaseResult[]> {
3737
if (this._typeCrud === TypeCrud.CREATE) {
38-
return new Promise<DatabaseResult[]>((resolve, reject) => {
39-
promise.then(results => {
40-
const result = results[0];
41-
if (KeyUtils.primaryKeyType(this._builder.getMapper()) === PrimaryKeyType.AutoIncrement) {
42-
KeyUtils.setKey(this._builder.getMapper(), this._builder.getModel(), result.insertId);
43-
} else {
44-
const keyValue = KeyUtils.getKey(this._builder.getMapper(), this._builder.getModel());
45-
try {
46-
result.insertId = keyValue;
47-
} catch (error) {
48-
// ignore error readonly property
38+
return Observable.create((observer: Observer<DatabaseResult[]>) => {
39+
promise
40+
.subscribe(results => {
41+
const result = results[0];
42+
if (KeyUtils.primaryKeyType(this._builder.getMapper()) === PrimaryKeyType.AutoIncrement) {
43+
KeyUtils.setKey(this._builder.getMapper(), this._builder.getModel(), result.insertId);
44+
} else {
45+
const keyValue = KeyUtils.getKey(this._builder.getMapper(), this._builder.getModel());
46+
try {
47+
result.insertId = keyValue;
48+
} catch (error) {
49+
// ignore error readonly property
50+
}
4951
}
50-
}
51-
resolve(results);
52-
}).catch(reject);
52+
observer.next(results);
53+
observer.complete();
54+
}, err => {
55+
observer.error(err);
56+
observer.complete();
57+
});
5358
});
5459
}
5560
return promise;

src/crud/query/query-builder-base-contract.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,5 @@ export interface QueryBuilderBaseContract<T, TQuery extends QueryBuilderBaseCont
4747

4848
unionAll(query: QueryCompiled[] | SqlCompilable): TQuery;
4949

50-
// execute(database: DatabaseBase): Promise<DatabaseResult[]>;
51-
5250
compileTable(): string;
5351
}

src/crud/query/query-readable-builder.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { QueryReadableBuilderBase } from "./query-readable-builder-base";
33
import { DatabaseBuilderError } from "../../core/errors";
44
import { MapperTable } from "../../mapper-table";
55
import { SqlExecutable } from "../sql-executable";
6+
import { Observable, Observer } from "rxjs";
67

78
export class QueryReadableBuilder<T> extends QueryReadableBuilderBase {
89

@@ -18,21 +19,25 @@ export class QueryReadableBuilder<T> extends QueryReadableBuilderBase {
1819
queryBuilder: SqlExecutable,
1920
mapperTable: MapperTable,
2021
database: DatabaseBase,
21-
): Promise<T[]> {
22-
return new Promise((resolve, reject) => {
22+
): Observable<T[]> {
23+
return Observable.create((observer: Observer<T[]>) => {
2324
queryBuilder.execute(cascade, database)
24-
.then((cursors) => {
25+
.subscribe((cursors) => {
2526
this.log(cursors);
2627
try {
2728
if (cursors.length !== 1) {
2829
throw new DatabaseBuilderError(`"toCast" is not ready to solve multiple queries in one batch!`);
2930
}
30-
resolve(this.read(cursors[0], this._typeT, mapperTable));
31+
observer.next(this.read(cursors[0], this._typeT, mapperTable));
32+
observer.complete();
3133
} catch (error) {
32-
reject(error);
34+
observer.error(error);
35+
observer.complete();
3336
}
34-
})
35-
.catch(reject);
37+
}, err => {
38+
observer.error(err);
39+
observer.complete();
40+
});
3641
});
3742
}
3843
}

0 commit comments

Comments
 (0)