email)) { return; } $plan = $this->planForEmail($user->email); if ($plan === null) { return; } $seedUser = $this->resolveSeedUser($user); if (! $seedUser) { return; } $lockKey = 'demo-reseed:care:'.$seedUser->public_id; if (! Cache::add($lockKey, 1, 120)) { return; } $userId = $seedUser->id; dispatch(function () use ($userId, $plan, $lockKey) { try { $user = User::query()->find($userId); if ($user) { app(DemoTenantSeeder::class)->seed($user, $plan, reset: true); } } catch (\Throwable $e) { Log::warning('demo_care_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; } }