Reservas por Unidade
Serviços por Tipo
Consultas API REST
/api/reservas
Todas as reservas do sistema
Clica em Executar
/api/reservas/hospede/:id
Reservas de um hóspede específico
Selecciona um hóspede
/api/reservas/unidade
Quantidade de reservas por unidade hoteleira
Clica em Executar
/api/servicos/total
Total de serviços adicionais vendidos por tipo
Clica em Executar
/api/reservas/:numero
Todos os dados de uma reserva específica
Selecciona uma reserva
/api/reservas
Criar uma nova reserva
Preencha o formulário acima
/api/reservas/:numero
Atualizar uma reserva existente
Seleciona uma reserva para atualizar
/api/reservas/:numero
Remover uma reserva do sistema
Cuidado: Ação irreversível
Unidades Hoteleiras
O hotel possui 5 unidades distribuídas pelas principais cidades de Portugal
Lisboa
Capital de Portugal
Porto
Cidade Invicta
Coimbra
Cidade Universitária
Faro
Capital do Algarve
Braga
Cidade dos Arcebispos
Serviços Adicionais Disponíveis
Spa
Massagens, tratamentos de beleza e relaxamento
Restaurante
Gastronomia portuguesa e internacional
Transporte
Transfers e transporte privado
Outros
Lavandaria, room service, etc.
MongoDB Aggregation Queries
1. Número total de serviços vendidos por tipo
Agrupa os serviços adicionais por tipo (spa, restaurante, transporte)
Clica em Executar
2. Quantidade de reservas por unidade
Agrupa reservas por unidade hoteleira (LS, PO, CB, FR, BR)
Clica em Executar
3. Valor médio das reservas
Calcula estatísticas gerais das reservas
Clica em Executar
4. Dados de uma reserva específica
Retorna todos os dados de uma reserva pelo número
Selecciona e Executa
XQuery - BaseX REST API
Query 1: Reservas de um hóspede
Apresenta todas as reservas de um hóspede específico
Selecciona e Executa
Query 2: Quantidade de reservas por unidade
Apresenta a quantidade de reservas por cada unidade hoteleira
Clica em Executar
Query 3: Total de serviços adicionais vendidos
Apresenta o total de serviços adicionais vendidos em todas as unidades
Clica em Executar
Schemas do Sistema
Estruturas de dados: XML, XSD e MongoDB
Exemplo XML - Reserva Completa
Estrutura de dados XML utilizada no sistema
<?xml version="1.0" encoding="UTF-8"?>
<reservas>
<reserva numeroReserva="RES001">
<hospede>
<numeroCliente>CLI123</numeroCliente>
<nome>João Silva</nome>
<nif>123456789</nif>
<telefone>912345678</telefone>
<email>joao@example.com</email>
</hospede>
<unidade>LS</unidade>
<quarto>101</quarto>
<checkIn>2025-01-15</checkIn>
<checkOut>2025-01-18</checkOut>
<valorTotal>450.00</valorTotal>
<servicosAdicionais>
<servicoAdicional>
<tipo>spa</tipo>
<quantidade>2</quantidade>
<preco>50.00</preco>
</servicoAdicional>
<servicoAdicional>
<tipo>restaurante</tipo>
<quantidade>1</quantidade>
<preco>35.00</preco>
</servicoAdicional>
</servicosAdicionais>
</reserva>
</reservas>
XML Schema (XSD) - Validação
Definição de tipos e regras de validação
Tipos Personalizados (simpleType)
tipoNumeroCliente
[A-Z]{3}[0-9]{3}
3 letras + 3 números (ex: CLI123)
tipoNIF
[0-9]{9}
9 dígitos numéricos
tipoTelefone
9[0-9]{8}
Começa por 9, 9 dígitos total
tipoEmail
[a-zA-Z0-9._%+-]+@...
Email válido (ex: user@example.com)
tipoNumeroReserva
RES[0-9]{3}
RES + 3 números (ex: RES001)
tipoServico
enumeration
spa | restaurante | transporte | outros
tipoUnidade
enumeration
LS | PO | CB | FR | BR
Restrição Importante
Não é permitida a introdução de mais do que 4 serviços adicionais numa mesma reserva.
maxOccurs="4"
MongoDB Schema - Estrutura de Documentos
Modelo NoSQL utilizado na base de dados
Documento Reserva (Collection: reservas)
{
"_id": ObjectId("..."),
"numeroReserva": "RES001",
"hospede": {
"numeroCliente": "CLI123",
"nome": "João Silva",
"nif": "123456789",
"telefone": "912345678",
"email": "joao@example.com"
},
"unidade": "LS",
"quarto": "101",
"checkIn": "2025-01-15",
"checkOut": "2025-01-18",
"valorTotal": 450.00,
"servicosAdicionais": [
{
"tipo": "spa",
"quantidade": 2,
"preco": 50.00
},
{
"tipo": "restaurante",
"quantidade": 1,
"preco": 35.00
}
]
}
Validações e Regras
Índices
unique
numeroReserva (único)
Campos Obrigatórios
required
numeroReserva, hospede, unidade, checkIn
Tipo de Dados
Number, String, Array
valorTotal: Number, servicosAdicionais: Array
Validação Backend
maxServicos: 4
Máximo 4 serviços adicionais (server.js)
Diferenças XML vs MongoDB
XML: Estrutura hierárquica, validação via XSD, Schema estático
MongoDB: Documentos flexíveis (JSON), Schema dinâmico, validações no backend
Sobre o Projeto
Trabalho Prático desenvolvido no âmbito da unidade curricular Processo, Estruturação e Integração de Dados (PEID).
Stack Tecnológica
API Endpoints
/api/reservas
Todas as reservas
/api/reservas/hospede/:numeroCliente
Reservas de um hóspede
/api/reservas/unidade
Quantidade por unidade
/api/servicos/total
Total de serviços vendidos
/api/reservas/media
Valor médio das reservas
/api/reservas/maior
Reserva com maior valor
/api/reservas/:numeroReserva
Dados de uma reserva
/api/estatisticas
Dashboard stats
/api/reservas
Criar nova reserva
/api/reservas/:numeroReserva
Atualizar reserva
/api/reservas/:numeroReserva
Eliminar reserva
Pedidos HTTP (cURL)
Exemplos de chamadas à API REST utilizando cURL
Obter todas as reservas
curl -X GET http://localhost:3000/api/reservas
Reservas de um hóspede
curl -X GET http://localhost:3000/api/reservas/hospede/CLI123
Quantidade por unidade
curl -X GET http://localhost:3000/api/reservas/unidade
Total de serviços
curl -X GET http://localhost:3000/api/servicos/total
Valor médio
curl -X GET http://localhost:3000/api/reservas/media
Reserva específica
curl -X GET http://localhost:3000/api/reservas/R001
Estrutura Hóspede
Dados obrigatórios do hóspede
MongoDB Charts
Dashboard disponível no MongoDB Atlas
Gráfico 1: Reservas por Unidade
Distribuição das reservas pelas 5 unidades hoteleiras
Gráfico 2: Serviços por Tipo
Total de serviços vendidos agrupados por categoria
Ver Dashboard MongoDB Atlas Charts