whereBelongsTo($organization, 'organization') ->whereRelation('user', 'email', '=', $email) ->where('role', '!=', Role::Placeholder->value) ->exists()) { throw new UserIsAlreadyMemberOfOrganizationApiException; } if (OrganizationInvitation::query() ->where('email', $email) ->whereBelongsTo($organization, 'organization') ->exists()) { throw new InvitationForTheEmailAlreadyExistsApiException; } InvitingTeamMember::dispatch($organization, $email, $role->value); $invitation = new OrganizationInvitation; $invitation->email = $email; $invitation->role = $role->value; $invitation->organization()->associate($organization); $invitation->save(); Mail::to($email)->queue(new OrganizationInvitationMail($invitation)); return $invitation; } }