use App\Models\News; use App\Models\Category; use App\Models\NewsInteraction; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Route; -- GET ALL NEWS WITH COUNTS Route::get('/news', function () { $news = News::with('category') ->where('status',1) ->latest() ->paginate(10); return response()->json([ 'status' => true, 'current_page' => $news->currentPage(), 'last_page' => $news->lastPage(), 'total' => $news->total(), 'data' => $news->map(function($item){ return [ 'id' => $item->id, 'title_en' => $item->title_en, 'title_te' => $item->title_te, 'content_en' => $item->content_en, 'content_te' => $item->content_te, 'image' => $item->image ? url($item->image) : null, 'category' => $item->category?->name, 'location' => $item->location, 'likes_count' => $item->interactions()->where('liked',1)->count(), 'shares_count' => $item->interactions()->where('shared',1)->count(), 'saves_count' => $item->interactions()->where('saved',1)->count(), 'created_at' => $item->created_at, ]; }) ]); }); -- GET CATEGORIES Route::get('/categories', function(){ return Category::all(); }); -- LIKE NEWS Route::post('/news/{id}/like', function($id,Request $request){ $interaction = NewsInteraction::updateOrCreate( ['user_id'=>$request->user_id,'news_id'=>$id], ['liked'=>1] ); return response()->json(['status'=>true]); }); -- SAVE NEWS Route::post('/news/{id}/save', function($id,Request $request){ NewsInteraction::updateOrCreate( ['user_id'=>$request->user_id,'news_id'=>$id], ['saved'=>1] ); return response()->json(['status'=>true]); }); -- SHARE NEWS Route::post('/news/{id}/share', function($id,Request $request){ NewsInteraction::updateOrCreate( ['user_id'=>$request->user_id,'news_id'=>$id], ['shared'=>1] ); return response()->json(['status'=>true]); }); Laravel

Let's get started

Laravel has an incredibly rich ecosystem.
We suggest starting with the following.