mirror of
https://github.com/dadosfera/maestro.git
synced 2026-09-27 09:44:49 +00:00
239 lines
6.9 KiB
TypeScript
239 lines
6.9 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
Headers,
|
|
HttpCode,
|
|
HttpStatus,
|
|
Inject,
|
|
Param,
|
|
Patch,
|
|
Post,
|
|
Put,
|
|
Req,
|
|
UseFilters,
|
|
} from '@nestjs/common';
|
|
import {
|
|
ApiCreatedResponse,
|
|
ApiHeader,
|
|
ApiOkResponse,
|
|
ApiTags,
|
|
} from '@nestjs/swagger';
|
|
import { DadosferaLogger } from 'dadosfera-logs';
|
|
import { RequireAllPermissions } from 'src/authentication/authentication.decorator';
|
|
import { PERMISSIONS } from 'src/authentication/permissions.enum';
|
|
import { RequestUser, User } from 'src/authentication/user.decorator';
|
|
import { GrpcToHttpExceptionFilter } from 'src/error/grpc-to-http-exception.filter';
|
|
import { LanguageEnum } from 'src/utils/languages.enum';
|
|
import {
|
|
AssignRoleToUserReq,
|
|
BatchCreateUserReq,
|
|
BatchCreateUserRes,
|
|
CreateUserReq,
|
|
CreateUserRes,
|
|
DeleteUserRes,
|
|
GetAllDepartmentsRes,
|
|
GetAllHierarchiesRes,
|
|
GetAllJobTitlesRes,
|
|
GetAllUsersByCustomerIdRes,
|
|
SetUserRolesReq,
|
|
SetUserRolesRes,
|
|
UnassignRoleToUserReq,
|
|
UpdateUserReq,
|
|
UpdateUserRes,
|
|
UserByCustomer,
|
|
} from './dtos/entities';
|
|
import { UsersService } from './users.service';
|
|
|
|
// TODO GET de hierarquias e do PATCH em usuário
|
|
@ApiTags('Users')
|
|
@Controller('users')
|
|
@ApiHeader({
|
|
name: 'dadosfera-lang',
|
|
enum: LanguageEnum,
|
|
required: false,
|
|
description: 'Defaults to pt-br',
|
|
})
|
|
@UseFilters(GrpcToHttpExceptionFilter)
|
|
export class UsersController {
|
|
logger: any;
|
|
|
|
constructor(
|
|
@Inject(DadosferaLogger)
|
|
dadosferaLogger: DadosferaLogger,
|
|
private userService: UsersService,
|
|
) {
|
|
this.logger = dadosferaLogger.logger;
|
|
}
|
|
|
|
@Get()
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiOkResponse({
|
|
type: GetAllUsersByCustomerIdRes,
|
|
description: 'List of users of a customer',
|
|
})
|
|
async getAllUsersByCustomerId(
|
|
@User() user: RequestUser,
|
|
@Headers('dadosfera-lang') language,
|
|
): Promise<GetAllUsersByCustomerIdRes> {
|
|
this.logger.info('getAllUsersByCustomerId', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.findAllUsersByCustomerId(user.customer_id);
|
|
}
|
|
|
|
@Get('hierarchies')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiOkResponse({ type: GetAllHierarchiesRes })
|
|
async getAllHierarchies(
|
|
@User() user: RequestUser,
|
|
@Headers('dadosfera-lang') language,
|
|
): Promise<GetAllHierarchiesRes> {
|
|
this.logger.info('getAllHierarchies', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.getAllHierarchies();
|
|
}
|
|
|
|
@Get('departments')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiOkResponse({ type: GetAllDepartmentsRes })
|
|
async getAllDepartments(
|
|
@User() user: RequestUser,
|
|
@Headers('dadosfera-lang') language,
|
|
): Promise<GetAllDepartmentsRes> {
|
|
this.logger.info('getAllHierarchies', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.getAllDepartments(user.customer_id);
|
|
}
|
|
|
|
@Get('jobTitles')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiOkResponse({ type: GetAllDepartmentsRes })
|
|
async getAllJobTitles(
|
|
@User() user: RequestUser,
|
|
@Headers('dadosfera-lang') language,
|
|
): Promise<GetAllJobTitlesRes> {
|
|
this.logger.info('getAllHierarchies', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.getAllJobTitles(user.customer_id);
|
|
}
|
|
|
|
@Get(':id')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiOkResponse({
|
|
type: UserByCustomer,
|
|
})
|
|
async findOneById(
|
|
@User() user: RequestUser,
|
|
@Param('id') id: string,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('findOneById', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.findOneById(id);
|
|
}
|
|
|
|
@Post()
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiCreatedResponse({ type: CreateUserRes })
|
|
async createUser(
|
|
@User() user: RequestUser,
|
|
@Body() body: CreateUserReq,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('createUser', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.createUser(body);
|
|
}
|
|
|
|
@Post('batch')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiCreatedResponse({ type: BatchCreateUserRes })
|
|
async batchCreateUser(
|
|
@User() user: RequestUser,
|
|
@Body() body: BatchCreateUserReq,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('batchCreateUser', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.batchCreateUser(body);
|
|
}
|
|
|
|
@Post(':id')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@HttpCode(HttpStatus.OK)
|
|
async resendInvite(
|
|
@User() user: RequestUser,
|
|
@Param('id') id: string,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('resendInvite', { user });
|
|
this.userService.setLanguage(language);
|
|
return this.userService.resendInvite({ id });
|
|
}
|
|
|
|
@Delete(':id')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiOkResponse({ type: DeleteUserRes })
|
|
async deleteUser(
|
|
@User() user: RequestUser,
|
|
@Param('id') id: string,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('deleteUser', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.deleteUser({ id });
|
|
}
|
|
|
|
@Patch('roles')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiOkResponse({ type: SetUserRolesRes })
|
|
async setUserRoles(
|
|
@User() user: RequestUser,
|
|
@Body() body: SetUserRolesReq,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('createUser', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.setRoles(body, user.customer_id);
|
|
}
|
|
|
|
@Put('role')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
async assignRoleToUser(
|
|
@User() user: RequestUser,
|
|
@Body() body: AssignRoleToUserReq,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('assignRoleToUser', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.assignRoleToUser(body);
|
|
}
|
|
|
|
@Delete('role')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
async unassignRoleToUser(
|
|
@User() user: RequestUser,
|
|
@Req() request: UnassignRoleToUserReq,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('unassignRoleToUser', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.unassignRoleToUser(request);
|
|
}
|
|
|
|
@Patch(':id')
|
|
@RequireAllPermissions(PERMISSIONS.USERS.permissions.ADMIN)
|
|
@ApiOkResponse({ type: UpdateUserRes })
|
|
async updateUser(
|
|
@User() user: RequestUser,
|
|
@Body() body: UpdateUserReq,
|
|
@Param('id') id: string,
|
|
@Headers('dadosfera-lang') language,
|
|
) {
|
|
this.logger.info('updateUser', { user });
|
|
this.userService.setLanguage(language);
|
|
return await this.userService.updateUser(body, id, user.customer_id);
|
|
}
|
|
}
|