Add nightly town sync from ArcGIS API with autocomplete
All checks were successful
linter / quality (pull_request) Successful in 1m21s
security / Dependency Audit (pull_request) Successful in 1m25s
security / Static Analysis (pull_request) Successful in 1m49s
tests / ci (8.4) (pull_request) Successful in 1m23s
tests / ci (8.5) (pull_request) Successful in 1m27s

- Add towns table with town_pid, town_name, state, population, town_class, date_retired
- Add AustralianState enum with label and abbreviation helpers
- Add Town model with active() and search() scopes
- Add SyncTowns job that paginates ArcGIS API and upserts all 1977 towns
- Schedule SyncTowns to run nightly at 02:00
- Add /towns/search endpoint returning JSON suggestions filtered by name and state
- Add Alpine-powered autocomplete on origin/destination fields in create form
- Add state filter dropdown in journeys card header to narrow autocomplete results
This commit is contained in:
2026-03-06 04:16:55 +00:00
parent a4a31c97e3
commit a37ada96e2
8 changed files with 328 additions and 7 deletions

View File

@@ -0,0 +1,43 @@
<?php
namespace App\Enums;
enum AustralianState: int
{
case NSW = 1;
case VIC = 2;
case QLD = 3;
case SA = 4;
case WA = 5;
case TAS = 6;
case NT = 7;
case ACT = 8;
public function label(): string
{
return match ($this) {
self::NSW => 'New South Wales',
self::VIC => 'Victoria',
self::QLD => 'Queensland',
self::SA => 'South Australia',
self::WA => 'Western Australia',
self::TAS => 'Tasmania',
self::NT => 'Northern Territory',
self::ACT => 'Australian Capital Territory',
};
}
public function abbreviation(): string
{
return match ($this) {
self::NSW => 'NSW',
self::VIC => 'VIC',
self::QLD => 'QLD',
self::SA => 'SA',
self::WA => 'WA',
self::TAS => 'TAS',
self::NT => 'NT',
self::ACT => 'ACT',
};
}
}