where('type', 'endcustomer')->first(); if (!$freePackage) { $this->error('Free package not found. Run seeder first.'); return 1; } $resellerPackage = Package::where('name', 'Reseller S')->where('type', 'reseller')->first(); if (!$resellerPackage) { $this->error('Reseller package not found. Run seeder first.'); return 1; } // Migrate tenants with credits to tenant_packages (reseller free) $tenants = Tenant::where('event_credits_balance', '>', 0)->get(); foreach ($tenants as $tenant) { $initialEvents = floor($tenant->event_credits_balance / 100); // Arbitrary conversion TenantPackage::create([ 'tenant_id' => $tenant->id, 'package_id' => $resellerPackage->id, 'price' => 0, 'purchased_at' => now(), 'expires_at' => now()->addYear(), 'used_events' => 0, 'active' => true, ]); PackagePurchase::create([ 'tenant_id' => $tenant->id, 'package_id' => $resellerPackage->id, 'type' => 'reseller_subscription', 'provider_id' => 'migration', 'price' => 0, 'metadata' => ['migrated_credits' => $tenant->event_credits_balance], ]); $this->info("Migrated tenant {$tenant->name} with {$tenant->event_credits_balance} credits to Reseller S package."); } // Migrate events to event_packages (free) $events = Event::all(); foreach ($events as $event) { EventPackage::create([ 'event_id' => $event->id, 'package_id' => $freePackage->id, 'price' => 0, 'purchased_at' => $event->created_at, 'used_photos' => 0, ]); PackagePurchase::create([ 'tenant_id' => $event->tenant_id, 'event_id' => $event->id, 'package_id' => $freePackage->id, 'type' => 'endcustomer', 'provider_id' => 'migration', 'price' => 0, 'metadata' => ['migrated_from_credits' => true], ]); $this->info("Migrated event {$event->name} to Free package."); } // Clear old credits data (assume drop migration already run) Tenant::where('event_credits_balance', '>', 0)->update(['event_credits_balance' => 0]); $this->info('Migration completed successfully.'); }); return 0; } }