Hotel Booking Manager API 🏨

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.

Feito com 👨‍💻:

  • 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

Como rodar o projeto:

  1. Clone o repositório;
  2. Entre no diretório do projeto;
  3. Inicie os containeres: docker-compose up -d --build;
  4. 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.
  5. 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

Como conectar ao banco no Azure Data Studio (ou outro Database Manager que aceite SQL Server):

  • 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.

Tabelas:

drawSQL-hotel-manager-api-export-2024-01-16

  • 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.

Documentação 📑

Status

image

User

GET

image

POST

image

O corpo da requisição deve seguir o formato:

{
	"Name":"Alan Turing",
	"Email": "alan.turing@hotelapi.com",
	"Password": "123456"
}

Login

POST

image

O corpo da requisição deve seguir o formato:

{
	"Email": "alan.turing@hotelapi.com",
	"Password": "123456"
}

Hotel

GET

image

POST (requer role = admin)

image

O corpo da requisição deve seguir o formato:

{
	"Name":"USS Enterprise Hotel",
	"Address":"Avenida Atlântica, 1400",
	"CityId": 2
}

City

GET

image

POST

image

O corpo da requisição deve seguir o formato:

{
	"Name": "São Paulo",
	"State": "SP"
}

PUT

image

O corpo da requisição deve seguir o formato:

{
	"CityId": 1,
	"Name": "São Paulo",
	"State": "SP"
}

Room

GET

image

POST (requer role = admin)

image

O corpo da requisição deve ter o seguinte formato:

{
	"Name":"Suite básica",
	"Capacity":2,
	"Image":"image suite",
	"HotelId": 1
}

DELETE (requer role = admin)

image

Booking

GET

image

POST

image

O corpo da requisição deve ter o seguinte formato:

{
	"CheckIn":"2030-08-27",
	"CheckOut":"2030-08-28",
	"GuestQuant":"1",
	"RoomId":1
}

GEO/STATUS

GET

image

GEO/ADDRESS

GET

image

Rodando os testes:

  1. Para rodar os testes: dotnet test