flights(); $airlineLetters = $flights ->filter(fn(UserFlight $f) => $f->airline?->IATA_code !== null) ->map(fn(UserFlight $f) => strtoupper($f->airline->IATA_code[0])) ->filter(fn($letter) => ctype_alpha($letter)) ->unique() ->count(); $this->awardProgress($airlineLetters, 'fun_challenges.airline_alphabet'); $airportLetters = $flights ->flatMap(fn(UserFlight $f) => [ $f->departureAirport?->iata_code, $f->arrivalAirport?->iata_code, ]) ->filter() ->map(fn($code) => strtoupper($code[0])) ->unique() ->count(); $this->awardProgress($airportLetters, 'fun_challenges.airport_alphabet'); // --- US States --- $visitedUsStates = $flights ->flatMap(fn(UserFlight $f) => [ $f->departureAirport?->region?->code, $f->arrivalAirport?->region?->code, ]) ->filter() ->filter(fn($code) => in_array($code, self::US_STATES)) ->unique() ->count(); $this->awardProgress($visitedUsStates, 'fun_challenges.us_states'); // --- Australian States --- $visitedAustralianStates = $flights ->flatMap(fn(UserFlight $f) => [ $f->departureAirport?->region?->code, $f->arrivalAirport?->region?->code, ]) ->filter() ->filter(fn($code) => in_array($code, self::AUSTRALIAN_STATES)) ->unique() ->count(); $this->awardProgress($visitedAustralianStates, 'fun_challenges.australian_states'); // --- Chinese Provinces --- $visitedChineseProvinces = $flights ->flatMap(fn(UserFlight $f) => [ $f->departureAirport?->region?->code, $f->arrivalAirport?->region?->code, ]) ->filter() ->filter(fn($code) => in_array($code, self::CHINESE_PROVINCES)) ->unique() ->count(); $this->awardProgress($visitedChineseProvinces, 'fun_challenges.chinese_provinces'); // --- Brazilian States --- $visitedBrazilianStates = $flights ->flatMap(fn(UserFlight $f) => [ $f->departureAirport?->region?->code, $f->arrivalAirport?->region?->code, ]) ->filter() ->filter(fn($code) => in_array($code, self::BRAZILIAN_STATES)) ->unique() ->count(); $this->awardProgress($visitedBrazilianStates, 'fun_challenges.brazilian_states'); // --- Canadian Provinces --- $visitedCanadianProvinces = $flights ->flatMap(fn(UserFlight $f) => [ $f->departureAirport?->region?->code, $f->arrivalAirport?->region?->code, ]) ->filter() ->filter(fn($code) => in_array($code, self::CANADIAN_PROVINCES)) ->unique() ->count(); $this->awardProgress($visitedCanadianProvinces, 'fun_challenges.canadian_provinces'); } }