all(), [ 'assetId' => [ 'required', Rule::exists('App\Models\Asset', 'id')->where(function($query) { return $query->where('moderated', false); }) ] ]); if($validator->fails()) return ValidationHelper::generateValidatorError($validator); $valid = $validator->valid(); $comments = Comment::where('asset_id', $valid['assetId']) ->where('deleted', false) ->orderByDesc('id') ->cursorPaginate(15); $prevCursor = $comments->previousCursor(); $nextCursor = $comments->nextCursor(); $result = [ 'data' => [], 'prev_cursor' => ($prevCursor ? $prevCursor->encode() : null), 'next_cursor' => ($nextCursor ? $nextCursor->encode() : null) ]; foreach($comments as $comment) { // TODO: XlXi: user profile link $poster = [ 'name' => $comment->user->username, 'thumbnail' => 'https://www.gtoria.local/images/testing/headshot.png', 'url' => $comment->user->getProfileUrl() ]; $postDate = $comment['updated_at']; if(Carbon::now()->greaterThan($postDate->copy()->addDays(2))) $postDate = $postDate->isoFormat('lll'); else $postDate = $postDate->calendar(); array_push($result['data'], [ 'commentId' => $comment->id, 'poster' => $poster, 'content' => $comment->content, 'time' => $postDate ]); } return $result; } protected function share(Request $request) { $validator = Validator::make($request->all(), [ 'assetId' => [ 'required', Rule::exists('App\Models\Asset', 'id')->where(function($query) { return $query->where('moderated', false); }) ], 'content' => ['required', 'max:200'] ]); if($validator->fails()) return ValidationHelper::generateValidatorError($validator); $valid = $validator->valid(); $comment = new Comment(); $comment->asset_id = $valid['assetId']; $comment->author_id = Auth::id(); $comment->content = $valid['content']; $comment->save(); return response(['success' => true]); } }