diff --git a/routes/web.php b/routes/web.php index eda0073..f8467a1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ 'https://app.wayward.travel/', - 'timeout' => 3.0 - ]); - - $response = $client->get('trip/'.config('app.current_trip_id').'/user/zmld8ko6qy7d9j3xvq10/json'); + if (!config('app.current_trip_id')) return view('no-trip'); - if ($response->getStatusCode() == 200) { - $data = json_decode($response->getBody()); - return view('tracker', ['trip' => $data->trip]); - } else { - return 'Something went wrong'; + $tripFile = config('app.current_trip_id') . '.json'; + + if (Storage::disk('local')->exists($tripFile)) { + $cachedData = json_decode(Storage::disk('local')->get($tripFile)); + $cachedDataUpdatedAt = new DateTime($cachedData->trip->updated_at); + $now = new DateTime(); + if (intval(($now->getTimestamp() - $cachedDataUpdatedAt->getTimestamp()) / 3600) <= 5) { + return view('tracker', ['trip' => $cachedData->trip]); } + } + + $client = new Client([ + 'base_uri' => 'https://app.wayward.travel/', + 'timeout' => 3.0 + ]); + + $response = $client->get('trip/'.config('app.current_trip_id').'/user/zmld8ko6qy7d9j3xvq10/json'); + + if ($response->getStatusCode() == 200) { + $data = json_decode($response->getBody()); + + if (Storage::disk('local')->missing($tripFile)) { + Storage::disk('local')->put($tripFile, json_encode($data)); + } else { + $cachedData = json_decode(Storage::disk('local')->get($tripFile)); + if ($data->trip->updated_at !== $cachedData->trip->updated_at) { + Storage::disk('local')->put($tripFile, json_encode($data)); + // TODO: Cache photos locally + } else { + $data = $cachedData; + } + } + + return view('tracker', ['trip' => $data->trip]); } else { - return view('no-trip'); + return 'Something went wrong'; } });