export type tipoRespostaSucesso = { cod: 200 valor: T mensagem: undefined eErro: false eCerto: true detalhe?: undefined } export type tipoRespostaErro = { //400 é um erro conhecido, //500 é um erro desconhecido, geralmente tem origem de um exception cod: 400 | 401 | 500 valor: undefined mensagem: string eErro: true eCerto: false detalhe?: string[] } export type tipoResposta = tipoRespostaSucesso | tipoRespostaErro export const gerarRespostas = ( registrarErroInterno: (erro: T) => Partial, ) => { /** * Gera uma resposta de sucesso */ const valor = (valor: T): tipoRespostaSucesso => { return { cod: 200, valor, mensagem: undefined, eErro: false, eCerto: true, } } /** * Gera uma resposta de sucesso com valor true */ const valorTrue = (): tipoRespostaSucesso => { return { cod: 200, valor: true, mensagem: undefined, eErro: false, eCerto: true, } } /** * Gera uma resposta de erro conhecido */ const erro = (mensagem: string): tipoRespostaErro => { return { cod: 400, valor: undefined, mensagem, eErro: true, eCerto: false, } } /** * Gera uma resposta de erro de permissão,será necessário fazer o login novamente */ const erroPermissao = (mensagem?: string): tipoRespostaErro => { return { cod: 401, valor: undefined, mensagem: mensagem || "Sem permissão para esse recurso.", eErro: true, eCerto: false, } } /** * Gera uma resposta de erro desconhecido, geralmente tem origem de um exception */ const erroInterno = (parametros: T, mensagem?: string): tipoRespostaErro => { const resRegistro = registrarErroInterno(parametros) const mensagemFim = `${mensagem || "Erro interno"}` return { cod: 500, valor: undefined, mensagem: mensagemFim, eErro: true, eCerto: false, ...resRegistro, } } return { valor, valorTrue, erro, erroPermissao, erroInterno, } } /** * Uso de respostas em comuns */ export const respostaComuns = gerarRespostas(() => ({}))