- Agenda - Teste Técnico Fullstack S3
- Shalom!
Essa aplicação foi desenvolvida para o teste técnico realizado na sprint 3 do módulo 6 para a Kenzie Academy Brasil no intuito de revisar e treinar testes técnicos para o mercado de trabalho.
O objetivo dessa aplicação é servir como um backend para o projeto fullstack de uma Agenda.
Frontend
Backend
Tecnologias usadas nesse projeto:
Clone o projeto em sua máquina local e instale as dependências do projeto com o comando:
yarn install
ou
npm install
Crie um arquivo .env no diretório raiz do projeto, copiando o exemplo do .env.example:
cp .env.example .env
Atribua suas variáveis de ambiente às credenciais do seu PostgreSQL à um database da sua escolha
- POSTGRES_USER=seu_nome_de_usuário_psql
- POSTGRES_PWD=sua_senha_psql
- POSTGRES_DB=nome_do_database
Variável PORT:
- Não é necessário atribuir uma porta, porém, recomendamos fortemente que seja atribuído a porta 4000 para que o frontend funcione junto com o backend
Variável SECRET_KEY:
- A SECRET_KEY está no .env.exemplo, basta copiar e colar na variável. Isso foi feito para facilitar a configuração do avaliador, porém, em ambiente de produção, não é recomandado que a SECRET_KEY fique em local visível.
yarn typeorm migration:run -d src/data-source.ts
Agora que tudo está instalado e configurado, rode a aplicação usando o comando:
yarn dev
Aguarde o processamento e sua aplicação já estará disponível para uso em https://doc-fullstack-m6.vercel.app ou http://localhost:4000/ .
Observação: Rode a aplicação como descrito no passo 3
O consumo pode ser feito tanto pelo deploy do frontend (links logo abaixo), pelo Insonmia e pelo clone do repositório do frontend.
É possível acessar à documentação completa para poder utilizar a API.
Nessa mesma documentação é possível adquirir informações sobre os requests, chaves necessárias do request e outras informações importantes para a utilização da API.
Interfaces e Entities desenvolvidas:
- Users (CRUD completo)
- Login (POST)
- Contacts (CRUD completo)
O Objetivo principal dessa aplicação é a validação dos meus conhecimentos nos seguintes tópicos:
- Javascript;
- NodeJs;
- Express;
- TypeScript
- Solucionar demandas;
- Criar um projeto fullstack com API restfull;
- Utilizar Frameworks ou bibliotecas (Opcional)
- Inicialmente, decidi por começar pela análise do teste proposto, com isso, pude observar e pesquisar quais eram as tecnologias, frameworks e libs que poderiam ser usadas no desenvolvimento.
- Iniciei pelo backend, criando a arquitetura do servidor
- Interfaces e Entities;
- Middlewares
- Services e Controllers
- Routes
- Error e tratamentos
- Depois, trabalhei no frontend da aplicação.
- Por fim, fiz os demais fix necessários do código e a documentação da API
Foram criados, no total, 2 entities:
- User: Onde é feito o CRUD do usuário será o responsável por logar e administrar seus contatos;
- Contacts: Aqui está o CRUD que pode ser feito pelo usuário devidamente logado;
Nessa arquitetura, há duas pastas importantes:
- Middlewares: Onde ficam armazenados os arquivos funcionam como um serviço intermediário ao services e controllers. São utilizados quando é necessário fazer algum tipo de verificação constante no código, evitando o retrabalho:
- authToken.middleware: Verifica se o usuário está logado;
- error.middleware: Usado para repassar ao cliente as mensagens de erro;
- userIsHimself.middleware: Verifica se o usário logado é dono da requisição;
- verifyUsernameAvailability.middleware: Verifica se o username está disponível para uso;
- yupValidate.middleware: Usado para o tratamento dos Schemas de validação feitas pelo YUP;
- Schemas: Onde ficam os arquivos utilizados pela biblioteca YUP para verificar possíveis erros de requisição nas rotas, gerando uma camada de proteção maior na API.
- De todos os feedbacks de erro, o único que não consegui cobrir (está retornando Internal Server Error) é caso em um Update ou List usando um ID.
- Por questões de tempo, não consegui desenvolver os testes da aplicação pois tive que revisar muita informação relacionada a NodeJS, Express e TypeScript, por isso, decidi por focar na finalização de uma aplicação de qualidade
Quero agradecer pela oportunidade de fazer o teste técnico e espero ter conseguido cumprir com boa parte daquilo que foi solicitado