Added Notifications

This commit is contained in:
2026-06-05 10:10:37 +10:00
parent 09841ba1f7
commit 906f8cda57
16 changed files with 61 additions and 34 deletions
@@ -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);
+3 -3
View File
@@ -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,
+5 -5
View File
@@ -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,
+3 -3
View File
@@ -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
{
//
}
};
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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