PlaceController.php 1.8 KB

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