authenticatedUser($request); abort_unless( $this->permissionService->allows($user, Permission::ProjectWrite, $project), 403, ); $ticketLink = $this->storeProjectTicketLink->handle($project, $ticket, $user, $request->validated()); $ticketLink->setAttribute('current_ticket_id', $ticket->id); return TicketLinkResource::make($ticketLink->load(['sourceTicket', 'targetTicket', 'ticketLinkType'])) ->additional([ 'meta' => [ 'message' => "{$ticketLink->ticketLinkType->label} link was saved.", ], ]) ->response() ->setStatusCode(201); } public function destroy( Request $request, Project $project, Ticket $ticket, TicketLink $ticketLink, ): JsonResponse { $user = $this->authenticatedUser($request); abort_unless( $this->permissionService->allows($user, Permission::ProjectWrite, $project), 403, ); $this->deleteProjectTicketLink->handle($ticket, $ticketLink, $user); return response()->json(null, 204); } }