invitationService->invite( $organisation, $request->validated('email'), $request->validated('role'), $request->user(), ); return $this->created( new InvitationResource($invitation->load(['organisation', 'invitedBy'])), 'Uitnodiging verstuurd', ); } public function show(string $token): JsonResponse { $invitation = UserInvitation::where('token', $token) ->with(['organisation', 'invitedBy']) ->first(); if (! $invitation) { return $this->notFound('Uitnodiging niet gevonden'); } return $this->success(new InvitationResource($invitation)); } public function accept(AcceptInvitationRequest $request, string $token): JsonResponse { $invitation = UserInvitation::where('token', $token)->firstOrFail(); $user = $this->invitationService->accept( $invitation, $request->validated('password'), ); $sanctumToken = $user->createToken('auth-token')->plainTextToken; return $this->success([ 'user' => [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, ], 'token' => $sanctumToken, ], 'Uitnodiging geaccepteerd'); } public function revoke(Organisation $organisation, UserInvitation $invitation): JsonResponse { Gate::authorize('invite', $organisation); if (! $invitation->isPending()) { return $this->error('Alleen openstaande uitnodigingen kunnen worden ingetrokken.', 422); } $invitation->markAsExpired(); return response()->json(null, 204); } }