https://github.com/gui-lfm/hotel-api
API for hotel management using ASP.NET Core
https://github.com/gui-lfm/hotel-api
asp-net-core csharp entity-framework-core sql-server
Last synced: 7 months ago
JSON representation
API for hotel management using ASP.NET Core
- Host: GitHub
- URL: https://github.com/gui-lfm/hotel-api
- Owner: Gui-lfm
- Created: 2024-07-19T01:58:34.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-09T01:01:46.000Z (over 1 year ago)
- Last Synced: 2025-04-04T01:15:41.279Z (10 months ago)
- Topics: asp-net-core, csharp, entity-framework-core, sql-server
- Language: C#
- Homepage:
- Size: 74.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🏨 Hotel API
## 🖥 Sobre o projeto
Projeto desenvolvido durante a aceleração C# na Trybe, em Julho de 2024. Trata-se de uma aplicação do tipo WebAPI com a capacidade de realizar operações básicas de um sistema de booking de uma rede de hotéis controlando os hotéis em diversas cidades e os registros de reservas de pessoas clientes. A aplicação possui rotas de autenticação e autorização e realiza conexão com uma api externa para auxiliar na busca de hotéis mais próximos de acordo com o endereço fornecido pelo usuário.
## 🛠 Tecnologias e Libs utilizadas
As seguintes ferramentas foram utilizadas na construção do projeto:
- [ASP.NET Core](https://dotnet.microsoft.com/en-us/apps/aspnet)
- [SQL Server](https://www.microsoft.com/en-us/sql-server/)
- [Entity Framework Core](https://learn.microsoft.com/pt-br/ef/core/)
## ↗️ Endpoints
Obs: Caso opte por fazer o download do projeto, você poderá observar os endpoints com mais detalhe
no link: `https://localhost:5001/swagger/index.html`
### Login
```html
/login
```
- Utiliza o método POST, Realiza o login de usuário existente no banco de dados.
- Caso a requisição seja feita corretamente, retorna um objeto com um token de autorização, com o status http `200`. O token será necessário em outras requisições.
- Caso email e/ou senha estejam incorretos, retorna uma mensagem de erro, com o status hhtp `401`.
- O corpo da requisição deve obedecer o seguinte formato:
```json
{
"email": "string",
"password": "string"
}
```
### City
```html
/city
```
- Utilizando o método GET
- retorna uma lista com as cidades presentes no banco de dados, com o status http `200`em caso de sucesso.
- Utilizando o método POST
- Adiciona uma nova cidade ao banco de dados.
- Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.
- Em caso de sucesso, retorna um objeto com os dados da cidade registrada e com o status http `201`.
- O corpo da requisição deve obedecer o seguinte formato:
```json
{
"name": "string",
"state": "string"
}
```
- Utilizando o método PUT
- Atualiza as informações de uma cidade presente no banco de dados.
- Em caso de sucesso, retorna um objeto com os dados da cidade atualizado.
- Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.
- Caso a aplicação não encontre uma cidade com o id especificado no corpo da requisição, retorna uma mensagem de erro com o status http `404`
### Hotel
```html
/hotel
```
- Utilizando o método GET
- Responsável por listar os hotéis presentes no banco de dados, com um status http `200`.
- Utilizando o método POST
- Adiciona um novo hotel ao banco de dados. Autorização de 'Admin' necessária para a operação.
- Em caso de sucesso, retorna o status http `201` e um objeto com os dados do hotel adicionado ao banco de dados.
- Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.
- Caso o usuário não possua a autorização necessária ou caso a mesma esteja inválida, retorna uma mensagem de erro com o status http `401`.
- Se as entidades referenciadas não forem encontradas, retorna uma mensagem de erro com o status http `404`.
- O corpo da requisição deve obedecer o seguinte formato:
```json
{
"name": "string",
"address": "string",
"cityId": 0
}
```
### Room
```html
/room/:HotelId
```
- Utiliza o método GET, em caso de sucesso retorna um status http `200`, junto de uma lista de quartos do hotel especificado pelo id na url.
- Caso não encontre o hotel especificado no banco de dados, retorna uma mensagem de erro com um status http `404`.
```html
/room
```
- Utiliza o método POST, Adiciona um novo quarto ao banco de dados. Autorização de 'Admin' necessária para a operação.
- Em caso de sucesso, retorna um objeto com os dados do quarto inserido, junto do status http `201`.
- Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.
- Caso o usuário não possua a autorização necessária ou caso a mesma esteja inválida, retorna uma mensagem de erro com o status http `401`.
- Se as entidades referenciadas não forem encontradas, retorna uma mensagem de erro com o status http `404`.
- O corpo da requisição deve obedecer o seguinte formato:
```json
{
"name": "string",
"capacity": 0,
"image": "string",
"hotelId": 0
}
```
```html
/room/:RoomId
```
- Utiliza o método DELETE. Remove um quarto do banco de dados. Autorização de 'Admin' necessária para a operação.
- Caso a operação seja bem sucedida, retorna um status `204`.
- Caso o usuário não possua a autorização necessária ou caso a mesma esteja inválida, retorna uma mensagem de erro com o status http `401`.
- Se não for encontrado um quarto com o id especificado, retorna uma mensagem de erro com um status http `404`.
### User
```html
/user
```
- Utilizando o método GET
- Retorna uma lista com todos os usuários registrados no banco de dados. Autorização de 'Admin' necessária para a operação.
- Em caso de sucesso, retorna um status http `200` com uma lista de usuários presentes no banco de dados.
- Se o usuário não possuir a autorização necessária ou caso a mesma esteja inválida, retorna uma mensagem de erro com um status http `401`.
- Utilizando o método POST
- Adiciona um usuário ao banco de dados. Por padrão todo usuário é registrado com userType 'client'
- Em caso de sucesso, retorna um status http `201` com as informações do usuário criado.
- se o email a ser registrado já existe no banco de dados, retorna uma mensagem de erro com status http `409`.
- O corpo da requisição deve obedecer o seguinte formato:
```json
{
"name": "string",
"email": "string",
"password": "string"
}
```
### Booking
```html
/booking/:BookingId
```
- Utiliza o método GET, endpoint responsável por listar uma única reserva. O usuário que quiser acessar a reserva deve ser o mesmo que a criou.
- Em caso de sucesso, retorna um status http `200` junto de um objeto com os dados da reserva.
- Se o usuário não estiver autenticado ou se as informações da reserva forem acessadas por um usuário que não a criou, retorna uma mensagem de erro com um status http `401`.
```html
/booking
```
- Utiliza o método POST, Adiciona uma nova reserva ao banco de dados. Autorização de 'Client' necessária para a operação.
- Em caso de sucesso, retorna um status http `201` e um objeto com os dados da reserva criada.
- Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.
- Se o usuário não possuir a autorização necessária ou caso a mesma esteja inválida, retorna uma mensagem de erro com o status http `401`.
- Se o quarto referenciado no corpo da requisição não for encontrado, retorna uma mensagem de erro com o status http `404`.
- Se o número de hospedes for maior que a capacidade do quarto, retorna uma mensagem de erro com o status http `409`.
- O corpo da requisição deve obedecer o seguinte formato:
```json
{
"checkIn": "2024-07-22T23:14:00.035Z",
"checkOut": "2024-07-22T23:14:00.035Z",
"guestQuant": 0,
"roomId": 0
}
```
### Geo
```html
/geo/status
```
- Utiliza o método GET, Retorna o status da api externa.
- Em caso de sucesso, a requisição retorna o status http `200` e um objeto com o status da api externa.
- Caso não seja obtida resposta, retorna uma mensagem de erro com o status http `401`.
```html
/geo/address
```
- Utiliza o método GET, Retorna uma lista de hotéis ordenados por distância de um endereço (ordem crescente de distância).
- Em caso de sucesso, a resposta contém a lista de hotéis e o status http `200`.
- O corpo da requisição deve obedecer o seguinte formato:
```json
{
"Address":"string",
"City":"string",
"State":"string"
}
```
## 👾Autor
### ✉contato