From f4145088e1c290a20b6e34822f77eb7f4b3d5142 Mon Sep 17 00:00:00 2001 From: pbao9 Date: Fri, 17 Apr 2026 14:43:17 +0700 Subject: [PATCH] feat: Enhance ServiceClientResource and InvoiceRepository with additional data fields; remove unused SVG icons --- .../Client/Service/ServiceClientResource.php | 23 +++++++++++++++---- .../Api/Invoice/InvoiceRepository.php | 4 +++- .../ServiceClient/ServiceClientRepository.php | 2 +- public/uploads/images/icon-centos.svg | 14 ----------- public/uploads/images/icon-ubuntu.svg | 4 ---- public/uploads/images/icon-windows.svg | 3 --- 6 files changed, 22 insertions(+), 28 deletions(-) delete mode 100644 public/uploads/images/icon-centos.svg delete mode 100644 public/uploads/images/icon-ubuntu.svg delete mode 100644 public/uploads/images/icon-windows.svg diff --git a/app/Http/Resources/Api/Client/Service/ServiceClientResource.php b/app/Http/Resources/Api/Client/Service/ServiceClientResource.php index f9d2a43..a082e31 100644 --- a/app/Http/Resources/Api/Client/Service/ServiceClientResource.php +++ b/app/Http/Resources/Api/Client/Service/ServiceClientResource.php @@ -18,13 +18,26 @@ class ServiceClientResource extends JsonResource return []; } + $orderItem = $this->orderItem; + $product = $orderItem?->product; + return [ - 'uuid' => $this->uuid, + 'uuid' => $this->uuid, 'server_name' => $this->server_name, - 'status' => $this->status, - 'auto_renew' => $this->auto_renew, - 'started_at' => $this->started_at?->toISOString(), - 'expires_at' => $this->expires_at?->toISOString(), + 'status' => $this->status, + 'auto_renew' => $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, + ], + 'specs' => $product ? [ + 'cpu' => (int) ($product->cpu ?? 0), + 'ram' => (int) ($product->ram ?? 0), + 'disk' => (int) ($product->disk ?? 0), + 'bandwidth' => (int) ($product->bandwidth ?? 0), + ] : null, ]; } } diff --git a/app/Repositories/Api/Invoice/InvoiceRepository.php b/app/Repositories/Api/Invoice/InvoiceRepository.php index d8cca1b..f5a9615 100644 --- a/app/Repositories/Api/Invoice/InvoiceRepository.php +++ b/app/Repositories/Api/Invoice/InvoiceRepository.php @@ -35,6 +35,8 @@ class InvoiceRepository extends BaseApiRepository implements InvoiceRepositoryIn public function createFromOrder(Order $order): Invoice { + $maxMonths = $order->orderItems->max(fn($item) => $this->cycleToMonths($item->billing_cycle)) ?? 1; + $invoice = $this->model->create([ 'invoice_number' => OrderHelper::generateOrderNumber('INV'), 'customer_id' => $order->customer_id, @@ -45,7 +47,7 @@ class InvoiceRepository extends BaseApiRepository implements InvoiceRepositoryIn 'tax' => 0, 'total' => $order->total, 'status' => InvoiceStatus::UNPAID->value, - 'due_date' => now()->addDays(3)->toDateString(), + 'due_date' => now()->addMonths($maxMonths)->toDateString(), ]); // Create one invoice_item per order_item line diff --git a/app/Repositories/Api/ServiceClient/ServiceClientRepository.php b/app/Repositories/Api/ServiceClient/ServiceClientRepository.php index 73bc0ed..e28c1cc 100644 --- a/app/Repositories/Api/ServiceClient/ServiceClientRepository.php +++ b/app/Repositories/Api/ServiceClient/ServiceClientRepository.php @@ -18,7 +18,7 @@ class ServiceClientRepository extends BaseApiRepository implements ServiceClient public function getActiveServices(int $limit = 10) { return $this->model - ->with(['orderItem' => fn($q) => $q->with('product')]) + ->with(['orderItem' => fn($q) => $q->with(['product', 'os.osGroup'])]) ->orderByRaw("FIELD(status, 'active', 'pending', 'suspended', 'expired', 'cancelled', 'terminated')") ->orderBy('started_at', 'desc') ->paginate($limit); diff --git a/public/uploads/images/icon-centos.svg b/public/uploads/images/icon-centos.svg deleted file mode 100644 index c1897d8..0000000 --- a/public/uploads/images/icon-centos.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/public/uploads/images/icon-ubuntu.svg b/public/uploads/images/icon-ubuntu.svg deleted file mode 100644 index 02e8546..0000000 --- a/public/uploads/images/icon-ubuntu.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/public/uploads/images/icon-windows.svg b/public/uploads/images/icon-windows.svg deleted file mode 100644 index fb53a50..0000000 --- a/public/uploads/images/icon-windows.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -