Added Notifications
This commit is contained in:
@@ -68,7 +68,7 @@ class AirlineApiController extends ApiController
|
||||
}
|
||||
|
||||
function getByCode(string $code){
|
||||
$lookupColumn = strlen($code) === 3 ? 'ICAO_code' : 'IATA_code';
|
||||
$lookupColumn = strlen($code) === 3 ? 'icao_code' : 'iata_code';
|
||||
$airlines = Airline::where($lookupColumn, strtoupper($code))->get()->map(fn($airline) => $this->parseAirlineData($airline));
|
||||
return response()->json($airlines);
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ class FlightController extends Controller
|
||||
$code = $matches[1] ?? null;
|
||||
$flightNumber = $matches[2] ?? null;
|
||||
$isIata = strlen($code) === 2;
|
||||
$codeColumn = $isIata ? 'IATA_code' : 'ICAO_code';
|
||||
$codeColumn = $isIata ? 'iata_code' : 'icao_code';
|
||||
|
||||
$apiAirlineCodes = [];
|
||||
$fromOptions = [];
|
||||
@@ -118,8 +118,8 @@ class FlightController extends Controller
|
||||
->get()
|
||||
->unique('id')
|
||||
->sortBy(function ($a) use ($code, $flightData) {
|
||||
if ($a->IATA_code === $flightData?->operating_fs) return 0;
|
||||
if ($a->IATA_code === $code) return 1;
|
||||
if ($a->iata_code === $flightData?->operating_fs) return 0;
|
||||
if ($a->iata_code === $code) return 1;
|
||||
return 2;
|
||||
})
|
||||
->map(fn($a) => ['value' => $a->id, 'title' => $a->display_name, 'logo_url' => $a->logo_url])
|
||||
|
||||
@@ -100,20 +100,20 @@ class FlightImportController extends Controller
|
||||
$airlines = Airline::when($iata || $icao, function ($query) use ($iata, $icao) {
|
||||
$query->orderByRaw("
|
||||
CASE
|
||||
WHEN \"IATA_code\" = ? AND \"ICAO_code\" = ? THEN 0
|
||||
WHEN \"IATA_code\" = ? THEN 1
|
||||
WHEN \"ICAO_code\" = ? THEN 2
|
||||
WHEN \"iata_code\" = ? AND \"icao_code\" = ? THEN 0
|
||||
WHEN \"iata_code\" = ? THEN 1
|
||||
WHEN \"icao_code\" = ? THEN 2
|
||||
ELSE 3
|
||||
END
|
||||
", [$iata, $icao, $iata, $icao])
|
||||
->where(function ($q) use ($iata, $icao) {
|
||||
$q->where('IATA_code', $iata)
|
||||
->orWhere('ICAO_code', $icao);
|
||||
$q->where('iata_code', $iata)
|
||||
->orWhere('icao_code', $icao);
|
||||
});
|
||||
})
|
||||
->orderByDesc('active')
|
||||
->limit(10)
|
||||
->get(['id', 'name', 'IATA_code', 'ICAO_code', 'internal_name'])
|
||||
->get(['id', 'name', 'iata_code', 'icao_code', 'internal_name'])
|
||||
->map(fn($airline) => [
|
||||
'value' => $airline->id,
|
||||
'title' => $airline->display_name,
|
||||
|
||||
@@ -16,13 +16,13 @@ class SearchController extends Controller
|
||||
->where(function ($query) use ($q) {
|
||||
$len = strlen($q);
|
||||
if ($len === 2) {
|
||||
$query->where('IATA_code', 'ilike', $q);
|
||||
$query->where('iata_code', 'ilike', $q);
|
||||
} elseif ($len === 3) {
|
||||
$query->where('ICAO_code', 'ilike', $q);
|
||||
$query->where('icao_code', 'ilike', $q);
|
||||
} else {
|
||||
$query->where('name', 'ilike', "%{$q}%")
|
||||
->orWhere('IATA_code', 'ilike', "%{$q}%")
|
||||
->orWhere('ICAO_code', 'ilike', "%{$q}%");
|
||||
->orWhere('iata_code', 'ilike', "%{$q}%")
|
||||
->orWhere('icao_code', 'ilike', "%{$q}%");
|
||||
}
|
||||
})
|
||||
->limit(50)
|
||||
@@ -44,7 +44,7 @@ class SearchController extends Controller
|
||||
->orWhereRaw("CONCAT(manufacturer_code, ' ', model_full_name) ilike ?", ["%{$q}%"])
|
||||
->orWhereRaw("CONCAT(manufacturer_code, ' ', model_full_name) ilike ?", ["%{$replacedQuery}%"])
|
||||
->limit(200)
|
||||
->orderBy('id', 'asc')
|
||||
->orderBy('preferred', 'desc')
|
||||
->get(['id', 'manufacturer_code', 'model_full_name', 'designator'])
|
||||
->map(fn($aircraft) => [
|
||||
'value' => $aircraft->id,
|
||||
|
||||
@@ -12,8 +12,8 @@ class Airline extends Model
|
||||
protected $table = 'airlines';
|
||||
|
||||
protected $fillable = [
|
||||
'IATA_code',
|
||||
'ICAO_code',
|
||||
'iata_code',
|
||||
'icao_code',
|
||||
'name',
|
||||
'internal_name',
|
||||
'country_id',
|
||||
@@ -35,7 +35,7 @@ class Airline extends Model
|
||||
protected function displayName() : Attribute{
|
||||
return Attribute::make(
|
||||
get: function () {
|
||||
$codes = array_filter([$this->IATA_code, $this->ICAO_code]);
|
||||
$codes = array_filter([$this->iata_code, $this->icao_code]);
|
||||
$codeString = count($codes) ? ' (' . implode('/', $codes) . ')' : '';
|
||||
return "{$this->name}{$codeString}";
|
||||
}
|
||||
|
||||
@@ -46,8 +46,8 @@ class FunChallengesChecker extends BaseChecker
|
||||
$flights = $this->flights();
|
||||
|
||||
$airlineLetters = $flights
|
||||
->filter(fn(UserFlight $f) => $f->airline?->IATA_code !== null)
|
||||
->map(fn(UserFlight $f) => strtoupper($f->airline->IATA_code[0]))
|
||||
->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();
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('airlines', function (Blueprint $table) {
|
||||
$table->renameColumn('IATA_code', 'iata_code');
|
||||
$table->renameColumn('ICAO_code', 'icao_code');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
};
|
||||
@@ -23,7 +23,7 @@ class AirlinesSeeder extends Seeder
|
||||
$renames = [
|
||||
'airlineId' => 'id',
|
||||
'codeIataAirline' => 'IATA_code',
|
||||
'codeIcaoAirline' => 'ICAO_code',
|
||||
'codeIcaoAirline' => 'icao_code',
|
||||
'slug' => 'internal_name',
|
||||
'nameAirline' => 'name',
|
||||
'codeIso2Country' => 'country_code',
|
||||
|
||||
@@ -19,7 +19,7 @@ interface AirlineEntry {
|
||||
}
|
||||
|
||||
function getCode(airline: Airline): string | null {
|
||||
const raw = props.codeType === 'iata' ? airline.IATA_code : airline.ICAO_code
|
||||
const raw = props.codeType === 'iata' ? airline.iata_code : airline.icao_code
|
||||
return raw?.trim().toUpperCase() ?? null
|
||||
}
|
||||
|
||||
|
||||
@@ -38,9 +38,9 @@ const size = computed(() => props.size ? props.size + 'px' : '30px');
|
||||
<span class="airline-logo-tooltip" :style="logoStyle"></span>
|
||||
<span class="airline-name">{{ airline.name }}</span>
|
||||
</div>
|
||||
<div v-if="airline.IATA_code || airline.ICAO_code" class="codes">
|
||||
<InlineBadge v-if="airline.IATA_code" variant="generic">{{ airline.IATA_code }}</InlineBadge>
|
||||
<InlineBadge v-if="airline.ICAO_code" variant="generic">{{ airline.ICAO_code }}</InlineBadge>
|
||||
<div v-if="airline.iata_code || airline.icao_code" class="codes">
|
||||
<InlineBadge v-if="airline.iata_code" variant="generic">{{ airline.iata_code }}</InlineBadge>
|
||||
<InlineBadge v-if="airline.icao_code" variant="generic">{{ airline.icao_code }}</InlineBadge>
|
||||
<AllianceLogo v-if="airline?.alliance" :alliance="airline?.alliance" size="24" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -44,7 +44,7 @@ const flightsByAirline = computed(() => {
|
||||
})
|
||||
|
||||
function rowKey(airline: Airline): string {
|
||||
return airline.IATA_code ?? airline.internal_name
|
||||
return airline.iata_code ?? airline.internal_name
|
||||
}
|
||||
|
||||
const rows = computed(() => [...flightsByAirline.value.keys()])
|
||||
|
||||
@@ -44,7 +44,7 @@ const customKeySort = {
|
||||
return (CLASS_ORDER[a?.name ?? ''] ?? -1) - (CLASS_ORDER[b?.name ?? ''] ?? -1)
|
||||
},
|
||||
airline: (a: Flight['airline'], b: Flight['airline']) => {
|
||||
return (a?.IATA_code ?? '').localeCompare(b?.IATA_code ?? '')
|
||||
return (a?.iata_code ?? '').localeCompare(b?.iata_code ?? '')
|
||||
},
|
||||
duration: (a: any, b: any) => (a ?? 0) - (b ?? 0),
|
||||
departure_airport: (a: Flight['departure_airport'], b: Flight['departure_airport']) => {
|
||||
|
||||
@@ -115,7 +115,7 @@ function routePopupHTML(historical: Flight[], future: Flight[]): string {
|
||||
const label = `${f.departure_airport.municipality} to ${f.arrival_airport.municipality}`
|
||||
if (!dirs.has(key)) dirs.set(key, { label, airlines: [] })
|
||||
const airline = f.airline ? `<span style="display:inline-flex;align-items:center;gap:6px;">
|
||||
<img src="${f.airline?.logo_url}" width="24" height="24" alt="${f.airline?.IATA_code}" style="flex-shrink:0;" />
|
||||
<img src="${f.airline?.logo_url}" width="24" height="24" alt="${f.airline?.iata_code}" style="flex-shrink:0;" />
|
||||
${f.airline?.name}
|
||||
</span>` : ''
|
||||
if (airline && !dirs.get(key)!.airlines.includes(airline)) {
|
||||
|
||||
@@ -26,8 +26,8 @@ defineProps<{
|
||||
</div>
|
||||
<DetailRows>
|
||||
<DetailRow v-if="airline.alliance?.name" label="Alliance" :value="airline.alliance.name" variant="Alliance" :alliance="airline.alliance" />
|
||||
<DetailRow label="IATA" v-if="airline.IATA_code" :value="airline.IATA_code" variant="Badge" />
|
||||
<DetailRow label="ICAO" v-if="airline.IATA_code" :value="airline.ICAO_code" variant="Badge" />
|
||||
<DetailRow label="IATA" v-if="airline.iata_code" :value="airline.iata_code" variant="Badge" />
|
||||
<DetailRow label="ICAO" v-if="airline.iata_code" :value="airline.icao_code" variant="Badge" />
|
||||
</DetailRows>
|
||||
</Panel>
|
||||
|
||||
|
||||
@@ -22,8 +22,8 @@ export function useAlphabetAirlines(
|
||||
|
||||
for (const flight of flights.value) {
|
||||
const raw = codeType.value === 'iata'
|
||||
? flight.airline?.IATA_code
|
||||
: flight.airline?.ICAO_code
|
||||
? flight.airline?.iata_code
|
||||
: flight.airline?.icao_code
|
||||
|
||||
const code = raw?.trim().toUpperCase()
|
||||
if (!code) continue
|
||||
|
||||
Vendored
+2
-2
@@ -181,8 +181,8 @@ export type Country = {
|
||||
|
||||
export interface Airline {
|
||||
id: number
|
||||
IATA_code: string | null
|
||||
ICAO_code: string | null
|
||||
iata_code: string | null
|
||||
icao_code: string | null
|
||||
name: string
|
||||
internal_name: string
|
||||
active: boolean
|
||||
|
||||
Reference in New Issue
Block a user