feat: moderation

This commit is contained in:
2026-05-22 11:56:17 +02:00
parent f5b460c650
commit 1c472e46db
43 changed files with 1836 additions and 3 deletions
@@ -137,6 +137,8 @@ class MealPostController extends Controller
public function show(Request $request, MealPosts $mealPost): MealPostsResource
{
$this->abortIfUnavailable($mealPost);
return new MealPostsResource($this->loadMealPostForResponse($mealPost, $request));
}
@@ -171,6 +173,8 @@ class MealPostController extends Controller
public function like(Request $request, MealPosts $mealPost): MealPostsResource
{
$this->abortIfUnavailable($mealPost);
$mealPost->likedByUsers()->syncWithoutDetaching([$request->user()->getKey()]);
return new MealPostsResource($this->loadMealPostForResponse($mealPost, $request));
@@ -178,6 +182,8 @@ class MealPostController extends Controller
public function unlike(Request $request, MealPosts $mealPost): MealPostsResource
{
$this->abortIfUnavailable($mealPost);
$mealPost->likedByUsers()->detach($request->user()->getKey());
return new MealPostsResource($this->loadMealPostForResponse($mealPost, $request));
@@ -198,6 +204,14 @@ class MealPostController extends Controller
abort_unless($mealPost->user_id === $request->user()->getKey(), 404);
}
private function abortIfUnavailable(MealPosts $mealPost): void
{
abort_if(
$mealPost->isHidden() || $mealPost->user()->whereNotNull('suspended_at')->exists(),
404,
);
}
private function loadMealPostForResponse(MealPosts $mealPost, Request $request): MealPosts
{
return $mealPost
@@ -207,6 +221,8 @@ class MealPostController extends Controller
private function mealPostListQuery(Request $request): Builder
{
return MealPosts::query()
->whereNull('hidden_at')
->whereHas('user', fn (Builder $query): Builder => $query->whereNull('suspended_at'))
->with('user:id,name,avatar_url,account_verified_at');
}