Skip to content

API de sistema de hotel usando EF, ASPNET e SQL Server

Notifications You must be signed in to change notification settings

EduardoKroetz/HotelSystem-api

Repository files navigation

API de Sistema de Hotel

MicrosoftSQLServer .Net C#

🚀 Começando 🗺️ Rotas 🔒 Permissões 🔎 Consultas

A API de sistema de hotel facilita a integração e permite realizar operações típicas de hospedagem. Ela permite realizar operações como gestão de reservas, cômodos, funcionários, clientes, relatórios e mais.

🚀 Começando

Pré-requisitos

Os seguintes pré-requisitos são necessários para executar o projeto:

Executando de uma imagem Docker

Baixe a imagem docker executando

docker pull eduardokroetz/aspnet-hotelsystem-api:1.0

Feito isso, apenas execute essa imagem com

docker run -p 8080:8080 eduardokroetz/aspnet-hotelsystem-api:1.0

Isso vai rodar a API em http://localhost:8080/swagger/index.html

Obs: Executar a API através do Docker é muito mais fácil, mas ainda requer que você configure o appsettings.json com as variáveis de ambiente.

Cloning

Para clonar o projeto, basta executar o seguinte comando no terminal:

git clone https://github.com/EduardoKroetz/HotelSistem.git

Executar o Projeto com SQL Server Dockerizado

Certifique-se de ter o Docker instalado em seu sistema. Caso ainda não tenha, você pode baixá-lo e instalá-lo a partir do site oficial do Docker.

Baixando a Imagem do SQL Server:

Abra um terminal e execute o seguinte comando para baixar a imagem do SQL Server do Docker Hub:
docker pull mcr.microsoft.com/mssql/server:2022-latest

Executando o Container do SQL Server:

Para iniciar um container Docker com o SQL Server, utilize o seguinte comando, substituindo pela senha desejada para o usuário SA_PASSWORD:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<sua_senha>" \
-p 1433:1433 --name sqlserver_instance \
-d mcr.microsoft.com/mssql/server:2022-latest

Na pasta "Hotel.Domain", atualize o banco de dados executando:

dotnet ef database update

Variáveis de ambiente

Adicione essas variáveis de ambiente em um arquivo appsettings.json na pasta Hotel.Domain:

{
  "EmailToSendEmail":"seu_email_para_enviar_emails",
  "PasswordToSendEmail":"sua_senha_para_enviar_emails",
  "JwtKey":"addakaDfAyrtcvnncvAEreaxxvrtkkadAeretGAc",
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost,1433;Database=HotelSystem;User ID=sa;Password=<sua_senha>;TrustServerCertificate=true"
  },
  "Stripe":  {
    "SecretKey":"sua_chave_secreta_do_stripe",
    "PublishableKey":"sua_chave_pública_do_stripe"
  }
}

Observação: As chaves do Stripe são necessárias para a integração com o sistema de pagamento Stripe. Caso ainda não tenha uma conta no Stripe, você pode criar uma conta de teste aqui.

Starting

Para iniciar o projeto, execute os seguintes comandos:

cd HotelSistem/Hotel.Domain
dotnet run

Por padrão, a aplicação será executada em http://localhost:5000/. Você pode acessar a interface gráfica da API em http://localhost:5000/swagger/index.html

📍 API Endpoints

Admin

Rota Descrição
GET /v1/admins Recupera uma lista de administradores
DELETE /v1/admins Exclui o administrador autenticado
PUT /v1/admins Atualiza os detalhes do administrador autenticado
GET /v1/admins/{Id} Recupera os detalhes de um administrador pelo ID
PUT /v1/admins/{Id} Atualiza os detalhes de um administrador pelo ID
DELETE /v1/admins/{Id} Exclui um administrador pelo ID
POST /v1/admins/{adminId}/permissions/{permissionId} Adiciona uma permissão a um administrador pelo ID
DELETE /v1/admins/{adminId}/permissions/{permissionId} Remove uma permissão de um administrador pelo ID
POST /v1/admins/to-root-admin/{toRootAdminId} Promove um administrador a root pelo ID
PATCH /v1/admins/name Atualiza o nome do administrador autenticado
PATCH /v1/admins/email Atualiza o email do administrador autenticado
PATCH /v1/admins/phone Atualiza o telefone do administrador autenticado
PATCH /v1/admins/address Atualiza o endereço do administrador autenticado
PATCH /v1/admins/gender Atualiza o gênero do administrador autenticado
PATCH /v1/admins/date-of-birth Atualiza a data de nascimento do administrador autenticado

Customer

Rota Descrição
GET /v1/customers Recupera uma lista de clientes
PUT /v1/customers Atualiza os detalhes do cliente autenticado
DELETE /v1/customers Exclui o cliente autenticado
GET /v1/customers/{Id} Recupera os detalhes de um cliente pelo ID
PUT /v1/customers/{Id} Atualiza os detalhes de um cliente pelo ID
DELETE /v1/customers/{Id} Exclui um cliente pelo ID
PATCH /v1/customers/name Atualiza o nome do cliente autenticado
PATCH /v1/customers/email Atualiza o email do cliente autenticado
PATCH /v1/customers/phone Atualiza o telefone do cliente autenticado
PATCH /v1/customers/address Atualiza o endereço do cliente autenticado
PATCH /v1/customers/gender Atualiza o gênero de um cliente pelo ID
PATCH /v1/customers/date-of-birth Atualiza a data de nascimento do cliente autenticado

Employee

Rota Descrição
GET /v1/employees Recupera uma lista de funcionários
DELETE /v1/employees Exclui o funcionário autenticado
PUT /v1/employees Atualiza os detalhes do funcionário autenticado
GET /v1/employees/{id} Recupera os detalhes de um funcionário pelo ID
PUT /v1/employees/{id} Atualiza os detalhes de um funcionário pelo ID
DELETE /v1/employees/{id} Exclui um funcionário pelo ID
POST /v1/employees/{id}/responsibilities/{resId} Adiciona uma responsabilidade a um funcionário pelo ID
DELETE /v1/employees/{id}/responsibilities/{resId} Remove uma responsabilidade de um funcionário pelo ID
POST /v1/employees/{employeeId}/permissions/{permissionId} Adiciona uma permissão a um funcionário pelo ID
DELETE /v1/employees/{employeeId}/permissions/{permissionId} Remove uma permissão de um funcionário pelo ID
PATCH /v1/employees/name Atualiza o nome do funcionário autenticado
PATCH /v1/employees/email Atualiza o email do funcionário autenticado
PATCH /v1/employees/phone Atualiza o telefone do funcionário autenticado
PATCH /v1/employees/address Atualiza o endereço do funcionário autenticado
PATCH /v1/employees/gender Atualiza o gênero de um funcionário pelo ID
PATCH /v1/employees/date-of-birth Atualiza a data de nascimento do funcionário autenticado

Feedback

Rota Descrição
GET /v1/feedbacks Recupera uma lista de feedbacks
POST /v1/feedbacks Cria um novo feedback
GET /v1/feedbacks/{Id} Recupera os detalhes de um feedback pelo ID
PUT /v1/feedbacks/{Id} Atualiza os detalhes de um feedback pelo ID
DELETE /v1/feedbacks/{Id} Exclui um feedback pelo ID
PATCH /v1/feedbacks/{Id}/rate/{rate} Atualiza a avaliação de um feedback pelo ID
PATCH /v1/feedbacks/{Id}/comment Atualiza o comentário de um feedback pelo ID
PATCH /v1/feedbacks/add-like/{feedbackId} Adiciona um like a um feedback pelo ID
PATCH /v1/feedbacks/remove-like/{feedbackId} Remove um like de um feedback pelo ID
PATCH /v1/feedbacks/add-dislike/{feedbackId} Adiciona um dislike a um feedback pelo ID
PATCH /v1/feedbacks/remove-dislike/{feedbackId} Remove um dislike de um feedback pelo ID

Invoice

Rota Descrição
GET /v1/invoices Recupera uma lista de faturas
GET /v1/invoices/my Recupera as faturas do usuário autenticado
GET /v1/invoices/{Id} Recupera os detalhes de uma fatura pelo ID
DELETE /v1/invoices/{Id} Exclui uma fatura pelo ID

Login

Rota Descrição
POST /v1/login Realiza o login de qualquer tipo de usuário

Permission

Rota Descrição
GET /v1/permissions Recupera uma lista de permissões
GET /v1/permissions/{Id} Recupera os detalhes de uma permissão pelo ID

Register

Rota Descrição
POST /v1/register/customers Registra um novo cliente
POST /v1/register/admins Registra um novo administrador
POST /v1/register/employees Registra um novo funcionário

Report

Rota Descrição
GET /v1/reports Recupera uma lista de relatórios
POST /v1/reports Cria um novo relatório
GET /v1/reports/{Id} Recupera os detalhes de um relatório pelo ID
PUT /v1/reports/{Id} Atualiza os detalhes de um relatório pelo ID
DELETE /v1/reports/my/{Id} Exclui um relatório do usuário atual pelo ID
PATCH /v1/reports/finish/{Id} Finaliza um relatório pelo ID
PATCH /v1/reports/cancel/{Id} Cancela um relatório pelo ID
PATCH /v1/reports/priority/{id} Atualiza a prioridade de um relatório pelo ID

Reservation

Rota Descrição
GET /v1/reservations Recupera uma lista de reservas
GET /v1/reservations/{Id} Recupera os detalhes de uma reserva pelo ID
POST /v1/reservations Cria uma nova reserva
DELETE /v1/reservations/{Id} Exclui uma reserva pelo ID
PATCH /v1/reservations/expected-check-out/{Id} Atualiza o check-out esperado de uma reserva pelo ID
PATCH /v1/reservations/expected-check-in/{Id} Atualiza o check-in esperado de uma reserva pelo ID
POST /v1/reservations/{Id}/services/{serviceId} Adiciona um serviço a uma reserva pelo ID
DELETE /v1/reservations/{Id}/services/{serviceId} Remove um serviço de uma reserva pelo ID
POST /v1/reservations/check-in/{Id} Faz o check-in de uma reserva pelo ID
POST /v1/reservations/finish/{Id} Finaliza uma reserva pelo ID
POST /v1/reservations/cancel/{Id} Cancela uma reserva pelo ID
GET /v1/reservations/total-amount Simula o preço total de uma reserva

Responsibility

Rota Descrição
GET /v1/responsibilities Recupera uma lista de responsabilidades
POST /v1/responsibilities Cria uma nova responsabilidade
GET /v1/responsibilities/{Id} Recupera os detalhes de uma responsabilidade pelo ID
PUT /v1/responsibilities/{Id} Atualiza os detalhes de uma responsabilidade pelo ID
DELETE /v1/responsibilities/{Id} Exclui uma responsabilidade pelo ID

Room

Rota Descrição
GET /v1/rooms Recupera uma lista de quartos
GET /v1/rooms/{Id} Recupera os detalhes de um quarto pelo ID
PUT /v1/rooms/{Id} Atualiza os detalhes de um quarto pelo ID
POST /v1/rooms Cria um novo quarto
DELETE /v1/rooms/{Id} Exclui um quarto pelo ID
POST /v1/rooms/{Id}/services/{serviceId} Adiciona um serviço a um quarto pelo ID
DELETE /v1/rooms/{Id}/services/{serviceId} Remove um serviço de um quarto pelo ID
PATCH /v1/rooms/number/{Id} Atualiza o número de um quarto pelo ID
PATCH /v1/rooms/name/{Id} Atualiza o nome de um quarto pelo ID
PATCH /v1/rooms/capacity/{Id} Atualiza a capacidade de um quarto pelo ID
PATCH /v1/rooms/category/{Id} Atualiza a categoria de um quarto pelo ID
PATCH /v1/rooms/price/{Id} Atualiza o preço de um quarto pelo ID
PATCH /v1/rooms/enable/{Id} Ativa um quarto pelo ID
PATCH /v1/rooms/disable/{Id} Desativa um quarto pelo ID
PATCH /v1/rooms/available/{Id} Atualiza o status de 'fora de serviço' para 'disponível' de um quarto pelo ID

Service

Rota Descrição
GET /v1/services Recupera uma lista de serviços
POST /v1/services Cria um novo serviço
GET /v1/services/{Id} Recupera os detalhes de um serviço pelo ID
PUT /v1/services/{Id} Atualiza os detalhes de um serviço pelo ID
DELETE /v1/services/{Id} Exclui um serviço pelo ID
POST /v1/services/{Id}/responsibilities/{responsibilityId} Adiciona uma responsabilidade a um serviço pelo ID
DELETE /v1/services/{Id}/responsibilities/{responsibilityId} Remove uma responsabilidade de um serviço pelo ID

Verification

Rota Descrição
POST /v1/verifications/email-code Envia um código de verificação de email por emai

🔒 Permissões

A API permite que funcionários e administradores (por padrão) gerenciem permissões tanto de administradores quanto de funcionários, bloqueando ou liberando acesso a diversas funcionalidades. Isso pode ser feito através dos seguintes endpoints:

Administradores

Rota Descrição
POST /v1/admins/{adminId}/permissions/{permissionId} Adiciona uma permissão a um administrador pelo ID
DELETE /v1/admins/{adminId}/permissions/{permissionId} Remove uma permissão de um administrador pelo ID

Funcionários

Rota Descrição
POST /v1/employees/{employeeId}/permissions/{permissionId} Adiciona uma permissão a um funcionário pelo ID
DELETE /v1/employees/{employeeId}/permissions/{permissionId} Remove uma permissão de um funcionário pelo ID

🔎 Consultas

É possível fazer filtragem de dados em todas as tabelas do banco de dados através do método GET em endpoints como "v1/admins", "v1/reservations", "v1/rooms" somente incluindo o campo que você quer filtrar na Query. Exemplo:

Rota Retorno
POST /v1/reservations?skip=0&take=25&roomId=739a6c2e-5957-467e-808a-c508f49629a8 Busca todas as reservas associadas a um determinado cômodo
POST /v1/rooms?skip=0&take=5&categoryId=739a6c2e-5957-467e-808a-c508f49629a8 Busca todos os cômodos associados a uma determinada categoria

Para campos númericos ou de data, é necessário incluir um operador para filtrar os dados. Os seguintes operadores disponíveis são:

"lt" = menor que

"eq" = igual que

"gt" = maior que

Isso permite que você filtre dados conforme precisar de uma maneira flexível. Exemplo:

Rota Retorno
POST /v1/reservations?skip=0&take=25&createdAt=2024-07-03T00:00:00&createdAtOperator=gt Busca todas as reservas com a criação maior que o dia 03/07/2024

Campos disponíveis para consulta

Rota Campos disponíveis
GET /v1/admins skip, take, name, email, phone, gender, dateOfBirth, dateOfBirthOperator, createdAt, createdAtOperator, isRootAdmin, permissionId
GET /v1/categories skip, take, name, averagePrice, averagePriceOperator, roomId
GET /v1/customers skip, take, name, email, phone, gender, dateOfBirth, dateOfBirthOperator, createdAt, createdAtOperator
GET /v1/employees skip, take, name, email, phone, gender, dateOfBirth, dateOfBirthOperator, createdAt, createdAtOperator, salary, salaryOperator
GET /v1/feedbacks skip, take, createdAt, createdAtOperator, comment, rate, rateOperator, likes, likesOperator, dislikes, dislikesOperator, updatedAt, updatedAtOperator, customerId, reservationId, roomId
GET /v1/invoices skip, take, paymentMethod, totalAmount, totalAmountOperator, customerId, reservationId, serviceId
GET /v1/permissions skip, take, createdAt, createdAtOperator, name, isActive, adminId
GET /v1/reports skip, take, summary, status, priority, employeeId, createdAt, createdAtOperator
GET /v1/reservations skip, take, timeHosted, timeHostedOperator, dailyRate, dailyRateOperator, checkIn, checkInOperator, checkOut, checkOutOperator, status, capacity, capacityOperator, roomId, customerId, invoiceId, serviceId, createdAt, createdAtOperator, expectedCheckIn, expectedCheckInOperator, expectedCheckOut, expectedCheckOutOperator, expectedTimeHosted, expectedTimeHostedOperator
GET /v1/responsibilities skip, take, name, priority, employeeId, serviceId, createdAt, createdAtOperator
GET /v1/rooms skip, take, name, number, numberOperator, price, priceOperator, status, capacity, capacityOperator, serviceId, categoryId, createdAt, createdAtOperator
GET /v1/services skip, take, name, price, priceOperator, priority, isActive, timeInMinutes, timeInMinutesOperator, responsibilityId, reservationId, invoiceId, roomId, createdAt, createdAtOperator

About

API de sistema de hotel usando EF, ASPNET e SQL Server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages