Files
fotospiel-app/app/Console/Commands/MigrateToPackages.php

93 lines
3.5 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',
'purchased_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,
'purchased_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_event',
'provider_id' => 'migration',
'purchased_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;
}
}