Skip to content

O projeto consiste em um serviço de consulta de CEP, onde o usuário informa o CEP e obtem informações como logradouro, bairro, cidade e estado.

Notifications You must be signed in to change notification settings

RanielliMontagna/desafio-luizalabs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desafio Técnico - Consulta de CEP

Teste técnico para a vaga de desenvolvedor pleno na Luiza Labs

Atividade do repositório Último commit Linguagem principal Tamanho do repositório

🔗 Sumário

01 - Expor serviço de consulta de CEP

📖 Sobre o projeto

📜 O que é?

O projeto consiste em um serviço de consulta de CEP, onde o usuário informa o CEP e obtem informações como rua, cidade e estado.

⚒️ Linguagem escolhida

A linguagem escolhida para o desenvolvimento do projeto foi o JavaScript, mais especificamente o Node.js. A escolha se deu por ser uma linguagem que tenho mais familiaridade e por ser uma linguagem que permite a tipagem de dados, o que facilita a manutenção do código. Além disso, o Node.js é uma plataforma que permite a criação de aplicações web com JavaScript, o que permite a criação de aplicações web com uma única linguagem, além de ser uma plataforma que permite a criação de aplicações escaláveis.

🎨 Arquitetura

A arquitetura do projeto é baseada nos conceitos de DDD (Domain Driven Design), SOLID e Clean Architecture. A escolha se deu por ser uma arquitetura que permite a criação de aplicações escaláveis, de fácil manutenção e que permite a criação de testes automatizados. Além disso, a arquitetura permite a criação de aplicações com baixo acoplamento e alta coesão.

☁️ Deploy

O projeto foi hospedado na plataforma Render, que permite o deploy de aplicações de forma simples e rápida. Para acessar o projeto, acesse os links:

  • API - API para consulta de CEP
  • Web - Aplicação web que consome a APIs
⚠️ A API está hospedada em um plano gratuito, portanto, pode demorar a responder na primeira requisição.

📚 Documentação

A documentação da API foi feita utilizando o Swagger, que é uma ferramenta que permite a criação de documentações para APIs de forma simples e rápida. Para acessar a documentação, acesse o link:

⚡ Tecnologias usadas na API

  • Node.js - Interpretador de JavaScript para o backend
  • Express - Framework para criação de aplicações web com Node.js
  • TypeScript - Superset de JavaScript que permite a tipagem de dados
  • Vitest - Ferramenta de teste para aplicações JavaScript
  • Zod - Biblioteca para validação de dados
  • Docker - Plataforma para criação de ambientes isolados
  • Prisma - ORM para Node.js e TypeScript
  • JWT - Geração e validação de tokens de autenticação
  • Postman - Ferramenta para testar APIs

🛣️ Rotas

Método Rota Descrição Autenticação
POST 📤 /authenticate Autenticação do usuário 🔓 Público
GET 📥 /check Health check 🔓 Público
GET 📥 /cep/:cep Consulta de CEP 🔒 Privado

🚀 Como executar o projeto utilizando o Docker

📦 Pré-requisitos

Para executar o projeto é necessário ter instalado o Node.js e o Docker.

📂 Clonando o repositório

# Clone o repositório
$ git clone

# Acesse a pasta do projeto
$ cd desafio-tecnico-luizalabs

🐳 Container do serviço e api

# Acesse a pasta do serviço
$ cd service

# Execute o comando do docker para criar o container
$ docker-compose up -d

Depois de executar o comando, será criado um container com o banco de dados e outro com a API. Para verificar se os containers foram criados, execute o seguinte comando:

# Verifique se os containers foram criados
$ docker ps

Pronto, o servidor está pronto para ser utilizado no endereço http://localhost:3333.

🌐 Aplicação web

# Acesse a pasta da aplicação web
$ cd web

# Execute o comando do docker para criar o container
$ docker-compose up -d

Pronto, a aplicação web está pronta para ser utilizada no endereço http://localhost:3000.

🚀 Como utilizar para desenvolvimento

🐳 Iniciando o banco de dados

# Inicie o banco de dados
$ docker-compose up -d

📦 Instalando as dependências

# Instale as dependências
$ npm install

📚 Preparando o banco de dados

# Execute as migrations
$ npm run prisma:migrate

# Esse comando irá criar as tabelas e popular o banco de dados com os dados do arquivo ./service/prisma/seed.ts

🚀 Iniciando o servidor

# Inicie o servidor
$ npm run dev

Pronto, o servidor está rodando em http://localhost:3333 ou na porta que você definiu no arquivo .env.

🧪 Testes

⚠️ Lembrando que para executar os testes, é necessário instalar as dependências do projeto. Para isso, execute o comando npm install na pasta do projeto.

⚗️ Testes unitários

Para executar os testes unitários, execute o seguinte comando:

# Execute os testes unitários
$ npm run test

caso queira executar os testes com o coverage, execute o seguinte comando:

# Execute os testes unitários com o coverage
$ npm run test:coverage

🧪 Testes e2e

Para executar os testes e2e, execute o seguinte comando:

# Execute os testes e2e
$ npm run test:e2e

02 - Questão teórica

Quando você digita a URL de um site (http://www.netshoes.com.br) no browser e pressiona enter, explique da forma que preferir, o que ocorre nesse processo do protocolo HTTP entre o Client e o Server?

Ao acessar o site, o navegador faz uma requisição para o servidor utilizando o protocolo HTTP, mais precisamente o método GET. O servidor recebe a requisição e retorna o status 307 Internal Redirect, que indica que o recurso solicitado está temporariamente em um local diferente, e nos headers da resposta, no header Location, retorna a nova URL do recurso.

HTTP/1.1 307 Internal Redirect
Location: https://www.netshoes.com.br

Essa URL utiliza o protocolo HTTPS, que é uma versão mais segura do HTTP. O navegador então faz uma nova requisição para o servidor utilizando a nova URL e o servidor retorna o status 200 OK, que indica que a requisição foi bem sucedida, e retorna o html da página.

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

O navegador então interpreta o html e faz novas requisições para o servidor para obter os arquivos necessários para renderizar a página, como imagens, arquivos css e arquivos javascript.

E por fim, o navegador renderiza a página e exibe para o usuário.

🖊️ Autor - @raniellimontagna

About

O projeto consiste em um serviço de consulta de CEP, onde o usuário informa o CEP e obtem informações como logradouro, bairro, cidade e estado.

Topics

Resources

Stars

Watchers

Forks