50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers\API;
 | |
| 
 | |
| use Illuminate\Http\Request;
 | |
| use App\Article;
 | |
| use Illuminate\Support\Carbon;
 | |
| use App\Http\Resources\ArticleResource;
 | |
| use App\Http\Controllers\Controller;
 | |
| use Illuminate\Support\Facades\Cache;
 | |
| 
 | |
| class TodaysPick extends Controller
 | |
| {
 | |
|     /**
 | |
|      * __invoke
 | |
|      * 
 | |
|      *  Query the Articles published today and return 8 articles from unique sources
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function __invoke()
 | |
|     {
 | |
|         return Cache::remember('articles.todayspick', 300, function () {
 | |
|             return Article::with('topics', 'source')
 | |
|                 ->whereDate('published_date', Carbon::today())
 | |
|                 ->inRandomOrder()
 | |
|                 ->take(8)
 | |
|                 ->get()
 | |
|                 ->transform(function ($article) {
 | |
|                     return [
 | |
|                         "id" => $article->id,
 | |
|                         "title" => $article->title,
 | |
|                         "url" => $article->url,
 | |
|                         "author" => $article->author,
 | |
|                         "featured_image" => $article->featured_image,
 | |
|                         "published_date" => $article->published_date,
 | |
|                         "meta" => $article->meta,
 | |
|                         "guid" => $article->guid,
 | |
|                         "source" => $article->source,
 | |
|                         "topics" => $article->topics,
 | |
|                         "body" => $article->body,
 | |
|                     ];
 | |
|                 })
 | |
|                 ->unique('source.name')
 | |
|                 ->values()
 | |
|                 ->toArray();
 | |
|         });
 | |
|     }
 | |
| }
 |