Este projeto é uma API para gerenciar usuários e emblemas (badges), permitindo que os usuários resgatem emblemas e visualizem os emblemas que já resgataram. A API é construída utilizando o framework NestJS com TypeScript e integra o uso de autenticação JWT para proteger rotas específicas.
- NestJS: Framework de Node.js para construção de aplicações server-side eficientes e escaláveis.
- TypeScript: Superconjunto de JavaScript que adiciona tipagem estática ao código.
- TypeORM: ORM (Object-Relational Mapper) para interagir com o banco de dados.
- JWT (JSON Web Token): Para autenticação de rotas protegidas.
- bcrypt: Biblioteca para hashing de senhas.
- Swagger: Para documentação da API.
- MySQL: Banco de dados relacional utilizado.
- auth/: Contém a lógica de autenticação, incluindo estratégias JWT e guardas de autenticação.
- user/: Contém a lógica relacionada aos usuários, incluindo a entidade User e o serviço UserService.
- badge/: Contém a lógica relacionada aos emblemas, incluindo a entidade Badge e o serviço BadgeService.
- main.ts: Arquivo principal para inicializar a aplicação NestJS.
- app.module.ts: Módulo raiz da aplicação que importa e configura todos os outros módulos.
- POST /auth/register: Registrar um novo usuário.
- POST /auth/login: Fazer login e obter um token JWT.
- GET /badges: Listar todos os emblemas.
- GET /badges/user/:userId/redeemed: Listar todos os emblemas resgatados por um usuário específico (rota protegida por JWT).
- POST /badges/:slug/redeem: Resgatar um emblema específico pelo slug (rota protegida por JWT).
- GET /users/{id}: Buscar user pelo id
- Node.js (versão 14 ou superior)
- MySQL
-
Clone o repositório:
git clone git@github.com:JaquelineAPSantos/Desafio-BackEnd-CidadeAlta.git cd badge-system
-
Instale as dependências:
npm install
-
Configuração do Banco de Dados:
DATABASE_HOST=localhost DATABASE_PORT=3306 DATABASE_USER=root DATABASE_PASSWORD=sua-senha DATABASE_NAME=nome-do-banco JWT_SECRET=sua-chave-secreta
-
Inicie a aplicação:
npm run start:dev
-
Acesse a documentação da API:
Abra o navegador e acesse [http](//localhost:3000/api) para visualizar a documentação da API gerada pelo Swagger.
-
Método: POST
-
URL:
http://localhost:3000/users
-
Body:
{ "username": "cecilia", "email": "cecilia@example.com", "password": "123456" }
-
Resposta Esperada:
- Status: 201 Created - Descrição: Usuário registrado com sucesso.
-
Método: POST
-
URL:
http://localhost:3000/auth/login
-
Body:
{ "username": "cecilia", "email": "cecilia@teste.com" }
-
Resposta Esperada:
-
Status: 200 OK
-
Body:
{ "access_token": "seu_token_jwt" }
-
Método: GET
-
URL:
http://localhost:3000/badges
-
Resposta Esperada:
-
Status: 200 OK
-
Body: Array de objetos Badge
-
Método: POST
-
URL:
http://localhost:3000/badges/:slug/redeem
-
Headers:
-
Authorization: Bearer seu_token_jwt
-
Body:
{ "userId": 9 }
-
Resposta Esperada:
-
Status: 200 OK
-
Método: GET
-
URL:
-
htttp://localhost:3000/badges/user/:userId/redeemed
-
Headers:
Authorization: Bearer seu_token_jwt
-
Resposta Esperada:
-
Status: 200 OK
-
Body: Array de objetos Badge
-
Se você encontrar problemas ou tiver sugestões de melhorias, sinta-se à vontade para abrir uma issue ou enviar um pull request.
-
Feito com muita dedicação, carinho e esforço por Jaqueline Santos