Skip to content

adicionando cálculo de emissões dos voos - #2

Merged
Invokedzz merged 1 commit into
masterfrom
feature/calculo-emissoes
Sep 27, 2026
Merged

Invokedzz merged 1 commit into
masterfrom
feature/calculo-emissoes

Conversation

@letyciamaia

Copy link
Copy Markdown
Collaborator

O que foi feito

Implementa a regra de negócio do cálculo de emissões dos voos, que antes só tinha as classes vazias. Usa o ITravelImpactProvider, que já existia, para buscar os dados na API Travel Impact do Google.

Novo endpoint
POST /Carbon/Emissions/Calculate (exige login, [Authorize])

{
  "flights": [
    { "origin": "GRU", "destination": "GIG", "carrierCode": "LA", "flightNumber": 3300, "departureDate": "2026-10-20" }
  ],
  "cabin": "Economy",
  "passengers": 2,
  "roundTrip": true
}

Retorna kg de CO₂ por passageiro, total em kg e em toneladas, nível de impacto (Low / Moderate / High) e o impacto de rastros (contrails) informado pelo Google.

Regras de negócio (EmissionsService)

  • Usa o valor da classe escolhida (Economy, PremiumEconomy, Business, First) e converte de gramas para kg
  • Ida e volta (roundTrip: true) dobra o valor
  • Multiplica pelo número de passageiros
  • Classificação por passageiro: abaixo de 100 kg = Low, até 500 kg = Moderate, acima = High (limites na classe EmissionsRules, fáceis de ajustar)

Validações (retornam 400)

  • Pelo menos 1 e no máximo 10 voos
  • Passageiros entre 1 e 100
  • Aeroporto com código IATA de 3 letras, origem diferente do destino
  • Companhia com 2 caracteres, número do voo maior que zero
  • Classe que não existe no voo (ex.: primeira classe em voo nacional)

Se a API do Google não encontrar o voo, retorna 404.
Arquivos alterados

  • Domain: EmissionsContracts, IEmissionsService, EmissionsService
  • Application: IEmissionsUseCase, EmissionsUseCase e novos DTOs em Dtos/Emissions
  • Core: EmissionsController e Program.cs
    @Invokedzz adicionei app.UseAuthorization(); no Carbon.Core/Program.cs, logo depois do UseAuthentication(). Sem essa linha, qualquer endpoint com [Authorize] retorna 401 mesmo com token válido. Vai ser necessária também para as telas com permissão por cargo.

Testado:

  • Build sem erros
  • Testes unitários locais com provider simulado (9 cenários: cálculo só ida, ida e volta, várias classes e todas as validações), todos aprovados. Não incluí o projeto de testes no PR.
  • Falta testar de ponta a ponta com a API real, que depende dos user-secrets (banco, JWT e chave da Travel Impact).

@Invokedzz
Invokedzz merged commit b68a68e into master Sep 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants