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
@@ -0,0 +1,48 @@
<?php
namespace App\Http\Controllers;
use App\Actions\BlockUser;
use App\Http\Resources\BlockedUserResource;
use App\Models\User;
use App\Models\UserBlock;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Illuminate\Http\Response;
class UserBlockController extends Controller
{
public function index(Request $request): AnonymousResourceCollection
{
$perPage = max(1, min($request->integer('per_page', 15), 100));
$blockedUsers = $request->user()
->blockedUsers()
->orderByPivotDesc('created_at')
->paginate($perPage)
->withQueryString();
return BlockedUserResource::collection($blockedUsers);
}
public function store(Request $request, User $user, BlockUser $blockUser): JsonResponse
{
abort_if($request->user()->is($user), 422, __('api.blocks.cannot_block_self'));
$blockUser->execute($request->user(), $user);
return response()->json([
'message' => __('api.blocks.blocked'),
]);
}
public function destroy(Request $request, User $user): Response
{
UserBlock::query()
->where('blocker_id', $request->user()->getKey())
->where('blocked_id', $user->getKey())
->delete();
return response()->noContent();
}
}