Esta API fornece um backend para gerenciamento e classificação de hospedagens, incluindo recursos como autenticação de usuários, filtragem de hotéis e muito mais. Segue uma arquitetura flexível e com injeção de dependência para garantir escalabilidade e manutenibilidade.
- Classificação de Hospedagens através de um serviço de AI
- Autenticação e autorização de usuários usando JWT
- Operações CRUD para hotéis com campos de dados detalhados
- Filtros para busca de hotéis baseados em bairros, estrelas e nomes
- Injeção de dependência para gerenciamento flexível de serviços
- Prisma ORM para interação com banco de dados
Siga estes passos para configurar a API localmente:
- Node.js (v18.x ou superior)
- PostgreSQL
- npm ou yarn
-
Clone o Repositório
git clone [email protected]:harrisondaniell/hackathon-pda.git cd hotel-api
-
Instale as Dependências
npm install
-
Configure as Variáveis de Ambiente
Crie um arquivo
.env
na raiz do projeto e defina as seguintes variáveis:DATABASE_URL=sua_string_conexao_postgresql JWT_SECRET=seu_segredo_jwt FRONT_URL=http://localhost:3000 NODE_ENV=dev (production, test)
-
Execute as Migrações
npx prisma migrate dev
-
Inicie o Servidor em ambiente de desenvolvimento
npm run dev
O servidor rodará em
http://localhost:3000
por padrão.
Método | Rota | Descrição |
---|---|---|
POST | /user/register |
Registra novo usuário |
POST | /user/login |
Realiza login |
GET | /user/token/refresh |
Atualiza token JWT |
Método | Rota | Descrição |
---|---|---|
GET | /hotels |
Lista todos os hotéis |
GET | /hotels/filter |
Lista hotéis com filtros |
POST | /hotels |
Adiciona novo hotel |
PUT | /hotels/:id |
Atualiza hotel existente |
DELETE | /hotels/:id |
Remove hotel |
Use query parameters para filtrar hotéis:
neighborhood
: Filtra por bairrofavorites
: Boolean para filtrar apenas favoritosname
: Filtra por nome do hotel
Exemplo:
GET /hotels/filter?neighborhood=Centro&favorites=true&name=Luxo
A API está estruturada nas seguintes camadas:
- Controllers: Manipulam requisições e respostas HTTP
- Use Cases: Lógica de negócio e operações
- Repositories: Camada de acesso a dados (usando Prisma ORM)
- Middleware: Gerencia autenticação (JWT), COOKIES e outras tarefas intermediárias
A API utiliza injeção de dependência para desacoplar a lógica e melhorar a testabilidade. Repositories e UseCases são injetados nos controllers:
import { PrismaUsersRepository } from "../repositories/prisma/prisma.users.repository.js";
import { RegisterUseCase } from "../use-cases/register.js";
const prismaUsersRepository = new PrismaUsersRepository();
const registerUseCase = new RegisterUseCase(prismaUsersRepository);
const corsOptions = {
origin: ["http://localhost:3000", process.env.FRONT_URL],
methods: ["GET", "POST", "PUT", "PATCH", "DELETE"],
allowedHeaders: ["Content-Type", "Authorization"],
credentials: true,
};
- Autenticação baseada em JWT para rotas protegidas
- Token armazenado nos cookies protegido por httpOnly
- Dados sensíveis como senhas são hasheados usando bcrypt
- Rate limiting para prevenir ataques de força bruta
- Validação de dados de entrada
- Faça um fork do projeto
- Crie sua branch de feature (
git checkout -b feature/AmazingFeature
) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature'
) - Push para a branch (
git push origin feature/AmazingFeature
) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.