Sistema para suporte à avaliação do consumo alimentar e cálculo de receitas foi desenvolvido para ser um sistema que apoie pesquisadores da área de nutrição na obtenção de dados de consumo alimentar mais acurados, além de ser ferramenta para registrar e calcular as informações obtidas pela aplicação de inquéritos dietéticos na prática profissional do nutricionista.
Clone o projeto
git clone [email protected]:OSANES-Mandacaru/mandacaru-api.git
Entre para o diretório do projeto
cd mandacaru-api
- Use o arquivo .env.examples para configurar suas credenciais
Instale as dependências
yarn install
Inicie o servidor
yarn start:dev
- @src = ./src
- @auth = ./src/modules/auth
index.ts
: ponto de entradaserver.ts
: configuração do servidorDefaultRoute.ts
: rota default que redireciona para a documentação
Neste diretório ficam os contratos, protocolos de cada entidade e a documentação do swagger
Diretório destinado a tipagem para uso do supertest e contrato para o request
Neste diretório ficam os tratamentos de erros genéricos
Neste diretório ficam as funções relacionadas as libs e ao banco
Exemplo:
UUID.ts
- gerar UUID ou validartypeormManagers.ts
- instanciar manipuladores do typeormuserManagers.ts
- representação dos manipuladores para usuário
"Manipuladores" são funções do typeorm que permitem acessar e fazer manipulações no banco de dados
Neste diretório ficam os middlewares que podem ser acessados por qualquer camada do projeto
Exemplo:
validateIdParams.ts
- valida o uuid vindo do request paramsbeginInstances
- inicializa as instâncias do services
Neste diretório fica toda regra de negocio, entidades e suas dependências, e tudo divido em camadas.
Esta é a camada de autorização, responsável pelas entidades de Address, Admin, Subject e User.
Por conta da abstração do overnightjs, os controllers sobrescrevem as rotas, portanto, nesse diretório ficam as rotas e os controllers para suas entidades especificas.
Exemplos:
-
UserController.ts
:@Controller('user')
:- Nível: class
- Descrição: define a classe inteira como uma rota para o endpoint de
/user
@Post('')
:- Nível: method
- Descrição: define o método da classe como um método de requisição HTTP do tipo
POST
- Endpoint: como o parâmetro passado foi uma string vazia, seu endpoint continua sendo apenas
/user
@Middleware(createUser)
- Nível: method
- Descrição: executa os middlewares fornecidos, que nesse exemplo em especifico é o middleware para validar os dados de criação do usuário
-
SubjectController.ts
:@Controller('subject')
:- Nível: class
- Descrição: define a classe inteira como uma rota para o endpoint de
/subject
@Get(':id')
:- Nível: method
- Descrição: define o método da classe como um método de requisição HTTP do tipo
GET
- Endpoint:
/subject/:id
e como o parâmetro é do tipo - Observação: como o parâmetro é do tipo "
:(alguma coisa)
" isso indica que é possível resgatar o valor do parâmetro através dorequest.params
@Middleware([validateIdParams, authUser...
- Nível: method
- Descrição: executa os middlewares fornecidos
Neste diretório ficam as implementações de cada entidade junto com suas especificações
Neste diretório ficam os tratamentos de erros específicos para cada entidade
Neste diretório ficam as consultas de api's externas
Exemplo:
ViaCep
- API para validar CEP
Neste diretório ficam as funções para formatar os dados antes de retornar ao usuário.
Neste diretório ficam os middlewares de validação de dados e entidades
Neste diretório ficam services que são responsáveis pelas execução da regra de negocio