email)) { return; } $plan = $this->planForEmail($user->email); if ($plan === null) { return; } $seedUser = $this->resolveSeedUser($user); if (! $seedUser) { return; } $lockKey = 'demo-reseed:queue:'.$seedUser->public_id; if (! Cache::add($lockKey, 1, 120)) { try { app(DemoSeeder::class)->ensureOnboardedShell($seedUser, $plan); } catch (\Throwable $e) { Log::warning('demo_queue_login_shell_failed', [ 'user_id' => $seedUser->id, 'plan' => $plan, 'error' => $e->getMessage(), ]); } return; } try { app(DemoSeeder::class)->ensureOnboardedShell($seedUser, $plan); } catch (\Throwable $e) { Cache::forget($lockKey); Log::warning('demo_queue_login_shell_failed', [ 'user_id' => $seedUser->id, 'plan' => $plan, 'error' => $e->getMessage(), ]); return; } $identity = (string) ($seedUser->email ?: $seedUser->public_id); $userId = $seedUser->id; dispatch(function () use ($identity, $plan, $lockKey, $userId) { try { if (User::query()->find($userId)) { app(DemoSeeder::class)->seed($identity, $plan, true); } } catch (\Throwable $e) { Log::warning('demo_queue_login_reseed_failed', [ 'user_id' => $userId, 'plan' => $plan, 'error' => $e->getMessage(), ]); } finally { Cache::forget($lockKey); } })->afterResponse(); } private function planForEmail(?string $email): ?string { $email = strtolower(trim((string) $email)); if ($email === '') { return null; } $accounts = (array) config('demo_accounts.accounts', []); if (isset($accounts[$email])) { return $accounts[$email]; } $members = (array) config('demo_accounts.member_emails', []); $ownerEmail = $members[$email] ?? null; return $ownerEmail ? ($accounts[$ownerEmail] ?? null) : null; } private function resolveSeedUser(User $user): ?User { $email = strtolower((string) $user->email); $ownerEmail = ((array) config('demo_accounts.member_emails', []))[$email] ?? null; if (! $ownerEmail) { return $user; } return User::query()->where('email', $ownerEmail)->first() ?? $user; } }