where('codigo', $tenantCode)->firstOrFail(); $user = User::query()->findOrFail($userId); $this->mailService ->forTenant($tenantCode) ->send( $user->email, "Bienvenido a {$tenant->nombre}", view('mail.notifications.welcome', compact('tenant', 'user'))->render(), ); } public function sendPurchasePaid(int $purchaseId): void { $purchase = Purchase::query() ->with(['tenant', 'user', 'items']) ->findOrFail($purchaseId); $this->mailService ->forTenant($purchase->tenant_codigo) ->send( $this->recipientFor($purchase), "Pago confirmado - Compra #{$purchase->getKey()}", view('mail.notifications.purchase-paid', compact('purchase'))->render(), ); } /** @param array $ticketIds */ public function sendTicketsAvailable(int $purchaseId, array $ticketIds): void { $purchase = Purchase::query()->with(['tenant', 'user'])->findOrFail($purchaseId); /** @var Collection $tickets */ $tickets = Ticket::query() ->where('tenant_code', $purchase->tenant_codigo) ->where('user_id', $purchase->user_id) ->whereKey($ticketIds) ->get(); if ($tickets->isEmpty()) { return; } $this->mailService ->forTenant($purchase->tenant_codigo) ->send( $this->recipientFor($purchase), 'Tus tickets ya están disponibles', view('mail.notifications.tickets-available', compact('purchase', 'tickets'))->render(), ); } private function recipientFor(Purchase $purchase): string { return (string) ($purchase->email ?: $purchase->user?->email); } }