Skip to content

Latest commit

 

History

History
184 lines (138 loc) · 5.61 KB

README_pt-br.md

File metadata and controls

184 lines (138 loc) · 5.61 KB

Shurl Express

License: MIT Node.js Logo TypeScript Logo Express Docker PostgreSQL TypeORM JWT OpenAPI Prettier ESLint

Sobre

Shurl Express é uma aplicação web que permite o encurtamento de URLs. Foi desenvolvida como parte de um code challenge em um processo seletivo.

A versão do node utilizada, como especificado na Dockerfile, é 22.x, que é a versão estável mais recente do Node.js até o lançamento deste app. Como este foi um desafio de desenvolvimento, optou-se pela utilização do tsx. Desta forma, não é feito o build da aplicação no container.

Requisitos

Aqui são alguns requisitos feitos pelo recrutador, de forma simplificada:

  • Usar a versão estável mais recente do Node.js
  • Usar TypeScript
  • Implementar autenticação baseada em tokens, com cadastro de usuário e login
  • Encurtar URLs com um limite de 6 caracteres para o slug
  • Contar o número de vezes que cada URL é acessada
  • Implementar a exclusão lógica de URLs
  • Registros devem ter uma data de atualização
  • Construir endpoints para:
    • Encurtar URLs (token opcional)
    • Accessar URLs encurtadas
    • Listar URLs encurtadas pelo usuário (token obrigatório)
    • Atualizar URLs encurtadas (token obrigatório)
    • Deletar URLs encurtadas (token obrigatório)

Extras

  • Usar Docker Compose para construir e executar o projeto
  • Implementar documentação Swagger
  • Configurar pre-commit hooks

Configuração

1. Clone este repository

git clone https://github.com/GuilhermeCAz/shurl_express.git
cd shurl_express

2. Crie um arquivo .env, conforme o .env.example

3. Faça o build das imagens e as execute

docker compose up --build --detach

Alternativamente, execute o seguinte comando:

npm run up

O servidor ficará acessível no endereço http://localhost:3000.

Para interromper o servidor, execute o seguinte comando:

docker compose down

Endpoints da API

Autenticação

  • POST /register: Registrar um usuário.
  • POST /login: Logar e obter um token JWT.

Gerenciamento de URLs

  • POST /urls: Encurtar uma URL. Requer originalURL válido no corpo da requisição.
  • GET /urls: Listar todas as URLs associadas ao usuário.
  • PATCH /urls/:slug: Atualizar a URL original de um slug. Requer originalURL válido no corpo da requisição.
  • DELETE /urls/:slug: Deletar logicamente uma URL pelo slug.
  • GET /:slug: Redirecionar para a URL original.

Uso

Os seguintes comandos podem ser usados para interagir com a API. Alternativamente, você pode usar o Swagger UI, a partir do endereço http://localhost:3000/docs.

Registrar usuário | opcional

curl -X 'POST' \
  'http://localhost:3000/register' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "user@example.com",
  "password": "Password123"
}'

Login | opcional -> retorna JWT

curl -X 'POST' \
  'http://localhost:3000/login' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "user@example.com",
  "password": "Password123"
}'

Após o login, é possível usar o token no cabeçalho das requisições seguintes. Basta adicionar este comando à requisição:

-H 'Authorization: Bearer ${JWT}'

Este comando habilita a associação de URLs com o usuário. Dessa forma, você é autorizado a listar, editar e excluir URLs encurtadas por você.

Encurtar URL | token opcional

curl -X 'POST' \
  'http://localhost:3000/urls' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer ${JWT}' \
  -H 'Content-Type: application/json' \
  -d '{
  "originalURL": "https://example.com"
}'

Listar URLs do Usuário | token obrigatório

curl -X 'GET' \
  'http://localhost:3000/urls' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer ${JWT}'

Atualizar URL | token obrigatório

curl -X 'PATCH' \
  'http://localhost:3000/urls/${slug}' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer ${JWT}' \
  -H 'Content-Type: application/json' \
  -d '{
  "originalURL": "https://example.com"
}'

Deletar URL | token obrigatório

curl -X 'DELETE' \
  'http://localhost:3000/urls/${slug}' \
  -H 'accept: */*' \
  -H 'Authorization: Bearer ${JWT}'

Redirecionar para URL original

curl -X 'GET' \
 'http://localhost:3000/${slug}' \
 -H 'accept: */*' \

Observação

O botão try it out do Swagger UI não funciona para esta requisição, devido à política de CORS. Use diretamente o seu navegador.