173 lines
3.9 KiB
TypeScript
173 lines
3.9 KiB
TypeScript
export enum codigosResposta {
|
|
sucesso = 200,
|
|
erroConhecido = 400,
|
|
erroPermissao = 401,
|
|
erroNaoEncontrado = 404,
|
|
erroDesconhecido = 500,
|
|
tempoEsgotado = 504,
|
|
}
|
|
|
|
export type tipoRespostaSucesso<T> = {
|
|
cod: codigosResposta.sucesso
|
|
valor: T
|
|
mensagem: undefined
|
|
eErro: false
|
|
eCerto: true
|
|
detalhes?: string[]
|
|
}
|
|
|
|
export type tipoRespostaErro = {
|
|
cod:
|
|
| codigosResposta.erroConhecido
|
|
| codigosResposta.erroDesconhecido
|
|
| codigosResposta.erroPermissao
|
|
| codigosResposta.erroNaoEncontrado
|
|
| codigosResposta.tempoEsgotado
|
|
valor: undefined
|
|
mensagem: string
|
|
eErro: true
|
|
eCerto: false
|
|
detalhes?: string[]
|
|
}
|
|
|
|
export type tipoResposta<T> = tipoRespostaSucesso<T> | tipoRespostaErro
|
|
|
|
export const gerarRespostas = <T>(
|
|
registrarErroInterno: (erro: T) => Partial<tipoRespostaErro>,
|
|
) => {
|
|
const valor = <T>(valor: T, detalhes?: string[]): tipoRespostaSucesso<T> => {
|
|
return {
|
|
cod: codigosResposta.sucesso,
|
|
valor,
|
|
mensagem: undefined,
|
|
eErro: false,
|
|
eCerto: true,
|
|
detalhes,
|
|
}
|
|
}
|
|
|
|
const valorTrue = (detalhes?: string[]): tipoRespostaSucesso<true> => {
|
|
return {
|
|
cod: codigosResposta.sucesso,
|
|
valor: true,
|
|
mensagem: undefined,
|
|
eErro: false,
|
|
eCerto: true,
|
|
detalhes,
|
|
}
|
|
}
|
|
|
|
const erro = (mensagem: string, detalhes?: string[]): tipoRespostaErro => {
|
|
return {
|
|
cod: codigosResposta.erroConhecido,
|
|
valor: undefined,
|
|
mensagem,
|
|
eErro: true,
|
|
eCerto: false,
|
|
detalhes,
|
|
}
|
|
}
|
|
|
|
const erroPermissao = (
|
|
mensagem?: string | undefined | null,
|
|
detalhes?: string[],
|
|
): tipoRespostaErro => {
|
|
return {
|
|
cod: codigosResposta.erroPermissao,
|
|
valor: undefined,
|
|
mensagem: mensagem || "Sem permissão para esse recurso.",
|
|
eErro: true,
|
|
eCerto: false,
|
|
detalhes,
|
|
}
|
|
}
|
|
|
|
const naoEncontrado = (
|
|
mensagem?: string | undefined | null,
|
|
detalhes?: string[],
|
|
): tipoRespostaErro => {
|
|
return {
|
|
cod: codigosResposta.erroNaoEncontrado,
|
|
valor: undefined,
|
|
mensagem:
|
|
mensagem ||
|
|
"Registro não encontrado ou a execução dessa ação depende de um registro existente.",
|
|
eErro: true,
|
|
eCerto: false,
|
|
detalhes,
|
|
}
|
|
}
|
|
|
|
const erroInterno = (parametros: T, mensagem?: string): tipoRespostaErro => {
|
|
const resRegistro = registrarErroInterno(parametros)
|
|
|
|
const mensagemFim = `${mensagem || "Erro interno"}`
|
|
|
|
return {
|
|
cod: codigosResposta.erroDesconhecido,
|
|
valor: undefined,
|
|
mensagem: mensagemFim,
|
|
eErro: true,
|
|
eCerto: false,
|
|
...resRegistro,
|
|
}
|
|
}
|
|
|
|
const tempoEsgotado = (
|
|
mensagem?: string | undefined | null,
|
|
detalhes?: string[],
|
|
): tipoRespostaErro => {
|
|
return {
|
|
cod: codigosResposta.tempoEsgotado,
|
|
valor: undefined,
|
|
mensagem:
|
|
mensagem || "Tempo de resposta esgotado ao tentar acessar o recurso.",
|
|
eErro: true,
|
|
eCerto: false,
|
|
detalhes,
|
|
}
|
|
}
|
|
|
|
const erroEspera = tempoEsgotado
|
|
|
|
return {
|
|
/**
|
|
* Gera uma resposta de sucesso
|
|
*/
|
|
valor,
|
|
/**
|
|
* Gera uma resposta de sucesso com valor true
|
|
*/
|
|
valorTrue,
|
|
/**
|
|
* Gera uma resposta de erro conhecido
|
|
*/
|
|
erro,
|
|
/**
|
|
* Gera uma resposta de erro de permissão,será necessário fazer o login novamente
|
|
*/
|
|
erroPermissao,
|
|
/**
|
|
* Gera uma resposta de erro desconhecido, geralmente tem origem de um exception
|
|
*/
|
|
erroInterno,
|
|
/**
|
|
* Gera uma resposta de erro quando um registro não é encontrado ou sua execução depende de um registro existente
|
|
*/
|
|
naoEncontrado,
|
|
|
|
/**
|
|
* Gera uma resposta de erro quando o tempo de resposta é esgotado
|
|
*/
|
|
tempoEsgotado,
|
|
/**
|
|
* Gera uma resposta de erro quando o tempo de resposta é esgotado
|
|
*/
|
|
erroEspera,
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Uso de respostas em comuns
|
|
*/
|
|
export const respostaComuns = gerarRespostas(() => ({}))
|