@new-hros/libs-sql 1.1.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.repository.d.ts +11 -2
- package/dist/base.repository.js +48 -44
- package/dist/base.repository.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,10 +4,16 @@ import { PaginatedResult, PaginationOptions } from './pagination';
|
|
|
4
4
|
import { TransactionService } from './transaction.service';
|
|
5
5
|
export interface QueryOneOptions<Entity = any> extends FindOneOptions<Entity> {
|
|
6
6
|
required?: boolean;
|
|
7
|
+
withTenancy?: false;
|
|
7
8
|
}
|
|
8
9
|
export interface QueryManyOptions<Entity = any> extends FindManyOptions<Entity> {
|
|
9
10
|
onlyIds?: boolean;
|
|
10
11
|
pagination?: PaginationOptions;
|
|
12
|
+
withTenancy?: false;
|
|
13
|
+
}
|
|
14
|
+
export interface ExistsOptions<Entity = any> extends FindOneOptions<Entity> {
|
|
15
|
+
throwIfExists?: boolean;
|
|
16
|
+
withTenancy?: false;
|
|
11
17
|
}
|
|
12
18
|
export declare abstract class BaseRepository<Entity extends BaseEntity> {
|
|
13
19
|
protected readonly entityTarget: new () => Entity;
|
|
@@ -27,7 +33,7 @@ export declare abstract class BaseRepository<Entity extends BaseEntity> {
|
|
|
27
33
|
required: true;
|
|
28
34
|
}): Promise<Entity>;
|
|
29
35
|
findById(id: string, options?: QueryOneOptions<Entity>): Promise<Entity | null>;
|
|
30
|
-
findPaginated(options: PaginationOptions, where?: FindOptionsWhere<Entity>): Promise<PaginatedResult<Entity>>;
|
|
36
|
+
findPaginated(options: PaginationOptions, where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[]): Promise<PaginatedResult<Entity>>;
|
|
31
37
|
find(where: FindOptionsWhere<Entity>): Promise<Entity[]>;
|
|
32
38
|
find(where: FindOptionsWhere<Entity>, options: QueryManyOptions<Entity> & {
|
|
33
39
|
onlyIds: true;
|
|
@@ -40,5 +46,8 @@ export declare abstract class BaseRepository<Entity extends BaseEntity> {
|
|
|
40
46
|
delete(id: string): Promise<void>;
|
|
41
47
|
forceDelete(id: string): Promise<void>;
|
|
42
48
|
restore(id: string): Promise<void>;
|
|
43
|
-
exists(
|
|
49
|
+
exists(options: ExistsOptions<Entity>): Promise<boolean>;
|
|
50
|
+
exists(options: ExistsOptions<Entity> & {
|
|
51
|
+
throwIfExists: true;
|
|
52
|
+
}): Promise<true>;
|
|
44
53
|
}
|
package/dist/base.repository.js
CHANGED
|
@@ -14,11 +14,7 @@ class BaseRepository {
|
|
|
14
14
|
return this.transactionService.getManager().getRepository(this.entityTarget);
|
|
15
15
|
}
|
|
16
16
|
get tenantCode() {
|
|
17
|
-
|
|
18
|
-
if (!code) {
|
|
19
|
-
throw new Error('Tenant code is missing from active RequestContext');
|
|
20
|
-
}
|
|
21
|
-
return code;
|
|
17
|
+
return libs_core_1.RequestContextService.getTenantCode();
|
|
22
18
|
}
|
|
23
19
|
applyTenantScope(where) {
|
|
24
20
|
const scope = { tenantCode: this.tenantCode };
|
|
@@ -39,10 +35,18 @@ class BaseRepository {
|
|
|
39
35
|
}
|
|
40
36
|
async findOne(where, options) {
|
|
41
37
|
const { required, where: optionsWhere, ...restOptions } = options || {};
|
|
42
|
-
const
|
|
38
|
+
const combinedWhere = optionsWhere
|
|
39
|
+
? Array.isArray(optionsWhere)
|
|
40
|
+
? optionsWhere.map((w) => ({ ...(where || {}), ...w }))
|
|
41
|
+
: { ...(where || {}), ...optionsWhere }
|
|
42
|
+
: where;
|
|
43
|
+
let mergedWhere = combinedWhere;
|
|
44
|
+
if (restOptions.withTenancy !== false) {
|
|
45
|
+
mergedWhere = this.applyTenantScope(combinedWhere);
|
|
46
|
+
}
|
|
43
47
|
const data = await this.repository.findOne({
|
|
44
48
|
...restOptions,
|
|
45
|
-
where:
|
|
49
|
+
where: mergedWhere,
|
|
46
50
|
});
|
|
47
51
|
if (!data && required) {
|
|
48
52
|
throw new Error(`Record not found with query: ${JSON.stringify(where)}`);
|
|
@@ -50,15 +54,15 @@ class BaseRepository {
|
|
|
50
54
|
return data || null;
|
|
51
55
|
}
|
|
52
56
|
async findById(id, options) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
try {
|
|
58
|
+
return await this.findOne({ id }, options);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (options?.required) {
|
|
62
|
+
throw new Error(`Record not found with ID: ${id}`);
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
60
65
|
}
|
|
61
|
-
return data || null;
|
|
62
66
|
}
|
|
63
67
|
async findPaginated(options, where) {
|
|
64
68
|
const page = Math.max(1, options.page || 1);
|
|
@@ -72,59 +76,59 @@ class BaseRepository {
|
|
|
72
76
|
return (0, pagination_1.buildPaginatedResult)(data, total, options);
|
|
73
77
|
}
|
|
74
78
|
async find(where, options) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
const { where: optionsWhere, onlyIds, pagination, ...restOptions } = options || {};
|
|
80
|
+
const combinedWhere = optionsWhere
|
|
81
|
+
? Array.isArray(optionsWhere)
|
|
82
|
+
? optionsWhere.map((w) => ({ ...(where || {}), ...w }))
|
|
83
|
+
: { ...(where || {}), ...optionsWhere }
|
|
84
|
+
: where;
|
|
85
|
+
let mergedWhere = combinedWhere;
|
|
86
|
+
if (restOptions.withTenancy !== false) {
|
|
87
|
+
mergedWhere = this.applyTenantScope(combinedWhere);
|
|
88
|
+
}
|
|
89
|
+
if (onlyIds) {
|
|
78
90
|
const data = await this.repository.find({
|
|
79
91
|
...restOptions,
|
|
80
92
|
select: { id: true },
|
|
81
|
-
where:
|
|
93
|
+
where: mergedWhere,
|
|
82
94
|
});
|
|
83
95
|
return data.map((item) => item.id);
|
|
84
96
|
}
|
|
85
|
-
if (
|
|
86
|
-
return this.findPaginated(
|
|
97
|
+
if (pagination) {
|
|
98
|
+
return this.findPaginated(pagination, mergedWhere);
|
|
87
99
|
}
|
|
88
|
-
const { where: optionsWhere, ...restOptions } = options || {};
|
|
89
|
-
const mergedWhere = optionsWhere || where;
|
|
90
100
|
return this.repository.find({
|
|
91
101
|
...restOptions,
|
|
92
|
-
where:
|
|
102
|
+
where: mergedWhere,
|
|
93
103
|
});
|
|
94
104
|
}
|
|
95
105
|
async update(id, entityData) {
|
|
96
|
-
|
|
97
|
-
const updated = this.repository.merge(existing, entityData);
|
|
98
|
-
return this.repository.save(updated);
|
|
106
|
+
return this.repository.save({ ...entityData, id });
|
|
99
107
|
}
|
|
100
108
|
async delete(id) {
|
|
101
|
-
|
|
102
|
-
if (!isExist) {
|
|
103
|
-
throw new Error(`Record not found with ID: ${id}`);
|
|
104
|
-
}
|
|
109
|
+
await this.exists({ id, withTenancy: false, throwIfExists: true });
|
|
105
110
|
await this.repository.softDelete(id);
|
|
106
111
|
}
|
|
107
112
|
async forceDelete(id) {
|
|
108
|
-
|
|
109
|
-
if (!isExist) {
|
|
110
|
-
throw new Error(`Record not found with ID: ${id}`);
|
|
111
|
-
}
|
|
113
|
+
await this.exists({ id, withTenancy: false, throwIfExists: true });
|
|
112
114
|
await this.repository.delete(id);
|
|
113
115
|
}
|
|
114
116
|
async restore(id) {
|
|
115
|
-
|
|
116
|
-
where: this.applyTenantScope({ id }),
|
|
117
|
-
withDeleted: true,
|
|
118
|
-
});
|
|
119
|
-
if (!existing) {
|
|
120
|
-
throw new Error(`Soft-deleted record not found with ID: ${id}`);
|
|
121
|
-
}
|
|
117
|
+
await this.exists({ id, withTenancy: false, throwIfExists: true, withDeleted: true });
|
|
122
118
|
await this.repository.restore(id);
|
|
123
119
|
}
|
|
124
|
-
async exists(
|
|
120
|
+
async exists(options) {
|
|
121
|
+
let where = options.where;
|
|
122
|
+
if (options.withTenancy !== false) {
|
|
123
|
+
where = this.applyTenantScope(options.where);
|
|
124
|
+
}
|
|
125
125
|
const count = await this.repository.count({
|
|
126
|
-
|
|
126
|
+
...options,
|
|
127
|
+
where,
|
|
127
128
|
});
|
|
129
|
+
if (count === 0 && options.throwIfExists) {
|
|
130
|
+
throw new Error(`Record not found with query ${JSON.stringify(where)}`);
|
|
131
|
+
}
|
|
128
132
|
return count > 0;
|
|
129
133
|
}
|
|
130
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../src/base.repository.ts"],"names":[],"mappings":";;;AAAA,mDAA4D;AAU5D,6CAAwF;
|
|
1
|
+
{"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../src/base.repository.ts"],"names":[],"mappings":";;;AAAA,mDAA4D;AAU5D,6CAAwF;AAmBxF,MAAsB,cAAc;IAEb;IACA;IAFrB,YACqB,YAA8B,EAC9B,kBAAsC;QADtC,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,uBAAkB,GAAlB,kBAAkB,CAAoB;IACxD,CAAC;IAEJ,IAAc,UAAU;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/E,CAAC;IAED,IAAc,UAAU;QACtB,OAAO,iCAAqB,CAAC,aAAa,EAAE,CAAC;IAC/C,CAAC;IAEO,gBAAgB,CACtB,KAA6D;QAE7D,MAAM,KAAK,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,KAA4C,CAAC;YACtD,CAAC;YACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,CAA6B,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,EAA8B,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAA+B;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YACpC,GAAG,UAAU;YACb,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAa,CAA+B,CAAC;IAC3E,CAAC;IAWD,KAAK,CAAC,OAAO,CACX,KAA+B,EAC/B,OAAiC;QAEjC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QACxE,MAAM,aAAa,GAAG,YAAY;YAChC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC3B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvD,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,EAAE;YACzC,CAAC,CAAC,KAAK,CAAC;QACV,IAAI,WAAW,GAAG,aAAa,CAAC;QAChC,IAAI,WAAW,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACtC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACzC,GAAG,WAAW;YACd,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAQD,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,OAAiC;QAC1D,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAA8B,EAAE,OAAO,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,OAA0B,EAC1B,KAA6D;QAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QAEhC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YACvD,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACnC,IAAI;YACJ,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QAEH,OAAO,IAAA,iCAAoB,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAeD,KAAK,CAAC,IAAI,CAAC,KAA+B,EAAE,OAAkC;QAC5E,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QACnF,MAAM,aAAa,GAAG,YAAY;YAChC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC3B,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvD,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,EAAE;YACzC,CAAC,CAAC,KAAK,CAAC;QACV,IAAI,WAAW,GAAG,aAAa,CAAC;QAChC,IAAI,WAAW,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACtC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACtC,GAAG,WAAW;gBACd,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAA0C;gBAC5D,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,GAAG,WAAW;YACd,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,UAA+B;QACtD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAA2B,CAAC,CAAC;QAE5F,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAA2B,CAAC,CAAC;QAE5F,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAA2B,CAAC,CAAC;QAE/G,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAID,KAAK,CAAC,MAAM,CAAC,OAA8B;QACzC,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC1B,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAClC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACxC,GAAG,OAAO;YACV,KAAK;SACN,CAAC,CAAC;QAEH,IAAI,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;CACF;AA5LD,wCA4LC"}
|