feat: nạp tiền thủ công mã 30 phút, gia hạn trừ số dư, đồng bộ domain từ Plesk
- Nạp tiền: mã thanh toán sống 30 phút (ManualDepositDraft), khôi phục/huỷ mã, lệnh dọn mã hết hạn; total_pending chỉ tính giao dịch đã nộp chứng từ, admin duyệt/từ chối/xoá giao dịch - Gia hạn dịch vụ: phát hành invoice gia hạn trên order gốc và trừ số dư ngay - Đồng bộ domain từ Plesk theo server, ServiceOrderRecorder tạo order/invoice cho dịch vụ admin dựng - Danh sách dịch vụ trả field theo loại (service_plan, dns_records_count), đếm dịch vụ theo loại Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
10af41c5cf
commit
c5115b52dd
@@ -2,17 +2,13 @@
|
||||
|
||||
namespace App\Http\Resources\Api\Service;
|
||||
|
||||
use App\Models\Product;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class VpsServiceResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function resolveSpecs($product): ?array
|
||||
private function resolveSpecs(?Product $product): ?array
|
||||
{
|
||||
$addons = $this->addons ?? collect();
|
||||
if ($addons->isNotEmpty()) {
|
||||
@@ -37,22 +33,19 @@ class VpsServiceResource extends JsonResource
|
||||
$invoice = $this->invoice;
|
||||
$order = $orderItem?->order ?? $invoice?->order;
|
||||
$product = $orderItem?->product ?? $this->product;
|
||||
$type = $this->type ?? $product?->product_type;
|
||||
|
||||
return [
|
||||
'uuid' => $this->uuid,
|
||||
'type' => $type,
|
||||
'server_name' => $this->server_name,
|
||||
'invoice_num' => $invoice?->invoice_number,
|
||||
'order_item_id' => $this->order_item_id,
|
||||
'order_num' => $order?->order_num,
|
||||
'status' => $this->status,
|
||||
'status_label' => $this->status_label,
|
||||
'auto_renew' => (bool) $this->auto_renew,
|
||||
'started_at' => $this->started_at?->toISOString(),
|
||||
'expires_at' => $this->expires_at?->toISOString(),
|
||||
'os' => [
|
||||
'version' => $orderItem?->os?->version,
|
||||
'group' => $orderItem?->os?->osGroup?->name,
|
||||
],
|
||||
'product' => $product ? [
|
||||
'uuid' => $product->uuid,
|
||||
'name' => $product->name,
|
||||
@@ -60,7 +53,19 @@ class VpsServiceResource extends JsonResource
|
||||
'product_type' => $product->product_type,
|
||||
'page_type' => 'service_' . str_replace(' ', '_', $product->product_type),
|
||||
] : null,
|
||||
'specs' => $this->resolveSpecs($product),
|
||||
$this->mergeWhen($type === 'vps', fn () => [
|
||||
'os' => [
|
||||
'version' => $orderItem?->os?->version,
|
||||
'group' => $orderItem?->os?->osGroup?->name,
|
||||
],
|
||||
'specs' => $this->resolveSpecs($product),
|
||||
]),
|
||||
$this->mergeWhen($type === 'hosting', fn () => [
|
||||
'service_plan' => $product?->servicePlan?->summary(),
|
||||
]),
|
||||
$this->mergeWhen($type === 'domain', fn () => [
|
||||
'dns_records_count' => $this->dns_records_count,
|
||||
]),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user