orderByDesc('id') ->cursorPaginate(15); /* */ $prevCursor = $postsQuery->previousCursor(); $nextCursor = $postsQuery->nextCursor(); $posts = [ 'data' => [], 'prev_cursor' => ($prevCursor ? $prevCursor->encode() : null), 'next_cursor' => ($nextCursor ? $nextCursor->encode() : null) ]; foreach($postsQuery as $post) { // TODO: XlXi: icons/colors // TODO: XlXi: groups $poster = []; if($post['poster_type'] == 'user') { $user = User::where('id', $post['poster_id'])->first(); $poster = [ 'type' => 'User', 'name' => $user->username, 'thumbnail' => 'https://www.gtoria.local/images/testing/headshot.png', 'url' => $user->getProfileUrl() ]; } /* */ $postDate = $post['updated_at']; if(Carbon::now()->greaterThan($postDate->copy()->addDays(2))) $postDate = $postDate->isoFormat('lll'); else $postDate = $postDate->calendar(); /* */ array_push($posts['data'], [ 'postId' => $post['id'], 'poster' => $poster, 'content' => $post['content'], 'time' => $postDate ]); } return response($posts); } protected function share(Request $request) { $validated = $request->validate([ 'content' => ['required', 'max:200'] ]); $shout = new Shout(); $shout->poster_id = Auth::id(); $shout->poster_type = 'user'; $shout->content = $validated['content']; $shout->save(); return response(['success' => true]); } }