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