Este repositório é a resolução de um teste técnico. Todos os detalhes sobre o teste estão na imagem a seguir:
Nem todos os requisitos foram cumpridos ou implementados, sendo o principal motivo que eu usei o teste para reforçar habilidades que são meus pontos fracos, principalmente arquitetura de software, design patterns e DDD (Domain-Driven Design). Logo, todo o projeto foi pensado nisso, por isso o que mais você encontrará aqui serão padrões de projetos, entidades e interfaces.
Caso esteja estudando qualquer um desses assuntos, fique à vontade para explorar o código.
Atenciosamente,
- Prisma: ORM para Node.js e TypeScript
- PostgreSQL: Banco de dados relacional
- Node.js: Ambiente de execução JavaScript no servidor
- TypeScript: Superset do JavaScript que adiciona tipagem estática
- Express: Framework para Node.js para construir APIs
-
Clone o repositório:
git clone https://github.com/alissonFabricio04/hotels.git
-
Navegue até o diretório do projeto:
cd hotels
-
Instale as dependências:
npm ci --silent
-
Configure as variáveis de ambiente criando um arquivo
.env
baseado no.env.example
:cp .env.example .env
-
Configure o banco de dados com Prisma:
npx prisma migrate dev
-
Inicie o servidor em modo de desenvolvimento:
npm run dev
-
Acesse a aplicação em
http://localhost
├── prisma
│ └── schema.prisma
├── src
│ ├── app
│ │ ├── queue
│ │ │ └── NotificationQueue.ts
│ │ ├── repositories
│ │ │ ├── HotelRepository.ts
│ │ │ ├── ReserveRepository.ts
│ │ │ └── RoomRepository.ts
│ │ └── use-casess
│ │ │ ├── CompareHotelsByLocation.ts
│ │ │ ├── CompareHotelsByPrice.ts
│ │ │ ├── CreateReserve.ts
│ │ │ ├── GetHotelsByCapacity.ts
│ │ │ ├── GetHotelsByDestination.ts
│ │ │ └── GetHotelsByPeriod.ts
│ ├── domain
│ │ ├── Double
│ │ │ └── index.ts
│ │ ├── Email
│ │ │ ├── Email.test.ts
│ │ │ └── index.ts
│ │ ├── Hotel
│ │ │ └── index.ts
│ │ ├── Id
│ │ │ └── index.ts
│ │ ├── Int
│ │ │ └── index.ts
│ │ ├── Location
│ │ │ └── index.ts
│ │ ├── PaymentMethod
│ │ │ └── index.ts
│ │ ├── Period
│ │ │ └── index.ts
│ │ ├── Reserve
│ │ │ └── index.ts
│ │ ├── Room
│ │ │ └── index.ts
│ │ └── RoomStatus
│ │ └── index.ts
│ ├── errors
│ │ ├── InternalServerError.ts
│ │ ├── NotFound.ts
│ │ ├── NotImplemented.ts
│ │ ├── StrategyErrors.ts
│ │ └── UnprocessableEntity.ts
│ ├── infra
│ │ ├── api
│ │ │ └── index.ts
│ │ ├── config
│ │ │ └── env.ts
│ │ ├── controllers
│ │ │ ├── CompareHotelsByLocationController.ts
│ │ │ ├── CompareHotelsByPriceController.ts
│ │ │ ├── CreateReserveController.ts
│ │ │ ├── GetHotelsByCapacityController.ts
│ │ │ ├── GetHotelsByDestinationController.ts
│ │ │ └── GetHotelsByPeriodController.ts
│ │ ├── database
│ │ │ └── DatabaseConnection.ts
│ │ ├── queue
│ │ │ └── NotificationQueueImpl.ts
│ │ ├── repositories
│ │ │ ├── HotelRepositoryImpl.ts
│ │ │ ├── ReserveRepositoryImpl.ts
│ │ │ └── RoomRepositoryImpl.ts
│ │ └── tests
│ │ ├── CreateReserveAPI.test.ts
│ │ └── GetHotelsAPI.test.ts
│ └── utils
│ ├── seedDatabase.ts
│ └── GenRandomCheckInAndOut.ts
├── .env.example
├── .gitignore
├── package-lock.json
├── package.json
├── README.md
├── requisitos.jpeg
└── tsconfig.json