Fix legacy RC hosting orders not appearing after app extraction.
Deploy Ladill Hosting / deploy (push) Successful in 23s
Deploy Ladill Hosting / deploy (push) Successful in 23s
Import RC service orders in hosting:import, map platform_id on legacy models, and wire legacy order manage links to hosting.legacy.show. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -11,6 +11,7 @@ use App\Models\HostingNode;
|
|||||||
use App\Models\HostingOrder;
|
use App\Models\HostingOrder;
|
||||||
use App\Models\HostingPlanChange;
|
use App\Models\HostingPlanChange;
|
||||||
use App\Models\HostingProduct;
|
use App\Models\HostingProduct;
|
||||||
|
use App\Models\RcServiceOrder;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -82,6 +83,9 @@ class ImportHostingCommand extends Command
|
|||||||
foreach ($payload['hosting_orders'] ?? [] as $row) {
|
foreach ($payload['hosting_orders'] ?? [] as $row) {
|
||||||
$this->importLegacyOrder($row, $commit);
|
$this->importLegacyOrder($row, $commit);
|
||||||
}
|
}
|
||||||
|
foreach ($payload['rc_service_orders'] ?? [] as $row) {
|
||||||
|
$this->importRcServiceOrder($row, $commit);
|
||||||
|
}
|
||||||
foreach ($payload['hosting_account_members'] ?? [] as $row) {
|
foreach ($payload['hosting_account_members'] ?? [] as $row) {
|
||||||
$this->importMember($row, $commit);
|
$this->importMember($row, $commit);
|
||||||
}
|
}
|
||||||
@@ -224,6 +228,24 @@ class ImportHostingCommand extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @param array<string, mixed> $row */
|
||||||
|
private function importRcServiceOrder(array $row, bool $commit): void
|
||||||
|
{
|
||||||
|
$platformId = (int) ($row['id'] ?? 0);
|
||||||
|
$owner = $this->resolveUser((string) ($row['owner_public_id'] ?? ''));
|
||||||
|
if (! $owner) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($row['id'], $row['owner_public_id'], $row['owner_email']);
|
||||||
|
$row['user_id'] = $owner->id;
|
||||||
|
$row['platform_id'] = $platformId;
|
||||||
|
|
||||||
|
if ($commit) {
|
||||||
|
RcServiceOrder::updateOrCreate(['platform_id' => $platformId], $row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** @param array<string, mixed> $row */
|
/** @param array<string, mixed> $row */
|
||||||
private function importMember(array $row, bool $commit): void
|
private function importMember(array $row, bool $commit): void
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ class HostingController extends Controller
|
|||||||
if ($hostingOrder->rc_order_id && $hosting->isConfigured()) {
|
if ($hostingOrder->rc_order_id && $hosting->isConfigured()) {
|
||||||
$result = $hosting->deleteOrder($hostingOrder->rc_order_id);
|
$result = $hosting->deleteOrder($hostingOrder->rc_order_id);
|
||||||
if (! $result['success']) {
|
if (! $result['success']) {
|
||||||
return redirect()->route('hosting.show', $hostingOrder)
|
return redirect()->route('hosting.legacy.show', $hostingOrder)
|
||||||
->with('error', $result['message'] ?? 'Could not cancel hosting at this time.');
|
->with('error', $result['message'] ?? 'Could not cancel hosting at this time.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ class HostingOrder extends Model
|
|||||||
public const TYPE_RESELLER = 'reseller';
|
public const TYPE_RESELLER = 'reseller';
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
|
'platform_id',
|
||||||
'user_id',
|
'user_id',
|
||||||
'domain_id',
|
'domain_id',
|
||||||
'domain_name',
|
'domain_name',
|
||||||
@@ -40,6 +41,7 @@ class HostingOrder extends Model
|
|||||||
'expires_at',
|
'expires_at',
|
||||||
'provisioned_at',
|
'provisioned_at',
|
||||||
'meta',
|
'meta',
|
||||||
|
'is_legacy_rc',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ class RcServiceOrder extends Model
|
|||||||
public const FULFILLMENT_FAILED = 'failed';
|
public const FULFILLMENT_FAILED = 'failed';
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
|
'platform_id',
|
||||||
'user_id',
|
'user_id',
|
||||||
'category',
|
'category',
|
||||||
'order_type',
|
'order_type',
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
if (Schema::hasTable('rc_service_orders') && ! Schema::hasColumn('rc_service_orders', 'platform_id')) {
|
||||||
|
Schema::table('rc_service_orders', function (Blueprint $table): void {
|
||||||
|
$table->unsignedBigInteger('platform_id')->nullable()->unique()->after('id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
if (Schema::hasTable('rc_service_orders') && Schema::hasColumn('rc_service_orders', 'platform_id')) {
|
||||||
|
Schema::table('rc_service_orders', function (Blueprint $table): void {
|
||||||
|
$table->dropColumn('platform_id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="px-5 py-3 text-gray-500">{{ $order->expires_at?->format('M j, Y') ?? '—' }}</td>
|
<td class="px-5 py-3 text-gray-500">{{ $order->expires_at?->format('M j, Y') ?? '—' }}</td>
|
||||||
<td class="px-5 py-3 text-right">
|
<td class="px-5 py-3 text-right">
|
||||||
<a href="{{ route('hosting.show', $order) }}" class="inline-flex items-center gap-1 rounded-lg border border-gray-200 px-2.5 py-1.5 text-xs font-medium text-gray-700 transition hover:bg-gray-50">
|
<a href="{{ route('hosting.legacy.show', $order) }}" class="inline-flex items-center gap-1 rounded-lg border border-gray-200 px-2.5 py-1.5 text-xs font-medium text-gray-700 transition hover:bg-gray-50">
|
||||||
Manage
|
Manage
|
||||||
<svg class="h-3 w-3" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
|
<svg class="h-3 w-3" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5"/>
|
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user