Deploy Ladill Woo Manager / deploy (push) Successful in 47s
Store site names now reference the DemoWorld business identity for the active plan, and order customers use DemoWorld people (name, email, phone) instead of generic "Demo Customer N" placeholders. Staff logins skip the login reseed. Co-authored-by: Cursor <cursoragent@cursor.com>
95 lines
2.6 KiB
PHP
95 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Woo;
|
|
|
|
use App\Models\User;
|
|
use App\Support\DemoWorld;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
/**
|
|
* Reseed Woo Manager demo tenants after a fresh SSO login.
|
|
*
|
|
* Only owner demo accounts trigger a full reseed. Staff training logins
|
|
* share the owner tenant but never wipe mid-demo.
|
|
*/
|
|
class DemoLoginReseeder
|
|
{
|
|
public function maybeResetAfterLogin(User $user): void
|
|
{
|
|
if (! (bool) config('demo_accounts.enabled', false)
|
|
|| ! (bool) config('demo_accounts.reset_on_login', true)) {
|
|
return;
|
|
}
|
|
|
|
if (DemoWorld::isStaffDemoEmail($user->email)) {
|
|
return;
|
|
}
|
|
|
|
$plan = $this->planForEmail($user->email);
|
|
if ($plan === null) {
|
|
return;
|
|
}
|
|
|
|
$seedUser = $this->resolveSeedUser($user);
|
|
if (! $seedUser) {
|
|
return;
|
|
}
|
|
|
|
$lockKey = 'demo-reseed:woo:'.$seedUser->public_id;
|
|
if (! Cache::add($lockKey, 1, 120)) {
|
|
return;
|
|
}
|
|
|
|
$identity = (string) ($seedUser->email ?: $seedUser->public_id);
|
|
|
|
dispatch(function () use ($identity, $plan, $lockKey) {
|
|
try {
|
|
Artisan::call('demo:seed', [
|
|
'identity' => $identity,
|
|
'--plan' => $plan,
|
|
'--reset' => true,
|
|
]);
|
|
} catch (\Throwable $e) {
|
|
Log::warning('demo_woo_login_reseed_failed', [
|
|
'identity' => $identity,
|
|
'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;
|
|
}
|
|
}
|