mirror of
https://github.com/dadosfera/maestro.git
synced 2026-09-08 13:04:47 +00:00
370 lines
11 KiB
TypeScript
370 lines
11 KiB
TypeScript
import { HttpStatus, HttpException, Logger } from '@nestjs/common';
|
|
import { RpcException } from '@nestjs/microservices';
|
|
|
|
import ErrorCodes from './errorCodes';
|
|
|
|
export function EnrichErrorCode(code: string) {
|
|
switch (code) {
|
|
case ErrorCodes.AUTH.WRONG_CREDENTIALS:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Não autenticado',
|
|
message: 'Usuário ou senha incorretos',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.WRONG_PASSWORD_CONFIRMATION:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Senha incorreta',
|
|
message: 'Confirmação de senha incorreta',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.TOTP_NOT_ENABLED:
|
|
return {
|
|
statusCode: HttpStatus.PRECONDITION_FAILED,
|
|
error: 'Não permitido',
|
|
message: 'A autenticação multifator não está habilitada',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.TOTP_ALREADY_ENABLED:
|
|
return {
|
|
statusCode: HttpStatus.PRECONDITION_FAILED,
|
|
error: 'Não permitido',
|
|
message: 'A autenticação multifator já está habilitada',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.TOTP_ALREADY_DISABLED:
|
|
return {
|
|
statusCode: HttpStatus.PRECONDITION_FAILED,
|
|
error: 'Não permitido',
|
|
message: 'A autenticação multifator já está desabilitada',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.TOTP_REQUIRED:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Não autenticado',
|
|
message: 'Informe o token de autenticação multifator',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.CODE_MISMATCH:
|
|
case ErrorCodes.AUTH.CODE_ALREADY_USED:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Não autenticado',
|
|
message: 'Token de autenticação multifator inválido',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.RESET_PASSWORD_CODE_EXPIRED:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Não permitido',
|
|
message: 'Token para recuperar senha expirado',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.RESET_PASSWORD_CODE_INVALID:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Não permitido',
|
|
message: 'Token para recuperar senha inválido',
|
|
code,
|
|
};
|
|
case ErrorCodes.AUTH.REQUIRED_PASSWORD_RESET:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Não permitido',
|
|
message: 'Seu usuário foi resetado por um administrador, resete a senha pelo link "Esqueci a senha", para prosseguir',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.WEAK_NEW_PASSWORD:
|
|
return {
|
|
statusCode: HttpStatus.BAD_REQUEST,
|
|
error: 'Não permitido',
|
|
message: 'Senha muito fraca. Escolha uma senha mais forte',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.TERMS_OF_USE.UP_TO_DATE:
|
|
return {
|
|
statusCode: HttpStatus.FORBIDDEN,
|
|
error: 'Não autorizado',
|
|
message: 'Você já assinou os termos de uso',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.TERMS_OF_USE.REQUIRED:
|
|
return {
|
|
statusCode: HttpStatus.FORBIDDEN,
|
|
error: 'Não autorizado',
|
|
message: 'É necessário aceitar os termos de uso para prosseguir',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.RATE_LIMIT:
|
|
return {
|
|
statusCode: HttpStatus.TOO_MANY_REQUESTS,
|
|
error: 'Limite excedido',
|
|
message:
|
|
'Você tentou realizar essa operação muitas vezes. Tente novamente mais tarde',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.UNAUTHORIZED:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Não autenticado',
|
|
message: 'É necessário estar logado para realizar essa operação',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.INVALID_REFRESH_TOKEN:
|
|
return {
|
|
statusCode: HttpStatus.UNAUTHORIZED,
|
|
error: 'Acesso expirado!',
|
|
message: 'Seu acesso expirou, favor fazer login novamente.',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.AUTH.FORBIDDEN:
|
|
return {
|
|
statusCode: HttpStatus.FORBIDDEN,
|
|
error: 'Não autorizado',
|
|
message:
|
|
'Você não tem permissões suficientes para realizar essa operação',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.ROLE.ALREADY_EXISTS:
|
|
return {
|
|
statusCode: HttpStatus.BAD_REQUEST,
|
|
error: 'Grupo já existe',
|
|
message: 'Não é possível criar um grupo com esse nome',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.ROLE.ALREADY_EXISTS_PUBLIC:
|
|
return {
|
|
statusCode: HttpStatus.BAD_REQUEST,
|
|
error: 'Grupo já existe',
|
|
message: 'Nome conflita com grupo público da Dadosfera',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.ROLE.PERMISSION_ALREADY_GRANTED:
|
|
return {
|
|
statusCode: HttpStatus.BAD_REQUEST,
|
|
error: 'Permissão já inclusa',
|
|
message: 'Permissão já consta nesse grupo',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.ROLE.PERMISSION_NOT_GRANTED:
|
|
return {
|
|
statusCode: HttpStatus.BAD_REQUEST,
|
|
error: 'Permissão não inclusa',
|
|
message: 'Permissão já consta nesse grupo',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.ROLE.PRIVATE:
|
|
return {
|
|
statusCode: HttpStatus.FORBIDDEN,
|
|
error: 'Não é possivel fazer alterações',
|
|
message: 'Você não tem permissão para alterar esse grupo',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.ROLE.NOT_FOUND:
|
|
case ErrorCodes.ROLE.FROM_ANOTHER_CUSTOMER:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Grupo não encontrado',
|
|
message: 'Grupo solicitado não encontrado',
|
|
code: ErrorCodes.ROLE.NOT_FOUND,
|
|
};
|
|
|
|
case ErrorCodes.ROLE.CANNOT_EDIT_PUBLIC_ROLE:
|
|
return {
|
|
statusCode: HttpStatus.FORBIDDEN,
|
|
error: 'Grupo público',
|
|
message: 'Você não tem permissão para editar esse grupo',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.USER.NOT_CREATED:
|
|
return {
|
|
statusCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
error: 'Ocorreu um erro ao criar seu usúario',
|
|
message: 'Tente novamente ou entre em contato com o suporte',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.USER.NOT_FOUND:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Usuário não encontrado',
|
|
message: 'Usuário solicitado não encontrado',
|
|
code,
|
|
};
|
|
case ErrorCodes.USER.ALREADY_EXISTS:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Usuário encontrado',
|
|
message: 'Nome de usuário já existente',
|
|
code,
|
|
};
|
|
case ErrorCodes.USER.INVALID_ID:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Id inválido',
|
|
message: 'Id encontra-se num formato inválido',
|
|
code,
|
|
};
|
|
case ErrorCodes.CONNECTION.NOT_FOUND:
|
|
case ErrorCodes.CONNECTION.PLATFORM_NOT_FOUND:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Conexão não encontrada',
|
|
message:
|
|
'Não encontramos a conexão solicitada. Caso o erro persista, entre em contato com o suporte',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.CONNECTION_TEST.ERROR:
|
|
return {
|
|
statusCode: HttpStatus.BAD_REQUEST,
|
|
error: 'Erro ao realizar o teste',
|
|
message: 'Verifique os dados de conexão e tente novamente',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.CONNECTION_TEST.EXPIRED:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Teste de conexão expirado',
|
|
message: 'Favor realizar novo teste',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.CONNECTION_TEST.TIMEOUT:
|
|
return {
|
|
statusCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
error: 'Tempo limite excedido',
|
|
message:
|
|
'O teste excedeu o tempo limite. Verifique os dados de conexão e tente novamente',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.CONNECTION_TEST.BAD_REQUEST:
|
|
return {
|
|
statusCode: HttpStatus.BAD_REQUEST,
|
|
error: 'Erro ao testar conexão',
|
|
message:
|
|
'Verifique se todas as informações foram preenchidas corretamente',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.PIPELINE.NOT_FOUND:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Não encontramos a pipeline solicitada',
|
|
message:
|
|
'Tente realizar a ação novamente. Caso o erro persista, entre em contato com o suporte',
|
|
code,
|
|
};
|
|
|
|
case ErrorCodes.PIPELINE.PLATFORM_NOT_FOUND:
|
|
case ErrorCodes.PIPELINE.PLATFORM_BAD_REQUEST:
|
|
case ErrorCodes.PIPELINE.PLATFORM_UNKNOWN:
|
|
return {
|
|
statusCode: HttpStatus.BAD_GATEWAY,
|
|
error: 'Oops... Não foi possível realizar sua ação',
|
|
message:
|
|
'Houve um erro interno ao buscar por sua pipeline. Caso o erro persista, entre em contato com o suporte',
|
|
code,
|
|
};
|
|
case ErrorCodes.INPUT.NOT_FOUND:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Oops... O recurso que você buscou não está disponível',
|
|
message:
|
|
'Não encontramos o recurso buscado. Caso o erro persista, entre em contato com o suporte',
|
|
code,
|
|
};
|
|
case ErrorCodes.NOT_IMPLEMENTED:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Oops... O serviço que você está tentando acessar não existe!',
|
|
message: 'Caso o erro persista, entre em contato com o suporte',
|
|
code,
|
|
};
|
|
case ErrorCodes.CATALOG.DATA_ASSET_NOT_FOUND:
|
|
return {
|
|
statusCode: HttpStatus.NOT_FOUND,
|
|
error: 'Não encontramos o ativo solicitado',
|
|
message:
|
|
'Tente realizar a ação novamente. Caso o erro persista, entre em contato com o suporte',
|
|
code,
|
|
};
|
|
case ErrorCodes.CATALOG.PREVIEW_TOO_BIG:
|
|
return {
|
|
statusCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
error: 'Erro ao buscar prévia',
|
|
message: 'Ocorreu um erro devido ao tamanho da prévia do ativo.',
|
|
code,
|
|
};
|
|
case ErrorCodes.CATALOG.METADATA_TOO_BIG:
|
|
return {
|
|
statusCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
error: 'Erro ao buscar informações',
|
|
message: 'Ocorreu um erro devido ao tamanho das informações do ativo.',
|
|
code,
|
|
};
|
|
case ErrorCodes.INTERNAL:
|
|
case ErrorCodes.UNKNOWN:
|
|
default:
|
|
return {
|
|
statusCode: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
error: 'Oops... Não foi possível realizar sua ação',
|
|
message:
|
|
'Ocorreu um erro desconhecido. Caso o erro persista, entre em contato com o suporte',
|
|
code: ErrorCodes.UNKNOWN,
|
|
details: code,
|
|
};
|
|
}
|
|
}
|
|
|
|
const logger = new Logger();
|
|
|
|
export default class ErrorBuilder extends HttpException {
|
|
code: string;
|
|
|
|
constructor(code: string | RpcException = '') {
|
|
if (typeof code !== 'string') {
|
|
logger.log(code?.stack);
|
|
code = (code as any)?.details as string;
|
|
} else {
|
|
logger.log(code);
|
|
}
|
|
|
|
const {
|
|
statusCode,
|
|
message,
|
|
error,
|
|
code: rCode,
|
|
details,
|
|
} = EnrichErrorCode(code);
|
|
super({ statusCode, message, error, code: rCode, details }, statusCode);
|
|
this.code = code;
|
|
}
|
|
}
|