コード例 #1
0
ファイル: NewsController.php プロジェクト: cssailing/rest-api
 /**
  * Get the news for a given date range.
  *
  * @param string $start The start day (Y-m-d)
  * @param string $end The end day (Y-m-d)
  * @return void
  */
 public function getFromTo($start, $end)
 {
     $this->validate(array_merge(Request::get(), ['start' => $start, 'end' => $end]), ['sort' => 'string:value|in:asc,desc', 'page' => 'numeric:value|min:1|max:1000', 'per_page' => sprintf('numeric:value|min:1|max:%d', $this->limit), 'start' => sprintf('date|date_format:"Y-m-d"|before:%s', $end), 'end' => sprintf('date|date_format:"Y-m-d"|after:%s', $start), 'station' => 'string:value|exists:stations,name']);
     // Get the parameters
     $sort = Request::get('sort') ?: 'asc';
     $page = Request::get('page') ?: 1;
     $perPage = Request::get('per_page') ?: $this->limit;
     // Convert the start date format
     $fromDate = Carbon::createFromFormat('Y-m-d', $start);
     $toDate = Carbon::createFromFormat('Y-m-d', $end);
     $skip = $page > 0 ? $page * $perPage : 0;
     // Check the station name parameter value
     if (null !== ($stationName = Request::get('station'))) {
         $station = StationModel::where('name', $stationName)->where('enabled', true)->first();
         // Create a cache key
         $cacheKey = sprintf('news_range:station_id_%s:from_%d:to_%d:skip_%d:take_%d:sort_%s', $station->getId(), $fromDate->timestamp, $toDate->timestamp, $skip, $perPage, $sort);
         $models = Cache::remember($cacheKey, $this->cacheDuration, function () use($station, $fromDate, $toDate, $sort, $skip, $perPage) {
             return $station->getNews()->where('enabled', true)->where('station_id', $station->getId())->where('publicated_at', '>=', $fromDate)->where('publicated_at', '<=', $toDate)->orderBy('publicated_at', $sort)->skip($skip)->take($perPage)->get();
         });
     } else {
         // Create a cache key
         $cacheKey = sprintf('news_range:from_%d:to_%d:skip_%d:take_%d:sort_%s', $fromDate->timestamp, $toDate->timestamp, $skip, $perPage, $sort);
         $models = Cache::remember($cacheKey, $this->cacheDuration, function () use($fromDate, $toDate, $sort, $skip, $perPage) {
             return NewsModel::where('enabled', true)->where('publicated_at', '>=', $fromDate)->where('publicated_at', '<=', $toDate)->orderBy('publicated_at', $sort)->skip($skip)->take($perPage)->get();
         });
     }
     if ($models->isEmpty()) {
         Response::send(200, [], '200 - OK, but 0 results found');
     }
     Response::send(200, $models);
 }
コード例 #2
0
 /**
  * Get all stations and audio streams.
  *
  * @return void
  */
 public function getIndex()
 {
     $this->validate(Request::get(), ['sort' => 'string:value|in:asc,desc', 'permanent' => 'in:true,false,0,1,✓']);
     // Get the parameter
     $sort = Request::get('sort') ?: 'asc';
     // Check the station name parameter value
     if (null !== ($permanent = Request::get('permanent'))) {
         $usePermanent = $permanent === 'true' || $permanent === 1 || $permanent === '✓' ? true : false;
         // Create a cache key
         $cacheKey = sprintf('playlist:permanent_%s:sort_%s', $boolean, $sort);
         $models = Cache::remember($cacheKey, $this->cacheDuration, function () use($usePermanent, $sort) {
             return StationModel::where('enabled', true)->where('permanent', $usePermanent)->orderBy('updated_at', $sort)->get();
         });
     } else {
         // Create a cache key
         $cacheKey = sprintf('playlist:sort_%s', $sort);
         $models = Cache::remember($cacheKey, $this->cacheDuration, function () use($sort) {
             return StationModel::where('enabled', true)->orderBy('updated_at', $sort)->get();
         });
     }
     if ($models->isEmpty()) {
         Response::send(200, array(), '200 - OK, but 0 results found');
     }
     Response::send(200, $models);
 }