{"id":15002448,"url":"https://github.com/gui-lfm/hotel-api","last_synced_at":"2026-02-23T23:34:07.813Z","repository":{"id":249296812,"uuid":"830783933","full_name":"Gui-lfm/hotel-api","owner":"Gui-lfm","description":"API for hotel management using ASP.NET Core","archived":false,"fork":false,"pushed_at":"2024-08-09T01:01:46.000Z","size":76,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T01:15:41.279Z","etag":null,"topics":["asp-net-core","csharp","entity-framework-core","sql-server"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Gui-lfm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-19T01:58:34.000Z","updated_at":"2024-08-09T01:01:49.000Z","dependencies_parsed_at":"2024-08-09T02:26:20.774Z","dependency_job_id":"00a2e93f-6ec1-4494-a7e2-dfa314892ab5","html_url":"https://github.com/Gui-lfm/hotel-api","commit_stats":null,"previous_names":["gui-lfm/hotel-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-lfm%2Fhotel-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-lfm%2Fhotel-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-lfm%2Fhotel-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gui-lfm%2Fhotel-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gui-lfm","download_url":"https://codeload.github.com/Gui-lfm/hotel-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247103305,"owners_count":20884023,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asp-net-core","csharp","entity-framework-core","sql-server"],"created_at":"2024-09-24T18:50:21.311Z","updated_at":"2026-02-23T23:34:07.767Z","avatar_url":"https://github.com/Gui-lfm.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏨 Hotel API\n\n## 🖥 Sobre o projeto\n\nProjeto 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.\n\n## 🛠 Tecnologias e Libs utilizadas\n\nAs seguintes ferramentas foram utilizadas na construção do projeto:\n\n- [ASP.NET Core](https://dotnet.microsoft.com/en-us/apps/aspnet)\n- [SQL Server](https://www.microsoft.com/en-us/sql-server/)\n- [Entity Framework Core](https://learn.microsoft.com/pt-br/ef/core/)\n\n## ↗️ Endpoints\n\nObs: Caso opte por fazer o download do projeto, você poderá observar os endpoints com mais detalhe\nno link: `https://localhost:5001/swagger/index.html`\n\n### Login\n\n```html\n  /login\n```\n\n- Utiliza o método POST, Realiza o login de usuário existente no banco de dados.\n- 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.\n- Caso email e/ou senha estejam incorretos, retorna uma mensagem de erro, com o status hhtp `401`.\n- O corpo da requisição deve obedecer o seguinte formato:\n\n```json\n  {\n    \"email\": \"string\",\n    \"password\": \"string\"\n  }\n```\n\n### City\n\n```html\n/city\n```\n\n- Utilizando o método GET\n  - retorna uma lista com as cidades presentes no banco de dados, com o status http `200`em caso de sucesso.\n\n- Utilizando o método POST\n  - Adiciona uma nova cidade ao banco de dados.\n  - Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.\n  - Em caso de sucesso, retorna um objeto com os dados da cidade registrada e com o status http `201`.\n  - O corpo da requisição deve obedecer o seguinte formato:\n\n  ```json\n    {\n    \"name\": \"string\",\n    \"state\": \"string\"\n    }\n  ```\n\n- Utilizando o método PUT\n  - Atualiza as informações de uma cidade presente no banco de dados.\n  - Em caso de sucesso, retorna um objeto com os dados da cidade atualizado.\n  - Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.\n  - 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`\n\n### Hotel\n\n```html\n/hotel\n```\n\n- Utilizando o método GET\n  - Responsável por listar os hotéis presentes no banco de dados, com um status http `200`.\n\n- Utilizando o método POST\n  - Adiciona um novo hotel ao banco de dados. Autorização de 'Admin' necessária para a operação.\n  - Em caso de sucesso, retorna o status http `201` e um objeto com os dados do hotel adicionado ao banco de dados.\n  - Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.\n  - 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`.\n  - Se as entidades referenciadas não forem encontradas, retorna uma mensagem de erro com o status http `404`.\n  - O corpo da requisição deve obedecer o seguinte formato:\n\n  ```json\n    {\n      \"name\": \"string\",\n      \"address\": \"string\",\n      \"cityId\": 0\n    }\n  ```\n\n### Room\n\n```html\n  /room/:HotelId\n```\n\n- 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.\n- Caso não encontre o hotel especificado no banco de dados, retorna uma mensagem de erro com um status http `404`.\n\n```html\n  /room\n```\n\n- Utiliza o método POST, Adiciona um novo quarto ao banco de dados. Autorização de 'Admin' necessária para a operação.\n- Em caso de sucesso, retorna um objeto com os dados do quarto inserido, junto do status http `201`.\n- Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.\n- 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`.\n- Se as entidades referenciadas não forem encontradas, retorna uma mensagem de erro com o status http `404`.\n- O corpo da requisição deve obedecer o seguinte formato:\n\n```json\n  {\n    \"name\": \"string\",\n    \"capacity\": 0,\n    \"image\": \"string\",\n    \"hotelId\": 0\n  }\n```\n\n```html\n  /room/:RoomId\n```\n\n- Utiliza o método DELETE. Remove um quarto do banco de dados. Autorização de 'Admin' necessária para a operação.\n- Caso a operação seja bem sucedida, retorna um status `204`.\n- 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`.\n- Se não for encontrado um quarto com o id especificado, retorna uma mensagem de erro com um status http `404`.\n\n### User\n\n```html\n  /user\n```\n\n- Utilizando o método GET\n  - Retorna uma lista com todos os usuários registrados no banco de dados. Autorização de 'Admin' necessária para a operação.\n  - Em caso de sucesso, retorna um status http `200` com uma lista de usuários presentes no banco de dados.\n  - 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`.\n\n- Utilizando o método POST\n  - Adiciona um usuário ao banco de dados. Por padrão todo usuário é registrado com userType 'client'\n  - Em caso de sucesso, retorna um status http `201` com as informações do usuário criado.\n  - se o email a ser registrado já existe no banco de dados, retorna uma mensagem de erro com status http `409`.\n  - O corpo da requisição deve obedecer o seguinte formato:\n  \n  ```json\n  {\n    \"name\": \"string\",\n    \"email\": \"string\",\n    \"password\": \"string\"\n  }\n  ```\n\n### Booking\n\n```html\n/booking/:BookingId\n```\n\n- 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.\n- Em caso de sucesso, retorna um status http `200` junto de um objeto com os dados da reserva.\n- 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`.\n\n```html\n/booking\n```\n\n- Utiliza o método POST, Adiciona uma nova reserva ao banco de dados. Autorização de 'Client' necessária para a operação.\n- Em caso de sucesso, retorna um status http `201` e um objeto com os dados da reserva criada.\n- Caso o corpo da requisição esteja inválido, retorna uma mensagem de erro com o status http `400`.\n- 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`.\n- Se o quarto referenciado no corpo da requisição não for encontrado, retorna uma mensagem de erro com o status http `404`.\n- Se o número de hospedes for maior que a capacidade do quarto, retorna uma mensagem de erro com o status http `409`.\n- O corpo da requisição deve obedecer o seguinte formato:\n\n```json\n  {\n    \"checkIn\": \"2024-07-22T23:14:00.035Z\",\n    \"checkOut\": \"2024-07-22T23:14:00.035Z\",\n    \"guestQuant\": 0,\n    \"roomId\": 0\n  }\n```\n\n### Geo\n\n```html\n  /geo/status\n```\n\n- Utiliza o método GET, Retorna o status da api externa.\n- Em caso de sucesso, a requisição retorna o status http `200` e um objeto com o status da api externa.\n- Caso não seja obtida resposta, retorna uma mensagem de erro com o status http `401`.\n\n```html\n  /geo/address\n```\n\n- Utiliza o método GET, Retorna uma lista de hotéis ordenados por distância de um endereço (ordem crescente de distância).\n- Em caso de sucesso, a resposta contém a lista de hotéis e o status http `200`.\n- O corpo da requisição deve obedecer o seguinte formato:\n\n```json\n  {\n    \"Address\":\"string\",\n    \"City\":\"string\",\n    \"State\":\"string\"\n  }\n```\n\n## 👾Autor\n\n \u003ca href=\"https://github.com/Gui-lfm\"\u003e\n \u003cimg style=\"border-radius: 50%;\" src=\"https://avatars.githubusercontent.com/u/72154970?v=4\" width=\"100px;\" alt=\"\"/\u003e\n \u003cbr /\u003e\n \u003csub\u003e\u003cb\u003eGuilherme Lucena\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\n\n### ✉contato\n\n\u003cdiv\u003e\n  \u003ca href=\"mailto:guilherme.lucena17@gmail.com\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Gmail-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white\" target=\"_blank\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.linkedin.com/in/gui-lucena/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\" target=\"_blank\"/\u003e\u003c/a\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgui-lfm%2Fhotel-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgui-lfm%2Fhotel-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgui-lfm%2Fhotel-api/lists"}