Skip to content

GustavoTorres94/hotel-management

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

🚧 README em construção ! 🚧

Hotel Management 🏨

Badge em Desenvolvimento

Descrição

Uma aplicação back-end desenvolvida com ASP.NET e linguagem C#. Se trata de uma administração de reservas de quartos. Um CRUD que envolve os principais aspectos de uma administração hotoleira.
A aplicação possui JWT(Jason Web Token) para verificar as questões de autorização. SQL Server Dockerizado e foi desenvolvida com o Entity Framework.
Os diretórios foram divididos em:
Controller: Onde está a lógica da aplicação.
Models: Representação do banco de Dados.
Repository: Lógicas de interação como banco de dados.
DTO: Entradas/Saídas das lógicas.

Índice

Como Usar

  1. Clone este repositório.
        git clone git@github.com:GustavoTorres94/hotel-management.git
    
  2. Entre no diretório criado.
  3. Entre no diretório src/Trybehotel e execute o comando para instalar as dependências do projeto.
    dotnet restore
    
  4. Na Raiz do projeto utilize o seguinte scrypt para "subir" os containers do Docker.
    docker compose up -d --build
    
  5. configure a string de conexção para acessar o banco de dados, caso não esteja configurada:
    var connectionString = "Server=localhost;Database=TrybeHotel;User=SA;Password=TrybeHotel12!;TrustServerCertificate=True";      
    
  6. Utilize a CLI para executar as migrations do Entity FrameWork
    dotnet ef database update
    
  7. Execute o CLI para rodar a aplicação.Utlize um software de auxílio (insomnia ou semelhante) ou uma extensão do vscode (thunderclient ou semelhante) para realizar as requisições para os endpoints. Com o projeto clonado podes fazer requisições para a rota
      dotnet run
    

Funcionalidades

Endpoints:
/booking - { post }
/booking/:bookingId - { get }
/city - { get, post, put }
/geo/status - { get }
/geo/address - { get }
/hotel - { get, post }
/login - { post }
/room - { post }
/room/:id { get, delete }
/user { get, post }

/booking

Este endpoint contém serviços para lidar com operações relacionadas a reserva, A autenticação é feita utilizando JWT (JSON Web Tokens). Os usuários precisam estar autenticados para acessar os endpoints de reservas e devem possuir a política "Client".

Funcionalidades Principais

  1. POST|GET /booking
    • Adiciona uma nova reserva.
    • Autorização: Necessário token JWT com política "Client".
    • POST - Corpo da requisição:
        {
          "RoomId": 1,
          "GuestQuant": 2,
          "CheckIn": "2023-06-01",
          "CheckOut": "2023-06-05"
        }
      
    • Possíveis respostas:
      • 201 Created: Reserva criada com sucesso. POST
      • 400 Bad Request: Erro de validação ou sala não encontrada. POST
      • 200 OK: Detalhes da reserva retornados com sucesso. GET
      • 400 Bad Request: Erro ao buscar a reserva. GET

/city

Este endpoint contém as responsabilidades de tratar com as questões que envolvem as cidades, Como encontrar todas as cidades cadastradas e adicionar uma nova cidade.

  1. GET /city
    • Retorna a lista de todas as cidades.
    • Resposta:
      • 200 OK: Lista de cidades.
      • Exemplo de resposta:
              [
                {
                  "CityId": 1,
                  "Name": "São Paulo",
                  "State": "SP"
                },
                {
                  "CityId": 2,
                  "Name": "Rio de Janeiro",
                  "State": "RJ"
                }
              ]
        
  2. POST /city
    • Adiciona uma nova cidade.
    • Corpo da requisição:
          {
            "Name": "Belo Horizonte",
            "State": "MG"
          }
      
    • Possíveis respostas:
      • 201 Created: Cidade criada com sucesso.
      • Exemplo de resposta:
            {
              "CityId": 3,
              "Name": "Belo Horizonte",
              "State": "MG"
            }
        
  3. PUT /city
    • Atualiza uma cidade existente.
    • Corpo da requisição:
          {
            "CityId": 3,
            "Name": "BH",
            "State": "MG"
          }
      
    • Possíveis respostas:
      • 200 OK: Cidade atualizada com sucesso.
      • 400 Bad Request: Cidade não encontrada.
      • Exemplo de resposta:
            {
              "CityId": 3,
              "Name": "BH",
              "State": "MG"
            }
        

/geo

Este endpoint é responsável por lidar das questões de localização do usuário. Ele faz utilização de uma API externa que trás as localizações.

  1. GET /geo/status
    • Ela verifica se o usuário correspondente ao ID decodificado do token existe no banco de dados e retorna o papel associado a esse usuário.
    • Retorna o status do serviço de geolocalização (Nominatim).
    • Resposta:
      • 200 OK: Status do serviço.
      • Exemplo de resposta:
              {
                "status": "OK",
                "message": "Service is running"
              }
        
    • GET /geo/address
      • Retorna a lista de hotéis baseados na localização fornecida.
      • Corpo da requisição:
              {
                "Address": "Rua Exemplo",
                "City": "Cidade Exemplo",
                "State": "Estado Exemplo"
              }
        
      • Possíveis respostas:
        • 200 OK: Lista de hotéis próximos à localização fornecida.
        • 400 Bad Request: Erro ao buscar a localização ou hotéis.
        • Exemplo de resposta:
                  [
                    {
                      "HotelId": 1,
                      "Name": "Hotel Exemplo",
                      "Address": "Rua Exemplo",
                      "CityName": "Cidade Exemplo",
                      "State": "Estado Exemplo",
                      "Distance": 5
                    },
                    {
                      "HotelId": 2,
                      "Name": "Hotel Exemplo 2",
                      "Address": "Rua Exemplo 2",
                      "CityName": "Cidade Exemplo",
                      "State": "Estado Exemplo",
                      "Distance": 10
                    }
                  ]
          

/hotel

Este endpoint é responsável pelas requisições relacionadas aos hotéis. A autenticação é feita através do JWT, algumas das funcionalidades utilizam a política de "Admin".

  1. GET /hotel
    • Retorna a lista de todos os hotéis.
    • Resposta:
      • 200 OK: Lista de hotéis.
      • 500 Internal Server Error: Erro interno do servidor.
      • Exemplo de resposta:
              [
                {
                  "HotelId": 1,
                  "Name": "Hotel Exemplo",
                  "Address": "Rua Exemplo, 123",
                  "CityId": 1,
                  "CityName": "Cidade Exemplo",
                  "State": "Estado Exemplo"
                },
                {
                  "HotelId": 2,
                  "Name": "Hotel Exemplo 2",
                  "Address": "Rua Exemplo, 456",
                  "CityId": 2,
                  "CityName": "Outra Cidade",
                  "State": "Outro Estado"
                }
              ]
        
  2. POST /hotel
    • Adiciona um novo hotel. Requer autenticação JWT e permissão de administrador.
    • Corpo da requisição:
          {
            "Name": "Hotel Novo",
            "Address": "Rua Nova, 789",
            "CityId": 3
          }
      
    • Resposta:
      • 201 Created: Hotel criado com sucesso.
      • 500 Internal Server Error: Erro interno do servidor.
      • Exemplo de resposta:
              {
                "HotelId": 3,
                "Name": "Hotel Novo",
                "Address": "Rua Nova, 789",
                "CityId": 3,
                "CityName": "Nova Cidade",
                "State": "Novo Estado"
              }
        

/login

Este endpoint contém um serviço para lidar com Login de usuários e pequenas verificações de dados.

Funcionalidades Principais

  1. POST /login
    • Autentica um usuário e retorna um token JWT.
    • Corpo da requisição:
        {
          "Email": "usuario@exemplo.com",
          "Password": "senha"
        }
      
    • Resposta:
      • 200 OK: Token JWT gerado com sucesso.
          {
            "token": "jwt_token"
          }
        
      • 401 Unauthorized: E-mail ou senha incorretos.
        {
          "message": "Incorrect e-mail or password"
        }
        


/room

Este endpoint contém um serviço para lidar com operações relacionadas aos quartos de um hotel. Ela utiliza a verficação JWT com a política de "Admin", somente com essa verificação algumas alterações são permitidas.

  1. GET /room/{HotelId}
    • Retorna a lista de quartos de um hotel específico.
    • Parâmetros:
      • HotelId: ID do hotel.
    • Resposta:
      • 200 OK: Lista de quartos do hotel.
            [
              {
                "RoomId": 1,
                "Name": "Quarto Luxo",
                "Capacity": 2,
                "Image": "url_da_imagem",
                "Hotel": {
                  "HotelId": 1,
                  "Name": "Hotel Exemplo",
                  "Address": "Rua Exemplo, 123",
                  "CityId": 1,
                  "CityName": "Cidade Exemplo",
                  "State": "Estado Exemplo"
                }
              }
            ]
        

  2. POST /room
    • Adiciona um novo quarto.
    • Autorização: Necessário token JWT e permissões de Admin.
    • Corpo da requisição:
        {
          "Name": "Quarto Luxo",
          "Capacity": 2,
          "Image": "url_da_imagem",
          "HotelId": 1
        }
      
    • Resposta:
      • 201 Created: Quarto adicionado com sucesso.
          {
            "RoomId": 1,
            "Name": "Quarto Luxo",
            "Capacity": 2,
            "Image": "url_da_imagem",
            "Hotel": {
              "HotelId": 1,
              "Name": "Hotel Exemplo",
              "Address": "Rua Exemplo, 123",
              "CityId": 1,
              "CityName": "Cidade Exemplo",
              "State": "Estado Exemplo"
            }
          }
        
      • 400 Bad Request: Objeto de quarto inválido.
      • 500 Internal Server Error: Erro interno do servidor.

/user

O endpoint de user oferece funcionalidades para lidar com informações sobre usuários, desde cadastro até pesquisa por algum ou todos. A rota é verificada por autorizações JWT, pelo política de "Admin".

  1. GET /user
    • Retorna a lista de usuários.
    • Autorização: Necessário token JWT e permissões de Admin.
    • Resposta:
      • 200 OK: Lista de usuários.
            [
              {
                "UserId": 1,
                "Name": "John Doe",
                "Email": "john.doe@example.com",
                "UserType": "admin"
              }
            ]
        

  2. POST /user
    • Adiciona um novo usuário.
    • Corpo da requisição:
        {
          "Name": "John Doe",
          "Email": "john.doe@example.com",
          "Password": "password"
        }
      
    • Resposta:
      • 201 Created: Usuário adicionado com sucesso.
        {
          "UserId": 1,
          "Name": "John Doe",
          "Email": "john.doe@example.com",
          "UserType": "client"
        }
        
      • 409 Conflict: Email do usuário já existe.
         {
          "message": "User email already exists"
         }
        

    Tecnologias

    Neste projeto utilizei as seguintes ferramentas:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors