Software de booking de várias redes de hotéis no formato de uma RESTful API com operações de CRUD, autenticação, autorização e cálculo de distância dos hotéis.
O projeto foi feito utilizando C#, ASP.NET Core, .NET 6.0, SQL Server, Entity Framework Core (ORM) para gerenciamento do banco de dados e dockerizado para fácil execução em qualquer máquina.
A autenticação e autorização foi feita com JWT. Os testes estão sendo desenvolvidos usando xUnit.
- C#
- .NET 6.0
- ASP.NET Core
- Entity Framework Core
- SQL Server
- Docker
- JWT
- Testes de integração com xUnit (em desenvolvimento)
- Arquitetura em Camadas
- Clone o repositório;
- Entre no diretório do projeto;
- Inicie os containeres:
docker-compose up -d --build
; - Pronto! Toda a aplicação está configurada em um docker de maneira que, ao rodar o comando acima, o Docker: cria um container para o banco de dados, um container para a api (baseada no build da imagem do Dockerfile em src/HotelManagerAPI/), executa as migrations do banco de dados e popula ela usando os Seeders.
- Extra: você pode usar o comando
docker ps
no terminal para verificar se ambos os containeres estão rodando.
A aplicação roda por padrão na porta 8080. Portanto certifique-se de que essa porta está livre no seu computador.
Para fazer requisições à API (usando Postman, Thunder Client ou qualquer serviço semelhante), use o endereço: http://localhost:8080
- Server: localhost
- user: sa
- password: HotelManager01!
Com isso você pode rodar comandos SQL e visualizar o funcionamento do banco de dados de maneira mais clara.
- Cities: armazena um conjunto de cidades nas quais os hotéis estão localizados. Uma cidade pode ter vários hotéis.
- Hotels: armazena os hotéis da aplicação. Um hotel pode ter vários quartos.
- Rooms: armazena os quartos de cada hotel. Um quarto pode ter várias reservas.
- Users: armazena as pessoas usuárias do sistema. Um usuário pode ter várias reservas.
- Bookings: armazena as reservas dos quartos de hotéis.
O corpo da requisição deve seguir o formato:
{
"Name":"Alan Turing",
"Email": "alan.turing@hotelapi.com",
"Password": "123456"
}
O corpo da requisição deve seguir o formato:
{
"Email": "alan.turing@hotelapi.com",
"Password": "123456"
}
O corpo da requisição deve seguir o formato:
{
"Name":"USS Enterprise Hotel",
"Address":"Avenida Atlântica, 1400",
"CityId": 2
}
O corpo da requisição deve seguir o formato:
{
"Name": "São Paulo",
"State": "SP"
}
O corpo da requisição deve seguir o formato:
{
"CityId": 1,
"Name": "São Paulo",
"State": "SP"
}
O corpo da requisição deve ter o seguinte formato:
{
"Name":"Suite básica",
"Capacity":2,
"Image":"image suite",
"HotelId": 1
}
O corpo da requisição deve ter o seguinte formato:
{
"CheckIn":"2030-08-27",
"CheckOut":"2030-08-28",
"GuestQuant":"1",
"RoomId":1
}
- Para rodar os testes:
dotnet test