firstOrFail(); $this->authorize('view', $workspace); $links = $workspace->links()->latest()->paginate(50); return LinkResource::collection($links); } public function store(Request $request, string $workspaceUlid, CreateLink $action): \Illuminate\Http\JsonResponse { $workspace = Workspace::where('ulid', $workspaceUlid)->firstOrFail(); $this->authorize('update', $workspace); $validated = $request->validate([ 'target_url' => 'required|url:http,https|max:2048', 'slug' => 'nullable|string|max:64|alpha_dash', 'title' => 'nullable|string|max:255', 'tags' => 'nullable|array', 'tags.*' => 'string|max:64', ]); $link = $action->handle($workspace, $request->user(), $validated); return (new LinkResource($link)) ->response() ->setStatusCode(201); } public function destroy(Request $request, string $workspaceUlid, string $linkUlid, DeleteLink $action): \Illuminate\Http\Response { $workspace = Workspace::where('ulid', $workspaceUlid)->firstOrFail(); $this->authorize('update', $workspace); $link = Link::where('ulid', $linkUlid) ->where('workspace_id', $workspace->id) ->firstOrFail(); $action->handle($link); return response()->noContent(); } }