Aplicação que analisa a capacidade das salas de espera de passageiros no aeroporto.
Este sistema foi desenvolvido como uma solução estratégica para o redimensionamento de salas de espera de aeroportos. O objetivo central é garantir que a infraestrutura possua a quantidade exata de assentos necessária para o conforto de todos os passageiros, evitando transtornos operacionais relatados pelo cliente.
Para compreender a lotação máxima em horários de pico, o sistema utiliza uma análise dinâmica de eventos. Isso permite identificar o momento de maior fluxo simultâneo, auxiliando gestores em decisões assertivas de investimento e otimização de espaço com base nos resultados gerados.
API desenvolvida para o desafio técnico da Atech, focada em calcular a ocupação máxima simultânea de salas de espera de aeroportos utilizando o algoritmo Sweep Line.
- Java 25
- Spring Boot 4.0.2
- Dependências: SpringWeb (REST API), Validation, Swagger API
- Project Loom (Virtual Threads)
- GitHub Actions configurado para compilação e execução de testes automatizados.
A solução baseia-se na técnica de Sweep Line (Linha de Varredura), que é ideal para problemas de sobreposição de intervalos.
O problema técnico:
"Dado um número
Nde passageiros(1 <= N <= 100)que passaram pela sala de espera, uma listaEcom os números do momento de entrada de cada passageiro e uma listaScom os números do momento de saída de cada passageiro [...]".
A solução respeitou os padrões do enunciado em toda a aplicação, sendo assim:
- N: Número de passageiros (limitado entre 1 e 100 conforme o enunciado).
- E: Lista de horários de entrada (mapeados em uma escala simplificada de 1 a 1000).
- S: Lista de horários de saída (mapeados em uma escala simplificada de 1 a 1000).
"[...] você deve calcular qual foi o número máximo de passageiros simultâneos naquela sala de espera durante todo o período. Considere que se um passageiro entra no mesmo momento que outro sai, então naquele instante só é contabilizada uma pessoa para a lotação da sala."
A solução implementada possui tratamento de eventos que ocorrem no mesmo instante: no modelo de domínio Event.java, está configurada o critério de desempate para que a saída seja processada antes da entrada, o que garante que a contagem da ocupação não retorne valores irreais.
OBS: Está definido nas constantes ENTRY (Entrada) e EXIT (Saída) para facilitar a leitura do código.
- JDK 25.
- Maven 3.9+.
- Clone o repositório:
git clone https://github.com/MarleneMoraes/lounge-occupancy-analyzer.git- Execute a aplicação:
# Se tiver Maven global:
mvn spring-boot:run
# Ou use o Wrapper incluso no projeto:
./mvnw spring-boot:runA API disponibiliza um endpoint principal para o cálculo da ocupação.
- Endpoint POST:
/api/v1/occupancy/calculate
Você pode testar o cenário padrão do desafio com o seguinte comando:
- Exemplo 1:
curl -X POST http://localhost:8080/api/v1/occupancy/calculate \
-H "Content-Type: application/json" \
-d '{
"N": 3,
"E": [1, 5, 7],
"S": [9, 13, 12]
}'
Resposta esperada: {"maxOccupancy": 3}
- Exemplo 2:
curl -X POST http://localhost:8080/api/v1/occupancy/calculate \
-H "Content-Type: application/json" \
-d '{
"N": 4,
"E": [1, 4, 8, 10],
"S": [3, 8, 10, 17]
}'
Resposta esperada: {"maxOccupancy": 1}
Para uma experiência interativa, acesse a interface do Swagger após iniciar a aplicação: http://localhost:8080/swagger-ui/index.html
Na interface, você encontrará a documentação completa dos esquemas de entrada e poderá realizar testes manuais preenchendo os campos de N, E e S.
A suíte de testes unitários cobre cenários padrão, casos de borda e validações de erro. Execute no terminal: mvn test.