Skip to content

MarleneMoraes/lounge-occupancy-analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lounge Occupancy Analyzer (Análise de Capacidade das Salas de Espera)

Aplicação que analisa a capacidade das salas de espera de passageiros no aeroporto.

Visão de Negócio

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.

Explicação Técnica

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.

Tecnologias Utilizadas

  • 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.

Arquitetura

A solução baseia-se na técnica de Sweep Line (Linha de Varredura), que é ideal para problemas de sobreposição de intervalos.

Lógica de Negócio (N, E, S)

O problema técnico:

"Dado um número N de passageiros (1 <= N <= 100) que passaram pela sala de espera, uma lista E com os números do momento de entrada de cada passageiro e uma lista S com 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).

Tratamento de Eventos Simultâneos

"[...] 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.

Instruções de Setup

Pré-requisitos

  • JDK 25.
  • Maven 3.9+.

Passo a Passo

  1. Clone o repositório:
git clone https://github.com/MarleneMoraes/lounge-occupancy-analyzer.git
  1. Execute a aplicação:
# Se tiver Maven global:
mvn spring-boot:run

# Ou use o Wrapper incluso no projeto:
./mvnw spring-boot:run

Como Utilizar

A API disponibiliza um endpoint principal para o cálculo da ocupação.

  • Endpoint POST: /api/v1/occupancy/calculate
Teste via Terminal (CURL)

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}

Interface Visual (Swagger)

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.

Testes Automatizados

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.

About

Atech Challenge | REST API for airport lounge capacity and maximum simultaneous occupancy analysis

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages