/** * Display a listing of the available mosques. * * Possible filters, as GET params, are: * cityId: optional, numeric only * stateId, goes with placeId * latitude, optional, should not be set if placeId is set * longitude, goes with Latitude * minPrayerTimeUtc: optional, HH:MM 24 hours format, e.g 13:20 * maxPrayerTimeUtc: optional, HH:MM 24 hours format, e.g 14:00 * minInteriorSpace: optional, integer [1-5] * minParkingSpace: optional, integer [1-5] * * @return Response */ public function index() { $filters = Input::only('cityId', 'stateId', 'latitude', 'longitude', 'minPrayerTimeUtc', 'maxPrayerTimeUtc', 'minInteriorSpace', 'minParkingSpace'); $validator = Validator::make($filters, ['minPrayerTimeUtc' => 'date_format:H:i', 'maxPrayerTimeUtc' => 'date_format:H:i', 'minInteriorSpace' => 'numeric|between:1,5', 'minParkingSpace' => 'numeric|between:1,5', 'cityId' => 'integer', 'stateId' => 'integer', 'latitude' => 'numeric|between:-90,90|required_with:longitude', 'longitude' => 'numeric|between:-180,180|required_with:latitude']); if ($validator->fails()) { throw new BadRequestException($validator->errors()->first()); } $request = Mosque::query(); if ($filters['cityId'] != null) { $request->where('city', $filters['cityId']); } if ($filters['stateId'] != null) { $request->where('state', $filters['stateId']); } if ($filters['minInteriorSpace'] != null) { $request->where('interior_space', '>=', $filters['minInteriorSpace']); } if ($filters['minParkingSpace'] != null) { $request->where('parking_space', '>=', $filters['minParkingSpace']); } if ($filters['minPrayerTimeUtc'] != null) { $request->where('prayer_start', '>=', $filters['minPrayerTimeUtc']); } if ($filters['maxPrayerTimeUtc'] != null) { $request->where('prayer_start', '<=', $filters['maxPrayerTimeUtc']); } if ($filters['latitude'] != null && $filters['longitude'] != null) { $request->whereBetween('latitude', [$filters['latitude'] - 0.04, $filters['latitude'] + 0.04]); $request->whereBetween('longitude', [$filters['longitude'] - 0.04, $filters['longitude'] + 0.04]); } $mosques = $request->get(); return Response::json(array('data' => $mosques, 'status_code' => 200, 'params' => $filters), 200, [], JSON_NUMERIC_CHECK); }