mirror of
https://github.com/dadosfera/maestro.git
synced 2026-10-25 20:39:08 +00:00
FEAT: Roles WIP
This commit is contained in:
Generated
+9
-7
@@ -36,7 +36,7 @@
|
||||
"passport-hubspot-oauth2": "^1.0.3",
|
||||
"passport-mailchimp": "^1.1.0",
|
||||
"protospack": "2.5.1",
|
||||
"protospack-v2": "3.0.0",
|
||||
"protospack-v2": "file:../protospack-v2/protospack-v2-0.0.0.tgz",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"rimraf": "^3.0.2",
|
||||
"rxjs": "^7.5.5",
|
||||
@@ -9015,10 +9015,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/protospack-v2": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com:443/npm/dadosfera-npm/protospack-v2/-/protospack-v2-3.0.0.tgz",
|
||||
"integrity": "sha512-GEFbf8+vVaq/lA28K4nFf7bOSlghQJn/aeVnrYzh4YJUaa1+ccNz3uQs9p5OGbfjt2u/fFE5rHGEBUtueAA8KA==",
|
||||
"version": "0.0.0",
|
||||
"resolved": "file:../protospack-v2/protospack-v2-0.0.0.tgz",
|
||||
"integrity": "sha512-/Pmor5eTfl0kRUC0uMsqsMojLnl3j5vMHhO9CYYQ9/5bYWSvq40+NovS9msyuqNsTW2oAYpGvMNDm6zeaV4Ciw==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@grpc/grpc-js": "^1.6.7",
|
||||
"rxjs": "^7.5.5",
|
||||
"ts-proto": "^1.112.2"
|
||||
}
|
||||
@@ -17244,10 +17246,10 @@
|
||||
}
|
||||
},
|
||||
"protospack-v2": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://dadosfera-611330257153.d.codeartifact.us-east-1.amazonaws.com:443/npm/dadosfera-npm/protospack-v2/-/protospack-v2-3.0.0.tgz",
|
||||
"integrity": "sha512-GEFbf8+vVaq/lA28K4nFf7bOSlghQJn/aeVnrYzh4YJUaa1+ccNz3uQs9p5OGbfjt2u/fFE5rHGEBUtueAA8KA==",
|
||||
"version": "file:../protospack-v2/protospack-v2-0.0.0.tgz",
|
||||
"integrity": "sha512-/Pmor5eTfl0kRUC0uMsqsMojLnl3j5vMHhO9CYYQ9/5bYWSvq40+NovS9msyuqNsTW2oAYpGvMNDm6zeaV4Ciw==",
|
||||
"requires": {
|
||||
"@grpc/grpc-js": "^1.6.7",
|
||||
"rxjs": "^7.5.5",
|
||||
"ts-proto": "^1.112.2"
|
||||
}
|
||||
|
||||
+1
-1
@@ -51,7 +51,7 @@
|
||||
"passport-hubspot-oauth2": "^1.0.3",
|
||||
"passport-mailchimp": "^1.1.0",
|
||||
"protospack": "2.5.1",
|
||||
"protospack-v2": "3.0.0",
|
||||
"protospack-v2": "file:../protospack-v2/protospack-v2-0.0.0.tgz",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"rimraf": "^3.0.2",
|
||||
"rxjs": "^7.5.5",
|
||||
|
||||
@@ -17,6 +17,12 @@ export interface PermissionsObjectPermission {
|
||||
'en-us': string;
|
||||
};
|
||||
}
|
||||
export interface PermissionsObjectPermissionTranslated {
|
||||
seqid: number;
|
||||
claim: string;
|
||||
usage: PermissionUsages;
|
||||
name?: string;
|
||||
}
|
||||
export interface PermissionsObjectGroup {
|
||||
title: {
|
||||
'pt-br': string;
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { DucClient } from 'src/clients/duc/client.config';
|
||||
import { PermissionsController } from './permissions.controller';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
import { PermissionsClientService } from './permissions.service';
|
||||
import { PermissionsService } from './permissions.service';
|
||||
|
||||
const ducClient = new DucClient();
|
||||
|
||||
@@ -21,7 +21,7 @@ describe('PermissionsController', () => {
|
||||
]),
|
||||
],
|
||||
controllers: [PermissionsController],
|
||||
providers: [DadosferaLogger, PermissionsClientService],
|
||||
providers: [DadosferaLogger, PermissionsService],
|
||||
}).compile();
|
||||
|
||||
controller = module.get<PermissionsController>(PermissionsController);
|
||||
|
||||
@@ -2,13 +2,13 @@ import { Controller, Get, Headers, Inject } from '@nestjs/common';
|
||||
import { ApiOkResponse, ApiTags } from '@nestjs/swagger';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
import { PermissionUsages } from 'src/authentication/permissions.enum';
|
||||
import { User } from 'src/authentication/user.decorator';
|
||||
import { RequestUser, User } from 'src/authentication/user.decorator';
|
||||
import {
|
||||
GetPublicPermissionsHeader,
|
||||
GetPublicPermissionsRes,
|
||||
LanguageEnum,
|
||||
} from './dto/entities';
|
||||
import { PermissionsClientService } from './permissions.service';
|
||||
import { PermissionsService } from './permissions.service';
|
||||
|
||||
@ApiTags('Permissions')
|
||||
@Controller('permissions')
|
||||
@@ -18,7 +18,7 @@ export class PermissionsController {
|
||||
constructor(
|
||||
@Inject(DadosferaLogger)
|
||||
dadosferaLogger: DadosferaLogger,
|
||||
private permissionsService: PermissionsClientService,
|
||||
private permissionsService: PermissionsService,
|
||||
) {
|
||||
this.logger = dadosferaLogger.logger;
|
||||
}
|
||||
@@ -26,13 +26,13 @@ export class PermissionsController {
|
||||
@Get()
|
||||
@ApiOkResponse({ type: GetPublicPermissionsRes })
|
||||
getPublicPermissions(
|
||||
@User() user,
|
||||
@User() user: RequestUser,
|
||||
@Headers() headers: GetPublicPermissionsHeader,
|
||||
) {
|
||||
this.logger.info('getPublicPermissions', { user });
|
||||
|
||||
const language: LanguageEnum = headers['dadosfera-lang'];
|
||||
return this.permissionsService.getPermissions(
|
||||
return this.permissionsService.getPermissionsGrouped(
|
||||
PermissionUsages.PUBLIC,
|
||||
language,
|
||||
);
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
|
||||
import { ClientsModule } from '@nestjs/microservices';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
|
||||
import { PermissionsClientService } from './permissions.service';
|
||||
import { PermissionsService } from './permissions.service';
|
||||
|
||||
import { DucClient } from '../../clients/duc/client.config';
|
||||
import { PermissionsController } from './permissions.controller';
|
||||
@@ -18,7 +18,8 @@ const ducClient = new DucClient();
|
||||
},
|
||||
]),
|
||||
],
|
||||
providers: [PermissionsClientService, DadosferaLogger],
|
||||
providers: [PermissionsService, DadosferaLogger],
|
||||
controllers: [PermissionsController],
|
||||
exports: [PermissionsService],
|
||||
})
|
||||
export class PermissionsModule {}
|
||||
|
||||
@@ -12,22 +12,21 @@ import { PermissionsProtoService as PermissionsServiceInterface } from 'protospa
|
||||
import { InjectPermissionsRequest } from 'protospack-v2/dist/lib/Duc/interfaces/messages';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
import {
|
||||
PermissionsObjectPermission,
|
||||
PERMISSIONS,
|
||||
PermissionsObject,
|
||||
PermissionUsages,
|
||||
PermissionsObjectGroup,
|
||||
PermissionsObjectPermissionTranslated,
|
||||
} from '../../authentication/permissions.enum';
|
||||
import ErrorBuilder from '../../utils/ErrorBuilder';
|
||||
import { LanguageEnum, PermissionDto, PermissionGroup } from './dto/entities';
|
||||
|
||||
@Injectable()
|
||||
export class PermissionsClientService
|
||||
export class PermissionsService
|
||||
implements OnModuleInit, OnApplicationBootstrap
|
||||
{
|
||||
logger: any;
|
||||
|
||||
private permissionsService: PermissionsServiceInterface;
|
||||
private permissionsClientService: PermissionsServiceInterface;
|
||||
constructor(
|
||||
@Inject(DadosferaLogger)
|
||||
dadosferaLogger: DadosferaLogger,
|
||||
@@ -37,7 +36,7 @@ export class PermissionsClientService
|
||||
}
|
||||
|
||||
onModuleInit() {
|
||||
this.permissionsService =
|
||||
this.permissionsClientService =
|
||||
this.grpcClient.getService<PermissionsServiceInterface>(
|
||||
ProtoServices.PermissionsProtoService,
|
||||
);
|
||||
@@ -71,10 +70,10 @@ export class PermissionsClientService
|
||||
this.logger.info('InjectPermissions');
|
||||
|
||||
return lastValueFrom(
|
||||
this.permissionsService.InjectPermissions({ permissions }),
|
||||
this.permissionsClientService.InjectPermissions({ permissions }),
|
||||
);
|
||||
}
|
||||
getPermissions(
|
||||
getPermissionsGrouped(
|
||||
permissionUsage?: PermissionUsages,
|
||||
language: LanguageEnum = LanguageEnum.ptbr,
|
||||
): PermissionGroup[] {
|
||||
@@ -97,4 +96,22 @@ export class PermissionsClientService
|
||||
}
|
||||
return groups;
|
||||
}
|
||||
getAllPermissions(language: LanguageEnum = LanguageEnum.ptbr) {
|
||||
const permissions: PermissionsObjectPermissionTranslated[] = [];
|
||||
for (const key in PERMISSIONS) {
|
||||
const permissionGroup: PermissionsObjectGroup = PERMISSIONS[key];
|
||||
const permissionGroupPermissions: PermissionsObjectPermissionTranslated[] =
|
||||
Object.values(permissionGroup.permissions).map((p) => ({
|
||||
...p,
|
||||
name: p.name[language],
|
||||
}));
|
||||
permissions.concat(permissionGroupPermissions);
|
||||
}
|
||||
return permissions;
|
||||
}
|
||||
getPermissionsBySeqId(seqIds: number[]) {
|
||||
const permissionGroupPermissions = this.getAllPermissions();
|
||||
|
||||
return permissionGroupPermissions.filter((p) => seqIds.includes(p.seqid));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,30 +1,39 @@
|
||||
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
||||
import { ApiProperty, ApiPropertyOptional, OmitType } from '@nestjs/swagger';
|
||||
import { Permission } from 'src/modules/permissions/dto/entities';
|
||||
import { UserWithoutRoles } from 'src/modules/users/dtos/entities';
|
||||
import {
|
||||
Customer,
|
||||
UserNoRolesAndCustomer,
|
||||
} from 'src/modules/users/dtos/entities';
|
||||
export class Role {
|
||||
@ApiProperty()
|
||||
id: string;
|
||||
@ApiProperty()
|
||||
name: string;
|
||||
@ApiProperty()
|
||||
description: string;
|
||||
@ApiPropertyOptional({ type: () => [Permission] })
|
||||
permissions: Permission[];
|
||||
@ApiPropertyOptional({ type: () => [UserWithoutRoles] })
|
||||
users: UserWithoutRoles[];
|
||||
@ApiPropertyOptional({ type: () => [UserNoRolesAndCustomer] })
|
||||
users: UserNoRolesAndCustomer[];
|
||||
@ApiProperty()
|
||||
createdAt: string;
|
||||
@ApiProperty()
|
||||
updatedAt: string;
|
||||
@ApiProperty({ type: () => Customer })
|
||||
customer?: Customer;
|
||||
}
|
||||
|
||||
export class CustomerRole extends OmitType(Role, ['customer']) {}
|
||||
|
||||
export enum TrueOrFalseEnum {
|
||||
true = 'true',
|
||||
false = 'false',
|
||||
}
|
||||
export class GetRolesByCustomerReq {
|
||||
@ApiPropertyOptional()
|
||||
permission_id: string[];
|
||||
permissionIds: string[];
|
||||
@ApiPropertyOptional({ enum: TrueOrFalseEnum })
|
||||
get_users: TrueOrFalseEnum;
|
||||
getUsers: TrueOrFalseEnum;
|
||||
}
|
||||
|
||||
export class GetRolesByCustomerRes {
|
||||
@@ -35,7 +44,7 @@ export class CreateRoleReq {
|
||||
@ApiProperty()
|
||||
name: string;
|
||||
@ApiProperty()
|
||||
permissionIds: string[];
|
||||
permissionIds: number[];
|
||||
@ApiPropertyOptional()
|
||||
userIds: string[];
|
||||
@ApiProperty()
|
||||
@@ -43,7 +52,7 @@ export class CreateRoleReq {
|
||||
}
|
||||
export class CreateRoleRes {
|
||||
@ApiProperty()
|
||||
role: Role;
|
||||
role: CustomerRole;
|
||||
}
|
||||
|
||||
export class AssignPermissionsToRoleReq {
|
||||
|
||||
@@ -9,25 +9,28 @@ import {
|
||||
Post,
|
||||
Put,
|
||||
Query,
|
||||
UseFilters,
|
||||
} from '@nestjs/common';
|
||||
import { ApiResponse, ApiTags } from '@nestjs/swagger';
|
||||
import { User } from 'src/authentication/user.decorator';
|
||||
import { ApiCreatedResponse, ApiOkResponse, ApiTags } from '@nestjs/swagger';
|
||||
import { RequestUser, User } from 'src/authentication/user.decorator';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
import { RolesService } from './roles.service';
|
||||
import {
|
||||
AssignPermissionsToRoleReq,
|
||||
AssignPermissionsToRoleRes,
|
||||
AssignPermissionsToRoleReq as grantPermissionsToRoleReq,
|
||||
AssignPermissionsToRoleRes as GrantPermissionsToRoleRes,
|
||||
CreateRoleReq,
|
||||
CreateRoleRes,
|
||||
GetRolesByCustomerReq,
|
||||
GetRolesByCustomerRes,
|
||||
UnassignPermissionsToRoleReq,
|
||||
UnassignPermissionsToRoleRes,
|
||||
UnassignPermissionsToRoleReq as RevokePermissionsToRoleReq,
|
||||
UnassignPermissionsToRoleRes as RevokePermissionsToRoleRes,
|
||||
UpdateRoleReq,
|
||||
UpdateRoleRes,
|
||||
} from './dto/entities';
|
||||
import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter';
|
||||
|
||||
@ApiTags('Roles')
|
||||
@UseFilters(new GrpcToHttpExceptionFilter())
|
||||
@Controller('roles')
|
||||
export class RolesController {
|
||||
logger: any;
|
||||
@@ -39,46 +42,57 @@ export class RolesController {
|
||||
) {
|
||||
this.logger = dadosferaLogger.logger;
|
||||
}
|
||||
|
||||
@Get()
|
||||
@ApiResponse({ type: GetRolesByCustomerRes })
|
||||
@ApiOkResponse({ type: GetRolesByCustomerRes })
|
||||
async getRolesByCustomer(
|
||||
@User() user,
|
||||
@User() user: RequestUser,
|
||||
@Query() filters: GetRolesByCustomerReq,
|
||||
) {
|
||||
this.logger.info('getRolesByCustomer', { user });
|
||||
this.rolesService.getRolesByCustomer(filters);
|
||||
return await this.rolesService.getRolesByCustomer(
|
||||
filters,
|
||||
user.customer_id,
|
||||
);
|
||||
}
|
||||
|
||||
@Post()
|
||||
@ApiResponse({ type: CreateRoleRes })
|
||||
async createRole(@User() user, @Body() body: CreateRoleReq) {
|
||||
@ApiCreatedResponse({ type: CreateRoleRes })
|
||||
async createRole(@User() user: RequestUser, @Body() body: CreateRoleReq) {
|
||||
this.logger.info('createRole', { user });
|
||||
return await this.rolesService.createRole(body, user.customer_id);
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
async deleteRole(@User() user, @Param('id') id: string) {
|
||||
async deleteRole(@User() user: RequestUser, @Param('id') id: string) {
|
||||
this.logger.info('deleteRole', { user });
|
||||
return await this.rolesService.removeRole(id);
|
||||
}
|
||||
|
||||
@Put('permissions')
|
||||
@ApiResponse({ type: AssignPermissionsToRoleRes })
|
||||
async assignPermissionsToRole(
|
||||
@User() user,
|
||||
@Body() body: AssignPermissionsToRoleReq,
|
||||
@ApiOkResponse({ type: GrantPermissionsToRoleRes })
|
||||
async grantPermissionsToRole(
|
||||
@User() user: RequestUser,
|
||||
@Body() body: grantPermissionsToRoleReq,
|
||||
) {
|
||||
this.logger.info('assignPermissionsToRole', { user });
|
||||
this.logger.info('grantPermissionsToRole', { user });
|
||||
return await this.rolesService.grantPermissionsToRole(body);
|
||||
}
|
||||
|
||||
@Delete('permissions')
|
||||
@ApiResponse({ type: UnassignPermissionsToRoleRes })
|
||||
async unassignPermissionsToRole(
|
||||
@User() user,
|
||||
@Body() body: UnassignPermissionsToRoleReq,
|
||||
@ApiOkResponse({ type: RevokePermissionsToRoleRes })
|
||||
async revokePermissionsToRole(
|
||||
@User() user: RequestUser,
|
||||
@Body() body: RevokePermissionsToRoleReq,
|
||||
) {
|
||||
this.logger.info('unassignPermissionsToRole', { user });
|
||||
this.logger.info('revokePermissionsToRole', { user });
|
||||
return await this.rolesService.revokePermissionToRole(body);
|
||||
}
|
||||
|
||||
@Patch(':id')
|
||||
@ApiResponse({ type: UpdateRoleRes })
|
||||
@ApiOkResponse({ type: UpdateRoleRes })
|
||||
async updateRole(
|
||||
@User() user,
|
||||
@User() user: RequestUser,
|
||||
@Param('id') id: string,
|
||||
@Body() body: UpdateRoleReq,
|
||||
) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import { DucClient } from 'src/clients/duc/client.config';
|
||||
import { RolesController } from './roles.controller';
|
||||
import { RolesService } from './roles.service';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
import { PermissionsModule } from '../permissions/permissions.module';
|
||||
|
||||
const ducClient = new DucClient();
|
||||
|
||||
@@ -15,6 +16,7 @@ const ducClient = new DucClient();
|
||||
...ducClient.config(),
|
||||
},
|
||||
]),
|
||||
PermissionsModule,
|
||||
],
|
||||
controllers: [RolesController],
|
||||
providers: [RolesService, DadosferaLogger],
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import { BadRequestException, Inject, Injectable } from '@nestjs/common';
|
||||
import { ProtoServices } from 'protospack-v2/dist/lib/Duc';
|
||||
import { RolesProtoService } from 'protospack-v2/dist/lib/Duc/interfaces/write-service';
|
||||
import { GetRolesByCustomerReq } from './dto/entities';
|
||||
import { CreateRoleReq, GetRolesByCustomerReq, Role } from './dto/entities';
|
||||
import { DadosferaLogger } from 'dadosfera-logs';
|
||||
import { ClientGrpc } from '@nestjs/microservices';
|
||||
import { lastValueFrom } from 'rxjs';
|
||||
import { PermissionsService } from '../permissions/permissions.service';
|
||||
import {
|
||||
GrantPermissionsToRoleRequest,
|
||||
RevokePermissionsFromRoleRequest,
|
||||
RoleUpdateRequest,
|
||||
} from 'protospack-v2/dist/lib/Duc/interfaces/messages';
|
||||
|
||||
@Injectable()
|
||||
export class RolesService {
|
||||
@@ -15,22 +21,97 @@ export class RolesService {
|
||||
@Inject(DadosferaLogger)
|
||||
dadosferaLogger: DadosferaLogger,
|
||||
@Inject('DUC_PACKAGE') private readonly grpcClient: ClientGrpc,
|
||||
private permissionsService: PermissionsService,
|
||||
) {
|
||||
this.logger = dadosferaLogger.logger;
|
||||
}
|
||||
|
||||
onModuleInit() {
|
||||
this.rolesClientService = this.grpcClient.getService<RolesProtoService>(
|
||||
ProtoServices.UsersProtoService,
|
||||
ProtoServices.RolesProtoService,
|
||||
);
|
||||
}
|
||||
async getRolesByCustomer(filters: GetRolesByCustomerReq) {
|
||||
let { permission_id } = filters;
|
||||
if (!Array.isArray(permission_id)) permission_id = [permission_id];
|
||||
const { get_users } = filters;
|
||||
const is_get_users = get_users === 'true';
|
||||
async getRolesByCustomer(filters: GetRolesByCustomerReq, customerId: string) {
|
||||
let { permissionIds } = filters;
|
||||
if (permissionIds && !Array.isArray(permissionIds))
|
||||
permissionIds = [permissionIds];
|
||||
const { getUsers } = filters;
|
||||
const isGetUsers = getUsers === 'true';
|
||||
const permissionSeqIds =
|
||||
permissionIds?.map((id) => {
|
||||
const seqId = Number(id);
|
||||
if (isNaN(seqId))
|
||||
throw new BadRequestException(`permissionId ${id} not valid`);
|
||||
return seqId;
|
||||
}) || [];
|
||||
const roles = await lastValueFrom(
|
||||
this.rolesClientService.RoleFindAllByCustomerId({
|
||||
customerId,
|
||||
getUsers: isGetUsers,
|
||||
permissionIds: [],
|
||||
permissionSeqIds,
|
||||
}),
|
||||
);
|
||||
const rolesTreated = this.getRolesPermissionsName(roles.roles);
|
||||
return { roles: rolesTreated };
|
||||
}
|
||||
|
||||
async createRole(data: CreateRoleReq, customerId: string) {
|
||||
const { description, name, permissionIds, userIds } = data;
|
||||
const role = await lastValueFrom(
|
||||
this.rolesClientService.RoleCreate({
|
||||
customerId,
|
||||
name,
|
||||
permissionIds: [],
|
||||
permissionSeqIds: permissionIds,
|
||||
description,
|
||||
userIds,
|
||||
}),
|
||||
);
|
||||
const [roleTreated] = this.getRolesPermissionsName([role.role]);
|
||||
return { role: roleTreated };
|
||||
}
|
||||
|
||||
async removeRole(id: string) {
|
||||
return lastValueFrom(this.rolesClientService.RoleRemove({ id }));
|
||||
}
|
||||
async grantPermissionsToRole({
|
||||
roleId,
|
||||
permissionIds,
|
||||
}: GrantPermissionsToRoleRequest) {
|
||||
const role = await lastValueFrom(
|
||||
this.rolesClientService.GrantPermissionsToRole({
|
||||
permissionIds,
|
||||
roleId,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
async revokePermissionToRole({
|
||||
roleId,
|
||||
permissionIds,
|
||||
}: RevokePermissionsFromRoleRequest) {
|
||||
const role = await lastValueFrom(
|
||||
this.rolesClientService.RevokePermissionsFromRole({
|
||||
permissionIds,
|
||||
roleId,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
async updateRole(req: RoleUpdateRequest) {
|
||||
const role = await lastValueFrom(this.rolesClientService.RoleUpdate(req));
|
||||
}
|
||||
getRolesPermissionsName(roles: Role[]) {
|
||||
for (const role of roles) {
|
||||
const permisisonSeqIds = role.permissions.map((p) => p.seqid);
|
||||
const permissions =
|
||||
this.permissionsService.getPermissionsBySeqId(permisisonSeqIds);
|
||||
role.permissions.forEach((p) => {
|
||||
const permission = permissions.find((per) => per.seqid === p.seqid);
|
||||
p.name = permission.name;
|
||||
});
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
||||
import { ApiProperty, ApiPropertyOptional, OmitType } from '@nestjs/swagger';
|
||||
import { Role } from 'src/modules/roles/dto/entities';
|
||||
export class Customer {
|
||||
@ApiProperty()
|
||||
@@ -26,35 +26,13 @@ export class User {
|
||||
@ApiProperty({ type: [Role] })
|
||||
roles: Role[];
|
||||
@ApiProperty()
|
||||
jobTitle: string;
|
||||
jobTitle?: string;
|
||||
@ApiProperty()
|
||||
department: string;
|
||||
department?: string;
|
||||
@ApiProperty()
|
||||
hierarchy: string;
|
||||
@ApiProperty()
|
||||
customer: Customer;
|
||||
@ApiProperty()
|
||||
mfaStatus: string;
|
||||
@ApiProperty()
|
||||
createdAt: string;
|
||||
@ApiProperty()
|
||||
updatedAt: string;
|
||||
}
|
||||
export class UserWithoutRoles {
|
||||
@ApiProperty()
|
||||
id: string;
|
||||
@ApiProperty()
|
||||
name: string;
|
||||
@ApiProperty()
|
||||
email: string;
|
||||
@ApiProperty()
|
||||
jobTitle: string;
|
||||
@ApiProperty()
|
||||
department: string;
|
||||
@ApiProperty()
|
||||
hierarchy: string;
|
||||
@ApiProperty()
|
||||
customer: Customer;
|
||||
hierarchy?: string;
|
||||
@ApiPropertyOptional()
|
||||
customer?: Customer;
|
||||
@ApiProperty()
|
||||
mfaStatus: string;
|
||||
@ApiProperty()
|
||||
@@ -62,6 +40,10 @@ export class UserWithoutRoles {
|
||||
@ApiProperty()
|
||||
updatedAt: string;
|
||||
}
|
||||
export class UserNoRoles extends OmitType(User, ['roles']) {}
|
||||
export class UserNoRolesAndCustomer extends OmitType(UserNoRoles, [
|
||||
'customer',
|
||||
]) {}
|
||||
export class UserByCustomer {
|
||||
@ApiProperty({ type: [Role] })
|
||||
roles: Role[];
|
||||
@@ -80,17 +62,17 @@ export class UserByCustomer {
|
||||
}
|
||||
export class CreateUserReq {
|
||||
@ApiPropertyOptional()
|
||||
name: string;
|
||||
name?: string;
|
||||
@ApiProperty()
|
||||
email: string;
|
||||
@ApiPropertyOptional()
|
||||
roles: string[];
|
||||
roles?: string[];
|
||||
@ApiPropertyOptional()
|
||||
jobTitle: string;
|
||||
jobTitle?: string;
|
||||
@ApiPropertyOptional()
|
||||
department: string;
|
||||
department?: string;
|
||||
@ApiPropertyOptional()
|
||||
hierarchy: string;
|
||||
hierarchy?: string;
|
||||
}
|
||||
export class CreateUserRes {
|
||||
@ApiProperty()
|
||||
@@ -107,7 +89,7 @@ export class BatchCreateUserRes {
|
||||
|
||||
export class GetAllUsersByCustomerIdReq {
|
||||
@ApiPropertyOptional()
|
||||
s: string;
|
||||
s?: string;
|
||||
}
|
||||
export class GetAllUsersByCustomerIdRes {
|
||||
@ApiProperty({ type: [UserByCustomer] })
|
||||
|
||||
@@ -23,6 +23,7 @@ import {
|
||||
} from './dtos/entities';
|
||||
import { UsersService } from './users.service';
|
||||
|
||||
// TODO GET de hierarquias e do PATCH em usuário
|
||||
@ApiTags('Users')
|
||||
@Controller('users')
|
||||
export class UsersController {
|
||||
@@ -54,42 +55,41 @@ export class UsersController {
|
||||
|
||||
@Post()
|
||||
@ApiOkResponse({ type: CreateUserRes })
|
||||
async createUser(@User() user, @Body() body: CreateUserReq) {
|
||||
async createUser(@User() user: RequestUser, @Body() body: CreateUserReq) {
|
||||
this.logger.info('createUser', { user });
|
||||
}
|
||||
|
||||
@Post('batch')
|
||||
@ApiOkResponse({ type: CreateUserRes })
|
||||
async batchCreateUser(@User() user, @Body() body: CreateUserReq) {
|
||||
async batchCreateUser(
|
||||
@User() user: RequestUser,
|
||||
@Body() body: CreateUserReq,
|
||||
) {
|
||||
this.logger.info('batchCreateUser', { user });
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
@ApiOkResponse({ type: DeleteUserRes })
|
||||
async deleteUser(@User() user, @Param('id') id: string) {
|
||||
async deleteUser(@User() user: RequestUser, @Param('id') id: string) {
|
||||
this.logger.info('deleteUser', { user });
|
||||
return await this.userService.deleteUser({ id });
|
||||
}
|
||||
|
||||
@Put('role')
|
||||
async assignRoleToUser(@User() user, @Body() body: AssignRoleToUserReq) {
|
||||
async assignRoleToUser(
|
||||
@User() user: RequestUser,
|
||||
@Body() body: AssignRoleToUserReq,
|
||||
) {
|
||||
this.logger.info('assignRoleToUser', { user });
|
||||
return await this.userService.assignRoleToUser(body);
|
||||
}
|
||||
|
||||
@Delete('role')
|
||||
async unassignRoleToUser(@User() user, @Body() body: UnassignRoleToUserReq) {
|
||||
async unassignRoleToUser(
|
||||
@User() user: RequestUser,
|
||||
@Body() body: UnassignRoleToUserReq,
|
||||
) {
|
||||
this.logger.info('unassignRoleToUser', { user });
|
||||
return await this.userService.unassignRoleToUser(body);
|
||||
}
|
||||
|
||||
// @Get('search')
|
||||
// @ApiOkResponse({ type: SearchUserRes })
|
||||
// async searchUser(
|
||||
// @User() user: RequestUser,
|
||||
// @Query('s') searchQuery: SearchUserReq,
|
||||
// ) {
|
||||
// this.logger.info('searchUser', { user });
|
||||
// console.log(searchQuery);
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -112,6 +112,13 @@ export function EnrichErrorCode(code: string) {
|
||||
code,
|
||||
};
|
||||
|
||||
case ErrorCodes.ROLE.ALREADY_EXIST:
|
||||
return {
|
||||
statusCode: HttpStatus.BAD_REQUEST,
|
||||
error: 'Grupo já existe',
|
||||
message: 'Não é possível criar um grupo com esse nome',
|
||||
code,
|
||||
};
|
||||
case ErrorCodes.INTERNAL:
|
||||
case ErrorCodes.UNKNOWN:
|
||||
default:
|
||||
@@ -121,6 +128,7 @@ export function EnrichErrorCode(code: string) {
|
||||
message:
|
||||
'Erro desconhecido. Tente novamente ou entre em contato com o suporte',
|
||||
code: ErrorCodes.UNKNOWN,
|
||||
details: code,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -138,8 +146,14 @@ export default class ErrorBuilder extends HttpException {
|
||||
logger.log(code);
|
||||
}
|
||||
|
||||
const { statusCode, message, error, code: rCode } = EnrichErrorCode(code);
|
||||
super({ statusCode, message, error, code: rCode }, statusCode);
|
||||
const {
|
||||
statusCode,
|
||||
message,
|
||||
error,
|
||||
code: rCode,
|
||||
details,
|
||||
} = EnrichErrorCode(code);
|
||||
super({ statusCode, message, error, code: rCode, details }, statusCode);
|
||||
this.code = code;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,15 @@ export const AUTH = {
|
||||
RESET_PASSWORD_CODE_INVALID: 'AUTH.RESET_PASSWORD_CODE_INVALID',
|
||||
WEAK_NEW_PASSWORD: 'AUTH.WEAK_NEW_PASSWORD',
|
||||
};
|
||||
|
||||
export const ROLE = {
|
||||
ALREADY_EXIST: 'ROLE.ALREADY_EXISTS',
|
||||
};
|
||||
const ErrorCodes = {
|
||||
UNKNOWN: 'UNKNOWN',
|
||||
RATE_LIMIT: 'RATE_LIMIT',
|
||||
INTERNAL: 'INTERNAL',
|
||||
AUTH,
|
||||
ROLE,
|
||||
};
|
||||
|
||||
export default ErrorCodes;
|
||||
|
||||
Reference in New Issue
Block a user