PlaceController.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Place;
  4. use App\Services\PlaceService;
  5. use App\Services\StatusService;
  6. use Illuminate\Http\Request;
  7. class PlaceController extends Controller
  8. {
  9. const PLACES_CACHE_KEY = 'pf:places:sid-cache:by:placeid:';
  10. public function __construct()
  11. {
  12. $this->middleware('auth');
  13. }
  14. public function show(Request $request, int $id, $slug)
  15. {
  16. abort_if($id < 1 || $id > 128800, 404);
  17. $place = Place::whereSlug($slug)->findOrFail($id);
  18. $statusIds = PlaceService::getStatusesByPlaceId($id);
  19. $posts = $statusIds->map(function ($item) {
  20. return StatusService::get($item->id);
  21. })->filter(function ($item) {
  22. return $item && count($item['media_attachments'][0]);
  23. })->take(108)->values();
  24. return view('discover.places.show', compact('place', 'posts'));
  25. }
  26. public function directoryHome(Request $request)
  27. {
  28. $places = Place::select('country')
  29. ->distinct('country')
  30. ->simplePaginate(48);
  31. return view('discover.places.directory.home', compact('places'));
  32. }
  33. public function directoryCities(Request $request, $country)
  34. {
  35. $country = ucfirst(urldecode($country));
  36. $places = Place::whereCountry($country)
  37. ->orderBy('name', 'asc')
  38. ->distinct('name')
  39. ->simplePaginate(48);
  40. return view('discover.places.directory.cities', compact('places'));
  41. }
  42. }