mirror of
https://github.com/dadosfera/maestro.git
synced 2026-09-13 20:34:48 +00:00
183 lines
5.4 KiB
TypeScript
183 lines
5.4 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
Inject,
|
|
Param,
|
|
Patch,
|
|
Post,
|
|
Put,
|
|
Query,
|
|
UseFilters,
|
|
} from '@nestjs/common';
|
|
import {
|
|
ApiCreatedResponse,
|
|
ApiHeaders,
|
|
ApiOkResponse,
|
|
ApiTags,
|
|
} from '@nestjs/swagger';
|
|
import { RequestUser, User } from 'src/decorators/user.decorator';
|
|
import { DadosferaLogger } from '@dadosfera/dadosfera-logs';
|
|
import { RolesService } from './roles.service';
|
|
import {
|
|
GrantPermissionsToRoleReq,
|
|
GrantPermissionsToRoleRes,
|
|
CreateRoleReq,
|
|
CreateRoleRes,
|
|
GetRolesByCustomerReq,
|
|
GetRolesByCustomerRes,
|
|
RevokePermissionsFromRoleReq,
|
|
RevokePermissionsFromRoleRes,
|
|
UpdateRoleReq,
|
|
UpdateRoleRes,
|
|
RoleDto,
|
|
SetRolePermissionsReq,
|
|
SetRolePermissionsRes,
|
|
SetRoleUsersRes,
|
|
SetRoleUsersReq,
|
|
} from './dto/entities';
|
|
import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter';
|
|
import { PERMISSIONS_GROUPS } from 'src/authentication/permissions.enum';
|
|
import {
|
|
Authenticated,
|
|
RequireAllPermissions,
|
|
} from 'src/decorators/authentication.decorator';
|
|
import { LanguageEnum } from 'src/utils/languages.enum';
|
|
import { Language } from 'src/decorators/language.decorator';
|
|
import { ApiInternalOnlyController } from 'src/decorators/swagger.decorator';
|
|
|
|
@ApiInternalOnlyController()
|
|
@ApiTags('Roles')
|
|
@ApiHeaders([{ name: 'dadosfera-lang', enum: LanguageEnum, required: false }])
|
|
@Authenticated()
|
|
@UseFilters(new GrpcToHttpExceptionFilter())
|
|
@Controller('roles')
|
|
export class RolesController {
|
|
logger: DadosferaLogger;
|
|
|
|
constructor(
|
|
@Inject(DadosferaLogger)
|
|
dadosferaLogger: DadosferaLogger,
|
|
private rolesService: RolesService,
|
|
) {
|
|
this.logger = dadosferaLogger.logger;
|
|
}
|
|
|
|
@Get()
|
|
@ApiOkResponse({ type: GetRolesByCustomerRes })
|
|
async searchRoles(
|
|
@User() user: RequestUser,
|
|
@Query() params: GetRolesByCustomerReq,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('searchRoles', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return await this.rolesService.roleSearch(params, user);
|
|
}
|
|
|
|
@Post()
|
|
@ApiCreatedResponse({ type: CreateRoleRes })
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
|
async createRole(
|
|
@User() user: RequestUser,
|
|
@Body() body: CreateRoleReq,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('createRole', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return await this.rolesService.createRole(body, user);
|
|
}
|
|
|
|
@Put('permissions')
|
|
@ApiOkResponse({ type: GrantPermissionsToRoleRes })
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
|
async grantPermissionsToRole(
|
|
@User() user: RequestUser,
|
|
@Body() body: GrantPermissionsToRoleReq,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('grantPermissionsToRole', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return await this.rolesService.grantPermissionsToRole(body, user);
|
|
}
|
|
|
|
@Delete('permissions')
|
|
@ApiOkResponse({ type: RevokePermissionsFromRoleRes })
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
|
async revokePermissionsFromRole(
|
|
@User() user: RequestUser,
|
|
@Body() body: RevokePermissionsFromRoleReq,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('revokePermissionsToRole', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return await this.rolesService.revokePermissionFromRole(body, user);
|
|
}
|
|
|
|
@Patch('permissions')
|
|
@ApiOkResponse({ type: SetRolePermissionsRes })
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
|
async setRolePermissions(
|
|
@User() user: RequestUser,
|
|
@Body() body: SetRolePermissionsReq,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('setRolePermissions', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return this.rolesService.setRolePermissions(body, user);
|
|
}
|
|
|
|
@Patch('users')
|
|
@ApiOkResponse({ type: SetRoleUsersRes })
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
|
async setRoleUsers(
|
|
@User() user: RequestUser,
|
|
@Body() body: SetRoleUsersReq,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('setRoleUsers', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return this.rolesService.setRoleUsers(body, user);
|
|
}
|
|
|
|
@Get(':id')
|
|
@ApiOkResponse({ type: RoleDto })
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
|
async getRoleById(
|
|
@User() user: RequestUser,
|
|
@Param('id') id: string,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('getRoleById', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return await this.rolesService.getRolesById(id, user);
|
|
}
|
|
|
|
@Delete(':id')
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
|
async deleteRole(
|
|
@User() user: RequestUser,
|
|
@Param('id') id: string,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('deleteRole', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return await this.rolesService.removeRole(id, user);
|
|
}
|
|
|
|
@Patch(':id')
|
|
@ApiOkResponse({ type: UpdateRoleRes })
|
|
@RequireAllPermissions(PERMISSIONS_GROUPS.USERS.permissions.ADMIN)
|
|
async updateRole(
|
|
@User() user: RequestUser,
|
|
@Param('id') id: string,
|
|
@Body() body: UpdateRoleReq,
|
|
@Language() language: LanguageEnum,
|
|
) {
|
|
this.logger.info('updateRole', { user });
|
|
this.rolesService.setLanguage(language);
|
|
return this.rolesService.updateRole(id, body, user);
|
|
}
|
|
}
|