🚀 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.
Os seguintes pré-requisitos são necessários para executar o projeto:
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.
Para clonar o projeto, basta executar o seguinte comando no terminal:
git clone https://github.com/EduardoKroetz/HotelSistem.git
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.
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
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
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.
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
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 |
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 |
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 |
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 |
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 |
Rota | Descrição |
---|---|
POST /v1/login | Realiza o login de qualquer tipo de usuário |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
Rota | Descrição |
---|---|
POST /v1/verifications/email-code | Envia um código de verificação de email por emai |
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:
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 |
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 |
É 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 |
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 |