Skip to content

Commit 3dcbada

Browse files
Merge branch 'main' of github.com:andrechristikan/ack-nestjs-mongoose into development
2 parents cc47306 + 1b3871a commit 3dcbada

File tree

13 files changed

+146
-42
lines changed

13 files changed

+146
-42
lines changed

src/common/auth/interfaces/auth.api.service.interface.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import {
99
} from 'src/common/auth/interfaces/auth.interface';
1010
import { AuthApiDocument } from 'src/common/auth/schemas/auth.api.schema';
1111
import {
12+
IDatabaseCreateOptions,
1213
IDatabaseFindAllOptions,
14+
IDatabaseFindOneOptions,
1315
IDatabaseOptions,
1416
} from 'src/common/database/interfaces/database.interface';
1517

@@ -19,26 +21,38 @@ export interface IAuthApiService {
1921
options?: IDatabaseFindAllOptions
2022
): Promise<AuthApiDocument[]>;
2123

22-
findOneById(_id: string): Promise<AuthApiDocument>;
24+
findOneById(
25+
_id: string,
26+
options?: IDatabaseFindOneOptions
27+
): Promise<AuthApiDocument>;
2328

24-
findOne(find: Record<string, any>): Promise<AuthApiDocument>;
29+
findOne(
30+
find: Record<string, any>,
31+
options?: IDatabaseFindOneOptions
32+
): Promise<AuthApiDocument>;
2533

26-
findOneByKey(key: string): Promise<AuthApiDocument>;
34+
findOneByKey(
35+
key: string,
36+
options?: IDatabaseFindOneOptions
37+
): Promise<AuthApiDocument>;
2738

28-
getTotal(find?: Record<string, any>): Promise<number>;
39+
getTotal(
40+
find?: Record<string, any>,
41+
options?: IDatabaseOptions
42+
): Promise<number>;
2943

3044
inactive(_id: string, options?: IDatabaseOptions): Promise<AuthApiDocument>;
3145

3246
active(_id: string, options?: IDatabaseOptions): Promise<AuthApiDocument>;
3347

3448
create(
3549
data: AuthApiCreateDto,
36-
options?: IDatabaseOptions
50+
options?: IDatabaseCreateOptions
3751
): Promise<IAuthApi>;
3852

3953
createRaw(
4054
data: AuthApiCreateRawDto,
41-
options?: IDatabaseOptions
55+
options?: IDatabaseCreateOptions
4256
): Promise<IAuthApi>;
4357

4458
updateOneById(

src/common/auth/services/auth.api.service.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,11 @@ export class AuthApiService implements IAuthApiService {
8181
);
8282
}
8383

84-
async getTotal(find?: Record<string, any>): Promise<number> {
85-
return this.authApiRepository.getTotal(find);
84+
async getTotal(
85+
find?: Record<string, any>,
86+
options?: IDatabaseOptions
87+
): Promise<number> {
88+
return this.authApiRepository.getTotal(find, options);
8689
}
8790

8891
async inactive(

src/common/database/abstracts/database.mongo-repository.abstract.ts

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Model, PipelineStage, PopulateOptions, Types } from 'mongoose';
22
import {
33
IDatabaseCreateOptions,
4+
IDatabaseExistOptions,
45
IDatabaseFindAllOptions,
56
IDatabaseFindOneOptions,
67
IDatabaseOptions,
@@ -53,6 +54,10 @@ export abstract class DatabaseMongoRepositoryAbstract<T>
5354
}
5455
}
5556

57+
if (options && options.session) {
58+
findAll.session(options.session);
59+
}
60+
5661
return findAll.lean();
5762
}
5863

@@ -76,6 +81,10 @@ export abstract class DatabaseMongoRepositoryAbstract<T>
7681
}
7782
}
7883

84+
if (options && options.session) {
85+
findOne.session(options.session);
86+
}
87+
7988
return findOne.lean();
8089
}
8190

@@ -99,27 +108,61 @@ export abstract class DatabaseMongoRepositoryAbstract<T>
99108
}
100109
}
101110

111+
if (options && options.session) {
112+
findOne.session(options.session);
113+
}
114+
102115
return findOne.lean();
103116
}
104117

105-
async getTotal(find?: Record<string, any>): Promise<number> {
106-
return this._repository.countDocuments(find);
118+
async getTotal(
119+
find?: Record<string, any>,
120+
options?: IDatabaseOptions
121+
): Promise<number> {
122+
const count = this._repository.countDocuments(find);
123+
124+
if (options && options.session) {
125+
count.session(options.session);
126+
}
127+
128+
return count;
107129
}
108130

109131
async exists(
110132
find: Record<string, any>,
111-
excludeId?: string
133+
options?: IDatabaseExistOptions
112134
): Promise<boolean> {
113-
const exist = await this._repository.exists({
135+
const exist = this._repository.exists({
114136
...find,
115-
_id: { $nin: new Types.ObjectId(excludeId) },
137+
_id: {
138+
$nin: new Types.ObjectId(
139+
options && options.excludeId ? options.excludeId : undefined
140+
),
141+
},
116142
});
117143

118-
return exist ? true : false;
144+
if (options && options.session) {
145+
exist.session(options.session);
146+
}
147+
148+
const result = await exist;
149+
150+
return result ? true : false;
119151
}
120152

121-
async aggregate<N>(pipeline: Record<string, any>[]): Promise<N[]> {
122-
return this._repository.aggregate<N>(pipeline as PipelineStage[]);
153+
async aggregate<N>(
154+
pipeline: Record<string, any>[],
155+
options?: IDatabaseOptions
156+
): Promise<N[]> {
157+
const aggregate = this._repository.aggregate<N>(
158+
pipeline as PipelineStage[]
159+
);
160+
161+
if (options && options.session) {
162+
aggregate.session(options.session);
163+
}
164+
165+
return aggregate;
123166
}
124167

125168
async create<N>(data: N, options?: IDatabaseCreateOptions): Promise<T> {

src/common/database/interfaces/database.interface.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ export interface IDatabaseFindAllOptions
1111
extends IPaginationOptions,
1212
IDatabaseFindOneOptions {}
1313

14-
export interface IDatabaseOptions {
15-
session?: ClientSession;
16-
}
14+
export type IDatabaseOptions = Pick<IDatabaseFindOneOptions, 'session'>;
1715

1816
export interface IDatabaseCreateOptions extends IDatabaseOptions {
1917
_id?: string;
2018
}
19+
20+
export interface IDatabaseExistOptions extends IDatabaseOptions {
21+
excludeId?: string;
22+
}

src/common/database/interfaces/database.repository.interface.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
IDatabaseCreateOptions,
3+
IDatabaseExistOptions,
34
IDatabaseFindAllOptions,
45
IDatabaseFindOneOptions,
56
IDatabaseOptions,
@@ -21,11 +22,20 @@ export interface IDatabaseRepositoryAbstract<T> {
2122
options?: IDatabaseFindOneOptions
2223
): Promise<Y>;
2324

24-
getTotal(find?: Record<string, any>): Promise<number>;
25+
getTotal(
26+
find?: Record<string, any>,
27+
options?: IDatabaseOptions
28+
): Promise<number>;
2529

26-
aggregate<N>(pipeline: Record<string, any>[]): Promise<N[]>;
30+
aggregate<N>(
31+
pipeline: Record<string, any>[],
32+
options?: IDatabaseOptions
33+
): Promise<N[]>;
2734

28-
exists(find: Record<string, any>, excludeId?: string): Promise<boolean>;
35+
exists(
36+
find: Record<string, any>,
37+
options?: IDatabaseExistOptions
38+
): Promise<boolean>;
2939

3040
create<N>(data: N, options?: IDatabaseCreateOptions): Promise<T>;
3141

src/common/setting/interfaces/setting.service.interface.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
IDatabaseCreateOptions,
23
IDatabaseFindAllOptions,
34
IDatabaseFindOneOptions,
45
IDatabaseOptions,
@@ -23,11 +24,14 @@ export interface ISettingService {
2324
options?: IDatabaseFindOneOptions
2425
): Promise<SettingDocument>;
2526

26-
getTotal(find?: Record<string, any>): Promise<number>;
27+
getTotal(
28+
find?: Record<string, any>,
29+
options?: IDatabaseOptions
30+
): Promise<number>;
2731

2832
create(
2933
data: SettingCreateDto,
30-
options?: IDatabaseOptions
34+
options?: IDatabaseCreateOptions
3135
): Promise<SettingDocument>;
3236

3337
updateOneById(

src/common/setting/services/setting.service.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,11 @@ export class SettingService implements ISettingService {
4949
);
5050
}
5151

52-
async getTotal(find?: Record<string, any>): Promise<number> {
53-
return this.settingRepository.getTotal(find);
52+
async getTotal(
53+
find?: Record<string, any>,
54+
options?: IDatabaseOptions
55+
): Promise<number> {
56+
return this.settingRepository.getTotal(find, options);
5457
}
5558

5659
async create(

src/modules/permission/interfaces/permission.service.interface.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ export interface IPermissionService {
2424
options?: IDatabaseFindOneOptions
2525
): Promise<PermissionDocument>;
2626

27-
getTotal(find?: Record<string, any>): Promise<number>;
27+
getTotal(
28+
find?: Record<string, any>,
29+
options?: IDatabaseOptions
30+
): Promise<number>;
2831

2932
deleteOne(
3033
find: Record<string, any>,

src/modules/permission/services/permission.service.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,11 @@ export class PermissionService implements IPermissionService {
4949
);
5050
}
5151

52-
async getTotal(find?: Record<string, any>): Promise<number> {
53-
return this.permissionRepository.getTotal(find);
52+
async getTotal(
53+
find?: Record<string, any>,
54+
options?: IDatabaseOptions
55+
): Promise<number> {
56+
return this.permissionRepository.getTotal(find, options);
5457
}
5558

5659
async deleteOne(

src/modules/role/interfaces/role.service.interface.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
IDatabaseCreateOptions,
3+
IDatabaseExistOptions,
34
IDatabaseFindAllOptions,
45
IDatabaseFindOneOptions,
56
IDatabaseOptions,
@@ -21,9 +22,12 @@ export interface IRoleService {
2122
options?: IDatabaseFindOneOptions
2223
): Promise<T>;
2324

24-
getTotal(find?: Record<string, any>): Promise<number>;
25+
getTotal(
26+
find?: Record<string, any>,
27+
options?: IDatabaseOptions
28+
): Promise<number>;
2529

26-
exists(name: string, excludeId?: string): Promise<boolean>;
30+
exists(name: string, options?: IDatabaseExistOptions): Promise<boolean>;
2731

2832
create(
2933
data: RoleCreateDto,

0 commit comments

Comments
 (0)