Crie uma API para gerenciar reservas de hotéis usando a linguagem de programação de sua escolha (exemplo: Node.js com TypeScript, Python, Ruby, etc.). A API deve permitir que os usuários reservem quartos de hotel e, em caso de sucesso, visualizem um PDF com as informações da reserva. O fornecimento do código é opcional, mas preferível. Caso opte por não fornecer o código, explique como você abordaria cada etapa do projeto. Considere que usamos um banco de dados não relacional, e nossa arquitetura é baseada em funções Lambda e mensageria.
-
Implemente um endpoint para criar uma reserva de hotel. O endpoint deve aceitar informações como nome do usuário, datas de check-in e check-out, e número de quartos.
- Dica: Considere usar um banco de dados não relacional (por exemplo, MongoDB, DynamoDB, etc.) para armazenar as informações das reservas.
-
Implemente um mecanismo para tratar situações em que dois usuários tentem reservar o mesmo quarto ao mesmo tempo.
- Dica: Pesquise sobre "lock otimista" e "lock pessimista" para lidar com concorrência.
-
Implemente um endpoint para enviar um comprovante de pagamento da reserva. O comprovante de pagamento pode ser uma imagem ou arquivo PDF.
- Dica (Node.js): Use o Multer para lidar com o upload de arquivos.
-
Após a confirmação do pagamento, gere um PDF com as informações da reserva.
- Dica (Node.js): Utilize a biblioteca
pdf-lib
oupuppeteer
para gerar o PDF.
- Dica (Node.js): Utilize a biblioteca
-
Implemente um endpoint para permitir que o usuário baixe o PDF da reserva confirmada.
- Dica: Armazene o PDF gerado no sistema de arquivos ou no banco de dados e sirva-o através do endpoint.
-
Adicione um endpoint para que o usuário adicione saldo à sua conta.
- Dica: Armazene o saldo do usuário no banco de dados e atualize-o conforme necessário.
-
Implemente um mecanismo que, quando o check-in é feito, o saldo do usuário seja gasto de acordo com o valor da reserva.
- Dica: Crie um endpoint para registrar o check-in do usuário e, em seguida, atualize o saldo do usuário no banco de dados.
-
Escreva testes unitários e de integração para a API.
-
Use boas práticas de desenvolvimento, como modularização, tratamento de erros e validação de dados.
-
Implemente autenticação e autorização para proteger os endpoints.
- Dica (Node.js): Utilize o
jsonwebtoken
(JWT) para autenticação e autorização.
- Dica (Node.js): Utilize o
-
Implemente uma solução de cache para melhorar o desempenho e a escalabilidade da API.
- Dica (Node.js): Utilize o Redis como cache.
-
Implemente um mecanismo de log para registrar eventos e erros na API
-
Adapte a solução para utilizar a arquitetura baseada em funções Lambda e mensageria.
- Dica: Use AWS Lambda (Serverless framework) para implementar as funções e Amazon SQS ou SNS para mensageria.
Ao concluir o teste, forneça instruções claras sobre como instalar, configurar e executar a API, bem como os testes associados. Se você optar por não fornecer código, explique como abordaria cada etapa do projeto, levando em consideração o uso de um banco de dados não relacional e uma arquitetura baseada em funções Lambda e mensageria.