93 lines
3.4 KiB
PHP
93 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
use App\Models\Tenant;
|
|
use App\Models\Event;
|
|
use App\Models\Package;
|
|
use App\Models\TenantPackage;
|
|
use App\Models\EventPackage;
|
|
use App\Models\PackagePurchase;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class MigrateToPackages extends Command
|
|
{
|
|
protected $signature = 'packages:migrate';
|
|
protected $description = 'Migrate existing credits data to packages';
|
|
|
|
public function handle()
|
|
{
|
|
DB::transaction(function () {
|
|
// Find Free package for endcustomer
|
|
$freePackage = Package::where('name', 'Free / Test')->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;
|
|
}
|
|
} |