@new-hros/libs-sql 1.1.2 → 1.1.3
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.
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { DeepPartial, FindOptionsWhere, Repository } from 'typeorm';
|
|
1
|
+
import { DeepPartial, FindManyOptions, FindOneOptions, FindOptionsWhere, Repository } from 'typeorm';
|
|
2
2
|
import { BaseEntity } from './base.entity';
|
|
3
3
|
import { PaginatedResult, PaginationOptions } from './pagination';
|
|
4
4
|
import { TransactionService } from './transaction.service';
|
|
5
|
-
export interface QueryOneOptions {
|
|
5
|
+
export interface QueryOneOptions<Entity = any> extends FindOneOptions<Entity> {
|
|
6
6
|
required?: boolean;
|
|
7
7
|
}
|
|
8
|
-
export interface QueryManyOptions {
|
|
8
|
+
export interface QueryManyOptions<Entity = any> extends FindManyOptions<Entity> {
|
|
9
9
|
onlyIds?: boolean;
|
|
10
10
|
pagination?: PaginationOptions;
|
|
11
|
-
cache?: boolean;
|
|
12
|
-
withDeleted?: boolean;
|
|
13
11
|
}
|
|
14
12
|
export declare abstract class BaseRepository<Entity extends BaseEntity> {
|
|
15
13
|
protected readonly entityTarget: new () => Entity;
|
|
@@ -20,21 +18,24 @@ export declare abstract class BaseRepository<Entity extends BaseEntity> {
|
|
|
20
18
|
private applyTenantScope;
|
|
21
19
|
create(entityData: DeepPartial<Entity>): Promise<Entity>;
|
|
22
20
|
findOne(where: FindOptionsWhere<Entity>): Promise<Entity | null>;
|
|
23
|
-
findOne(where: FindOptionsWhere<Entity>, options: QueryOneOptions & {
|
|
21
|
+
findOne(where: FindOptionsWhere<Entity>, options: QueryOneOptions<Entity> & {
|
|
24
22
|
required: true;
|
|
25
23
|
}): Promise<Entity>;
|
|
24
|
+
findOne(where: FindOptionsWhere<Entity>, options?: QueryOneOptions<Entity>): Promise<Entity | null>;
|
|
26
25
|
findById(id: string): Promise<Entity | null>;
|
|
27
|
-
findById(id: string, options: QueryOneOptions & {
|
|
26
|
+
findById(id: string, options: QueryOneOptions<Entity> & {
|
|
28
27
|
required: true;
|
|
29
28
|
}): Promise<Entity>;
|
|
29
|
+
findById(id: string, options?: QueryOneOptions<Entity>): Promise<Entity | null>;
|
|
30
30
|
findPaginated(options: PaginationOptions, where?: FindOptionsWhere<Entity>): Promise<PaginatedResult<Entity>>;
|
|
31
31
|
find(where: FindOptionsWhere<Entity>): Promise<Entity[]>;
|
|
32
|
-
find(where: FindOptionsWhere<Entity>, options: QueryManyOptions & {
|
|
32
|
+
find(where: FindOptionsWhere<Entity>, options: QueryManyOptions<Entity> & {
|
|
33
33
|
onlyIds: true;
|
|
34
34
|
}): Promise<string[]>;
|
|
35
|
-
find(where: FindOptionsWhere<Entity>, options: QueryManyOptions & {
|
|
35
|
+
find(where: FindOptionsWhere<Entity>, options: QueryManyOptions<Entity> & {
|
|
36
36
|
pagination: PaginationOptions;
|
|
37
37
|
}): Promise<PaginatedResult<Entity>>;
|
|
38
|
+
find(where: FindOptionsWhere<Entity>, options?: QueryManyOptions<Entity>): Promise<Entity[]>;
|
|
38
39
|
update(id: string, entityData: DeepPartial<Entity>): Promise<Entity>;
|
|
39
40
|
delete(id: string): Promise<void>;
|
|
40
41
|
forceDelete(id: string): Promise<void>;
|
package/dist/base.repository.js
CHANGED
|
@@ -22,6 +22,12 @@ class BaseRepository {
|
|
|
22
22
|
}
|
|
23
23
|
applyTenantScope(where) {
|
|
24
24
|
const scope = { tenantCode: this.tenantCode };
|
|
25
|
+
if (Array.isArray(where)) {
|
|
26
|
+
if (where.length === 0) {
|
|
27
|
+
return scope;
|
|
28
|
+
}
|
|
29
|
+
return where.map((w) => ({ ...w, ...scope }));
|
|
30
|
+
}
|
|
25
31
|
return { ...(where || {}), ...scope };
|
|
26
32
|
}
|
|
27
33
|
async create(entityData) {
|
|
@@ -32,19 +38,24 @@ class BaseRepository {
|
|
|
32
38
|
return this.repository.save(entity);
|
|
33
39
|
}
|
|
34
40
|
async findOne(where, options) {
|
|
41
|
+
const { required, where: optionsWhere, ...restOptions } = options || {};
|
|
42
|
+
const mergedWhere = optionsWhere || where;
|
|
35
43
|
const data = await this.repository.findOne({
|
|
36
|
-
|
|
44
|
+
...restOptions,
|
|
45
|
+
where: this.applyTenantScope(mergedWhere),
|
|
37
46
|
});
|
|
38
|
-
if (!data &&
|
|
39
|
-
throw new Error(`Record not found with query: ${where}`);
|
|
47
|
+
if (!data && required) {
|
|
48
|
+
throw new Error(`Record not found with query: ${JSON.stringify(where)}`);
|
|
40
49
|
}
|
|
41
50
|
return data || null;
|
|
42
51
|
}
|
|
43
52
|
async findById(id, options) {
|
|
53
|
+
const { required, where: _ignoredWhere, ...restOptions } = options || {};
|
|
44
54
|
const data = await this.repository.findOne({
|
|
55
|
+
...restOptions,
|
|
45
56
|
where: this.applyTenantScope({ id }),
|
|
46
57
|
});
|
|
47
|
-
if (!data &&
|
|
58
|
+
if (!data && required) {
|
|
48
59
|
throw new Error(`Record not found with ID: ${id}`);
|
|
49
60
|
}
|
|
50
61
|
return data || null;
|
|
@@ -62,18 +73,23 @@ class BaseRepository {
|
|
|
62
73
|
}
|
|
63
74
|
async find(where, options) {
|
|
64
75
|
if (options?.onlyIds) {
|
|
76
|
+
const { onlyIds: _ignoredOnlyIds, pagination: _ignoredPagination, where: optionsWhere, ...restOptions } = options;
|
|
77
|
+
const mergedWhere = optionsWhere || where;
|
|
65
78
|
const data = await this.repository.find({
|
|
79
|
+
...restOptions,
|
|
66
80
|
select: { id: true },
|
|
67
|
-
where: this.applyTenantScope(
|
|
81
|
+
where: this.applyTenantScope(mergedWhere),
|
|
68
82
|
});
|
|
69
83
|
return data.map((item) => item.id);
|
|
70
84
|
}
|
|
71
85
|
if (options?.pagination) {
|
|
72
86
|
return this.findPaginated(options.pagination, where);
|
|
73
87
|
}
|
|
88
|
+
const { where: optionsWhere, ...restOptions } = options || {};
|
|
89
|
+
const mergedWhere = optionsWhere || where;
|
|
74
90
|
return this.repository.find({
|
|
75
|
-
...
|
|
76
|
-
where: this.applyTenantScope(
|
|
91
|
+
...restOptions,
|
|
92
|
+
where: this.applyTenantScope(mergedWhere),
|
|
77
93
|
});
|
|
78
94
|
}
|
|
79
95
|
async update(id, entityData) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../src/base.repository.ts"],"names":[],"mappings":";;;AAAA,mDAA4D;
|
|
1
|
+
{"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../src/base.repository.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@new-hros/libs-sql",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "NestJS multi-tenant platform foundation - SQL Database Layer",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/jest": "^29.5.11",
|
|
36
36
|
"jest": "^29.7.0",
|
|
37
|
+
"sqlite3": "^5.1.7",
|
|
37
38
|
"ts-jest": "^29.1.1"
|
|
38
39
|
}
|
|
39
40
|
}
|