Para rodar sua aplicação laptop-scraping, siga as instruções abaixo.
Este projeto é uma aplicação de web scraping desenvolvida em TypeScript que coleta informações sobre laptops de um site de e-commerce e as disponibiliza através de uma API RESTful. Ele utiliza Redis para caching dos resultados da raspagem.
A aplicação pode ser executada tanto em modo de desenvolvimento quanto em produção utilizando Docker Compose.
Certifique-se de ter o Docker e o Docker Compose instalados em sua máquina.
-
Variáveis de Ambiente: A aplicação utiliza variáveis de ambiente para configuração do Redis e do modo de debug. Crie um arquivo
.envna pastadotenv_files/(ou seja,dotenv_files/.env) com base no.env-examplefornecido:cp dotenv_files/.env-example dotenv_files/.env
O conteúdo do
dotenv_files/.env-exampleé:DEBUG=1 REDIS_HOST=laptop_redis REDIS_PORT=6379Você pode alterar
DEBUGpara0para rodar em modo de produção.
Navegue até o diretório raiz do projeto onde o arquivo docker-compose.yml está localizado.
-
Construir e Iniciar os Serviços:
Para iniciar a aplicação e o servidor Redis, execute:
docker-compose up --build
--build: Garante que as imagens Docker sejam construídas (ou reconstruídas) antes de iniciar os contêineres.
A aplicação estará acessível em
http://localhost:3000. O Redis estará acessível emhttp://localhost:3001.
O entrypoint.sh gerencia o modo de execução da aplicação:
- Modo de Desenvolvimento (
DEBUG=1): A aplicação é iniciada comnpm run dev, que usats-node-devpara recarregar automaticamente as alterações de código. Isso é ideal para desenvolvimento. - Modo de Produção (
DEBUG=0): A aplicação primeiro executanpm run buildpara compilar o TypeScript para JavaScript, e entãonpm startpara iniciar a aplicação compilada.
Uma vez que a aplicação esteja rodando, você pode acessar os seguintes endpoints:
-
API Principal:
http://localhost:3000/api/laptops- Método:
GET - Descrição: Lista laptops, com filtro por título e opções de ordenação.
- Parâmetros de Query:
searchByTitle(opcional, string): Texto para buscar no nome do laptop.sortBy(opcional, string): Ordena porprice(preço) ouname(nome). Padrão éprice.reverse(opcional, boolean): Setrue, inverte a ordem dos resultados.
- Método:
-
Documentação Swagger:
http://localhost:3000/docs- Descrição: Documentação interativa da API gerada automaticamente com Swagger UI.
src/services/scraping-service.ts: Contém a lógica principal para raspar os dados dos laptops.src/routes/laptop-routes.ts: Define as rotas da API para buscar e filtrar laptops.src/external/redis-connection.ts: Gerencia a conexão com o Redis.src/models/laptop-models.ts: Define as interfaces de dados paraLaptopeLaptopReview.src/server.ts: Configura e inicia o servidor Express, integra as rotas e a documentação Swagger.docker-compose.yml: Define os serviços Docker para a aplicação Express e o servidor Redis.Dockerfile: Contém as instruções para construir a imagem Docker da aplicação.entrypoint.sh: Script de entrada para o contêiner Docker, alternando entre modos de desenvolvimento e produção.package.json: Lista as dependências do projeto e os scripts npm.tsconfig.json: Configurações do compilador TypeScript..dockerignore: Arquivos e diretórios a serem ignorados pelo Docker durante a construção da imagem..gitignore: Arquivos e diretórios a serem ignorados pelo Git.