Skip to content

Commit 95f3120

Browse files
Merge pull request #360 from andrechristikan/development
Development
2 parents b21060c + 6b3cf3e commit 95f3120

File tree

17 files changed

+175
-6
lines changed

17 files changed

+175
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ack-nestjs-boilerplate",
3-
"version": "4.1.4",
3+
"version": "4.1.5",
44
"description": "Ack NestJs Boilerplate",
55
"repository": {
66
"type": "git",

src/common/auth/constants/auth.enum.permission.constant.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export enum ENUM_AUTH_PERMISSIONS {
1212
USER_UPDATE = 'USER_UPDATE',
1313
USER_ACTIVE = 'USER_ACTIVE',
1414
USER_INACTIVE = 'USER_INACTIVE',
15+
USER_BLOCKED = 'USER_BLOCKED',
1516
USER_DELETE = 'USER_DELETE',
1617
USER_IMPORT = 'USER_IMPORT',
1718
USER_EXPORT = 'USER_EXPORT',
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export const USER_ACTIVE_META_KEY = 'UserActiveMetaKey';
2+
export const USER_BLOCKED_META_KEY = 'UserBlockedMetaKey';

src/modules/user/constants/user.status-code.constant.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export enum ENUM_USER_STATUS_CODE_ERROR {
99
USER_PASSWORD_NEW_MUST_DIFFERENCE_ERROR = 5407,
1010
USER_PASSWORD_EXPIRED_ERROR = 5408,
1111
USER_PASSWORD_ATTEMPT_MAX_ERROR = 5409,
12+
USER_BLOCKED_ERROR = 5410,
1213
}

src/modules/user/controllers/user.admin.controller.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ import {
4444
UserDeleteGuard,
4545
UserGetGuard,
4646
UserUpdateActiveGuard,
47+
UserUpdateBlockedGuard,
4748
UserUpdateGuard,
4849
UserUpdateInactiveGuard,
4950
} from 'src/modules/user/decorators/user.admin.decorator';
5051
import { GetUser } from 'src/modules/user/decorators/user.decorator';
5152
import {
5253
UserActiveDoc,
54+
UserBlockedDoc,
5355
UserCreateDoc,
5456
UserDeleteDoc,
5557
UserExportDoc,
@@ -385,4 +387,29 @@ export class UserAdminController {
385387
async export(): Promise<IResponse> {
386388
return this.userService.findAll({});
387389
}
390+
391+
@UserBlockedDoc()
392+
@Response('user.blocked')
393+
@UserUpdateBlockedGuard()
394+
@RequestParamGuard(UserRequestDto)
395+
@AuthPermissionProtected(
396+
ENUM_AUTH_PERMISSIONS.USER_READ,
397+
ENUM_AUTH_PERMISSIONS.USER_UPDATE,
398+
ENUM_AUTH_PERMISSIONS.USER_BLOCKED
399+
)
400+
@AuthJwtAdminAccessProtected()
401+
@Patch('/update/:user/blocked')
402+
async blocked(@GetUser() user: IUserEntity): Promise<void> {
403+
try {
404+
await this.userService.blocked(user._id);
405+
} catch (err: any) {
406+
throw new InternalServerErrorException({
407+
statusCode: ENUM_ERROR_STATUS_CODE_ERROR.ERROR_UNKNOWN,
408+
message: 'http.serverError.internalServerError',
409+
error: err.message,
410+
});
411+
}
412+
413+
return;
414+
}
388415
}

src/modules/user/controllers/user.controller.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
BadRequestException,
33
Body,
44
Controller,
5+
Delete,
56
ForbiddenException,
67
Get,
78
HttpCode,
@@ -38,6 +39,7 @@ import { ENUM_ROLE_STATUS_CODE_ERROR } from 'src/modules/role/constants/role.sta
3839
import { ENUM_USER_STATUS_CODE_ERROR } from 'src/modules/user/constants/user.status-code.constant';
3940
import { GetUser } from 'src/modules/user/decorators/user.decorator';
4041
import { UserProfileGuard } from 'src/modules/user/decorators/user.public.decorator';
42+
import { UserDeleteDoc } from 'src/modules/user/docs/user.admin.doc';
4143
import {
4244
UserChangePasswordDoc,
4345
UserGrantPermissionDoc,
@@ -493,4 +495,22 @@ export class UserController {
493495

494496
return;
495497
}
498+
499+
@UserDeleteDoc()
500+
@Response('user.delete')
501+
@AuthJwtAccessProtected()
502+
@Delete('/delete')
503+
async delete(@AuthJwtPayload('_id') _id: string): Promise<void> {
504+
try {
505+
await this.userService.inactive(_id);
506+
} catch (err: any) {
507+
throw new InternalServerErrorException({
508+
statusCode: ENUM_ERROR_STATUS_CODE_ERROR.ERROR_UNKNOWN,
509+
message: 'http.serverError.internalServerError',
510+
error: err.message,
511+
});
512+
}
513+
514+
return;
515+
}
496516
}

src/modules/user/decorators/user.admin.decorator.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common';
2-
import { USER_ACTIVE_META_KEY } from 'src/modules/user/constants/user.constant';
2+
import {
3+
USER_ACTIVE_META_KEY,
4+
USER_BLOCKED_META_KEY,
5+
} from 'src/modules/user/constants/user.constant';
36
import { UserActiveGuard } from 'src/modules/user/guards/user.active.guard';
7+
import { UserBlockedGuard } from 'src/modules/user/guards/user.blocked.guard';
48
import { UserNotFoundGuard } from 'src/modules/user/guards/user.not-found.guard';
59
import { UserPutToRequestGuard } from 'src/modules/user/guards/user.put-to-request.guard';
610

@@ -29,3 +33,10 @@ export function UserUpdateActiveGuard(): MethodDecorator {
2933
SetMetadata(USER_ACTIVE_META_KEY, [false])
3034
);
3135
}
36+
37+
export function UserUpdateBlockedGuard(): MethodDecorator {
38+
return applyDecorators(
39+
UseGuards(UserPutToRequestGuard, UserNotFoundGuard, UserBlockedGuard),
40+
SetMetadata(USER_BLOCKED_META_KEY, [false])
41+
);
42+
}

src/modules/user/docs/user.admin.doc.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,17 @@ export function UserInactiveDoc(): MethodDecorator {
145145
})
146146
);
147147
}
148+
149+
export function UserBlockedDoc(): MethodDecorator {
150+
return applyDecorators(
151+
Doc<void>('user.blocked', {
152+
auth: {
153+
jwtAccessToken: true,
154+
permissionToken: true,
155+
},
156+
request: {
157+
params: UserDocParamsGet,
158+
},
159+
})
160+
);
161+
}

src/modules/user/docs/user.doc.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,13 @@ export function UserGrantPermissionDoc(): MethodDecorator {
9696
})
9797
);
9898
}
99+
100+
export function UserDeleteDoc(): MethodDecorator {
101+
return applyDecorators(
102+
Doc<void>('user.delete', {
103+
auth: {
104+
jwtAccessToken: true,
105+
},
106+
})
107+
);
108+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { IsBoolean, IsNotEmpty } from 'class-validator';
2+
3+
export class UserBlockedDto {
4+
@IsBoolean()
5+
@IsNotEmpty()
6+
blocked: boolean;
7+
}

0 commit comments

Comments
 (0)