feat: add reciprocal user blocking
This commit is contained in:
@@ -137,7 +137,7 @@ class MealPostController extends Controller
|
||||
|
||||
public function show(Request $request, MealPosts $mealPost): MealPostsResource
|
||||
{
|
||||
$this->abortIfUnavailable($mealPost);
|
||||
$this->abortIfUnavailable($request, $mealPost);
|
||||
|
||||
return new MealPostsResource($this->loadMealPostForResponse($mealPost, $request));
|
||||
}
|
||||
@@ -173,7 +173,7 @@ class MealPostController extends Controller
|
||||
|
||||
public function like(Request $request, MealPosts $mealPost): MealPostsResource
|
||||
{
|
||||
$this->abortIfUnavailable($mealPost);
|
||||
$this->abortIfUnavailable($request, $mealPost);
|
||||
|
||||
$mealPost->likedByUsers()->syncWithoutDetaching([$request->user()->getKey()]);
|
||||
|
||||
@@ -182,7 +182,7 @@ class MealPostController extends Controller
|
||||
|
||||
public function unlike(Request $request, MealPosts $mealPost): MealPostsResource
|
||||
{
|
||||
$this->abortIfUnavailable($mealPost);
|
||||
$this->abortIfUnavailable($request, $mealPost);
|
||||
|
||||
$mealPost->likedByUsers()->detach($request->user()->getKey());
|
||||
|
||||
@@ -204,10 +204,16 @@ class MealPostController extends Controller
|
||||
abort_unless($mealPost->user_id === $request->user()->getKey(), 404);
|
||||
}
|
||||
|
||||
private function abortIfUnavailable(MealPosts $mealPost): void
|
||||
private function abortIfUnavailable(Request $request, MealPosts $mealPost): void
|
||||
{
|
||||
$mealPost->loadMissing('user');
|
||||
$owner = $mealPost->user;
|
||||
|
||||
abort_if(
|
||||
$mealPost->isHidden() || $mealPost->user()->whereNotNull('suspended_at')->exists(),
|
||||
$mealPost->isHidden()
|
||||
|| $owner === null
|
||||
|| $owner->isSuspended()
|
||||
|| $request->user()?->hasBlockingRelationshipWith($owner),
|
||||
404,
|
||||
);
|
||||
}
|
||||
@@ -222,7 +228,12 @@ class MealPostController extends Controller
|
||||
{
|
||||
return MealPosts::query()
|
||||
->whereNull('hidden_at')
|
||||
->whereHas('user', fn (Builder $query): Builder => $query->whereNull('suspended_at'))
|
||||
->whereHas(
|
||||
'user',
|
||||
fn (Builder $query): Builder => $query
|
||||
->whereNull('suspended_at')
|
||||
->withoutBlockingRelationshipWith($request->user())
|
||||
)
|
||||
->with('user:id,name,avatar_url,account_verified_at');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user