Skip to content

Commit

Permalink
add secondary LH data lookup for airports
Browse files Browse the repository at this point in the history
  • Loading branch information
its-felix committed Oct 25, 2024
1 parent afad894 commit 07868e5
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 22 deletions.
1 change: 1 addition & 0 deletions cdk/lib/constructs/api-lambda-construct.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ export class ApiLambdaConstruct extends Construct {
props.dataBucket.grantRead(this.lambda, 'raw/ourairports_data/airports.csv');
props.dataBucket.grantRead(this.lambda, 'raw/ourairports_data/countries.csv');
props.dataBucket.grantRead(this.lambda, 'raw/ourairports_data/regions.csv');
props.dataBucket.grantRead(this.lambda, 'raw/LH_Public_Data/airports.json');
props.dataBucket.grantRead(this.lambda, 'raw/LH_Public_Data/aircraft.json');

props.authBucket.grantReadWrite(this.lambda, 'authreq/*');
Expand Down
67 changes: 45 additions & 22 deletions go/api/data/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,19 @@ func (h *Handler) Airports(ctx context.Context) (AirportsResponse, error) {
MetropolitanAreas: make([]MetropolitanArea, 0),
}

addAirport := func(airport Airport) {
if metroAreaValues, ok := metroAreaMapping[airport.Code]; ok {
metroArea := metroAreas[metroAreaValues[0]]
metroArea.Code = metroAreaValues[0]
metroArea.Name = metroAreaValues[1]
metroArea.Airports = append(metroArea.Airports, airport)

metroAreas[metroArea.Code] = metroArea
} else {
resp.Airports = append(resp.Airports, airport)
}
}

for {
row, err := r.Read()
if err != nil {
Expand Down Expand Up @@ -229,31 +242,41 @@ func (h *Handler) Airports(ctx context.Context) (AirportsResponse, error) {
return AirportsResponse{}, fmt.Errorf("failed to parse longitude for %q: %w", airport.Name, err)
}

if airport.Code == "" {
continue
}

if metroAreaValues, ok := metroAreaMapping[airport.Code]; ok {
metroArea := metroAreas[metroAreaValues[0]]
metroArea.Code = metroAreaValues[0]
metroArea.Name = metroAreaValues[1]
metroArea.Airports = append(metroArea.Airports, airport)

metroAreas[metroArea.Code] = metroArea
} else {
resp.Airports = append(resp.Airports, airport)
}
addAirport(airport)
}

for code := range relevantAirportCodes {
slog.WarnContext(ctx, "no data found for airport", slog.String("code", code))
if len(relevantAirportCodes) > 0 {
var airports []lufthansa.Airport
if err := adapt.S3GetJson(ctx, h.s3c, h.bucket, "raw/LH_Public_Data/airports.json", &airports); err != nil {
return AirportsResponse{}, err
}

resp.Airports = append(resp.Airports, Airport{
Code: code,
Name: code,
Lat: 0.0,
Lng: 0.0,
})
for code := range relevantAirportCodes {
idx := slices.IndexFunc(airports, func(airport lufthansa.Airport) bool {
return airport.Code == code
})

if idx == -1 {
slog.WarnContext(ctx, "no data found for airport", slog.String("code", code))

addAirport(Airport{
Code: code,
Name: code,
Lat: 0.0,
Lng: 0.0,
})
} else {
slog.WarnContext(ctx, "only secondary data found for airport", slog.String("code", code))

airport := airports[idx]
addAirport(Airport{
Code: code,
Name: findName(airport.Names, "EN"),
Lat: airport.Position.Coordinate.Latitude,
Lng: airport.Position.Coordinate.Longitude,
})
}
}
}

for _, v := range metroAreas {
Expand Down

0 comments on commit 07868e5

Please sign in to comment.