diff --git a/app/Contracts/AirportLookup.php b/app/Contracts/AirportLookup.php
new file mode 100644
index 00000000..80097eaf
--- /dev/null
+++ b/app/Contracts/AirportLookup.php
@@ -0,0 +1,27 @@
+airportRepo = $airportRepo;
+ $this->airportSvc = $airportSvc;
}
/**
@@ -88,19 +90,7 @@ class AirportController extends Controller
*/
public function lookup($id)
{
- $airport = Cache::remember(
- config('cache.keys.AIRPORT_VACENTRAL_LOOKUP.key').$id,
- config('cache.keys.AIRPORT_VACENTRAL_LOOKUP.time'),
- function () use ($id) {
- try {
- return AirportLookup::get($id);
- } catch (\VaCentral\HttpException $e) {
- Log::error($e);
- return [];
- }
- }
- );
-
+ $airport = $this->airportSvc->lookupAirport($id);
return new AirportResource(collect($airport));
}
}
diff --git a/app/Providers/BindServiceProviders.php b/app/Providers/BindServiceProviders.php
new file mode 100755
index 00000000..b6a88a52
--- /dev/null
+++ b/app/Providers/BindServiceProviders.php
@@ -0,0 +1,29 @@
+app->bind(
+ Metar::class,
+ config('phpvms.metar_lookup')
+ );
+
+ /*
+ * Bind the class used to fullfill the AirportLookup class contract
+ */
+ $this->app->bind(
+ AirportLookup::class,
+ config('phpvms.airport_lookup')
+ );
+ }
+}
diff --git a/app/Providers/WeatherServiceProvider.php b/app/Providers/WeatherServiceProvider.php
deleted file mode 100755
index 3e84c531..00000000
--- a/app/Providers/WeatherServiceProvider.php
+++ /dev/null
@@ -1,17 +0,0 @@
-app->bind(
- Metar::class,
- config('phpvms.metar')
- );
- }
-}
diff --git a/app/Services/AirportLookup/VaCentralLookup.php b/app/Services/AirportLookup/VaCentralLookup.php
new file mode 100644
index 00000000..930c8842
--- /dev/null
+++ b/app/Services/AirportLookup/VaCentralLookup.php
@@ -0,0 +1,28 @@
+lookupProvider = $lookupProvider;
$this->metarProvider = $metarProvider;
}
@@ -38,4 +45,35 @@ class AirportService extends Service
return new Metar($raw_metar);
}
}
+
+ /**
+ * Lookup an airport's information from a remote provider. This handles caching
+ * the data internally
+ *
+ * @param string $icao ICAO
+ *
+ * @return Airport|array
+ */
+ public function lookupAirport($icao)
+ {
+ $key = config('cache.keys.AIRPORT_VACENTRAL_LOOKUP.key').$icao;
+
+ $airport = Cache::get($key);
+ if ($airport) {
+ return $airport;
+ }
+
+ $airport = $this->lookupProvider->getAirport($icao);
+ if ($airport === null) {
+ return [];
+ }
+
+ Cache::add(
+ $key,
+ $airport,
+ config('cache.keys.AIRPORT_VACENTRAL_LOOKUP.time')
+ );
+
+ return $airport;
+ }
}
diff --git a/config/app.php b/config/app.php
index 09574c41..2843d633 100755
--- a/config/app.php
+++ b/config/app.php
@@ -87,7 +87,7 @@ return [
App\Providers\vaCentralServiceProvider::class,
App\Providers\ExtendedTimezonelistProvider::class,
App\Providers\MeasurementsProvider::class,
- App\Providers\WeatherServiceProvider::class,
+ App\Providers\BindServiceProviders::class,
],
'aliases' => [
diff --git a/config/phpvms.php b/config/phpvms.php
index 61b66a3c..3f890fcb 100644
--- a/config/phpvms.php
+++ b/config/phpvms.php
@@ -47,7 +47,13 @@ return [
* Point to the class to use to retrieve the METAR string. If this
* goes inactive at some date, it can be replaced
*/
- 'metar' => App\Services\Metar\AviationWeather::class,
+ 'metar_lookup' => App\Services\Metar\AviationWeather::class,
+
+ /*
+ * Point to the class used to retrieve the airport information.
+ * If this goes inactive at some date, it can be replaced
+ */
+ 'airport_lookup' => App\Services\AirportLookup\VaCentralLookup::class,
/*
* Your vaCentral API key
diff --git a/phpunit.xml b/phpunit.xml
index 09c8eced..874dadaf 100755
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -26,7 +26,7 @@
-
+