invitations()->create([ 'email' => $request->validated('email'), 'role' => TeamRole::from($request->validated('role')), 'invited_by' => $request->user()->id, 'expires_at' => now()->addDays(3), ]); Notification::route('mail', $invitation->email) ->notify(new TeamInvitationNotification($invitation)); return to_route('teams.edit', ['team' => $team->slug]); } /** * Cancel the specified invitation. */ public function destroy(Team $team, TeamInvitation $invitation): RedirectResponse { abort_unless($invitation->team_id === $team->id, 404); Gate::authorize('cancelInvitation', $team); $invitation->delete(); return to_route('teams.edit', ['team' => $team->slug]); } /** * Accept the invitation. */ public function accept(AcceptTeamInvitationRequest $request, TeamInvitation $invitation): RedirectResponse { $user = $request->user(); DB::transaction(function () use ($user, $invitation) { $team = $invitation->team; $membership = $team->memberships()->firstOrCreate( ['user_id' => $user->id], ['role' => $invitation->role], ); $wasRecentlyCreated = $membership->wasRecentlyCreated; $invitation->update(['accepted_at' => now()]); $user->switchTeam($team); }); return to_route('dashboard'); } }