feat: add reciprocal user blocking
CI / 🧪 Tests Laravel (push) Successful in 2m6s
CI / 🐳 Build & Push Image (push) Successful in 39s

This commit is contained in:
2026-08-11 15:58:31 +02:00
parent 6b757c37be
commit cef3e29ddc
15 changed files with 420 additions and 17 deletions
+17 -6
View File
@@ -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');
}