feat: Implement new admin API endpoints for product, customer, vCenter, and authentication, and add vCenter resource management UI.

This commit is contained in:
pbao9
2026-03-05 14:30:31 +07:00
parent 68540009c0
commit cca4e0b86f
47 changed files with 3538 additions and 1086 deletions
+17
View File
@@ -14,6 +14,7 @@ use App\Http\Controllers\admin\ModuleDNSController;
use App\Http\Controllers\admin\ModuleHostingController;
use App\Http\Controllers\admin\ModuleIPPoolController;
use App\Http\Controllers\admin\ModulevCenterController;
use App\Http\Controllers\admin\VCenterManagerController;
use App\Http\Controllers\admin\OrderController;
use App\Http\Controllers\admin\package\Datacenter;
use App\Http\Controllers\admin\package\Datastore;
@@ -227,6 +228,22 @@ Route::prefix('')->group(function () {
Route::delete('remove-server-ip-pool/{id}', 'destroy')->name('module.ippool.destroy');
});
// vCenter Manager — Unified tree view
Route::controller(VCenterManagerController::class)->prefix('vcenter-manager')->group(function () {
Route::get('/', 'index')->name('vcenter.manager');
Route::get('tree/children', 'treeChildren')->name('vcenter.manager.tree.children');
Route::get('tree/detail', 'nodeDetail')->name('vcenter.manager.tree.detail');
Route::get('vms/datatable', 'vmDatatable')->name('vcenter.manager.vm.datatable');
// Wizard API
Route::get('wizard/vcenters', 'wizardVcenters')->name('vcenter.manager.wizard.vcenters');
Route::post('wizard/vcenter', 'wizardStoreVcenter')->name('vcenter.manager.wizard.vcenter.store');
Route::get('wizard/datacenters', 'wizardDatacenters')->name('vcenter.manager.wizard.datacenters');
Route::get('wizard/hosts', 'wizardHosts')->name('vcenter.manager.wizard.hosts');
Route::get('wizard/datastore-network', 'wizardDatastoreNetwork')->name('vcenter.manager.wizard.datastore-network');
Route::post('wizard/save', 'wizardSave')->name('vcenter.manager.wizard.save');
});
//Module vCenter Server
Route::controller(ModulevCenterController::class)->prefix('vcenter')->group(function () {
Route::get('list-all-vcenter', 'index')->name('module.vcenter.index');
+45 -30
View File
@@ -1,39 +1,17 @@
<?php
use App\Http\Controllers\Api\Client\ClientController;
use App\Http\Controllers\rest\ModuleController;
use App\Http\Controllers\Api\Admin\Auth\AuthController;
use App\Http\Controllers\Api\Admin\Customer\CustomerController;
use App\Http\Controllers\Api\Admin\Invoice\InvoiceController;
use App\Http\Controllers\Api\Admin\Order\OrderController;
use App\Http\Controllers\Api\Admin\Product\ProductController;
use App\Http\Controllers\Api\Admin\VCenter\VCenterController;
use App\Http\Services\Media;
use App\Http\Services\vCenter as ServiceVCenter;
use App\Jobs\Hosting\CreateHostingJobs;
use App\Jobs\VirtualMachine\Create\CreateVMJobs;
use App\Jobs\VirtualMachine\Upgrade\UpgradeVirtualMachine;
use App\Models\Addon;
use App\Models\Customer;
use App\Models\File;
use App\Models\Hosting;
use App\Models\Invoice;
use App\Models\InvoiceItem;
use App\Models\ModuleDatacenter;
use App\Models\ModuleHost;
use App\Models\ModuleHosting;
use App\Models\ModuleHostingServer;
use App\Models\ModuleIpAddress;
use App\Models\ModuleSnapshot;
use App\Models\ModuleVmware;
use App\Models\Os;
use App\Models\OsGroup;
use App\Models\Type;
use App\Models\vCenter;
use App\Models\VPS;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
/*
|--------------------------------------------------------------------------
@@ -49,8 +27,44 @@ use Illuminate\Support\Str;
Route::prefix('v1')
/* Api for Admin */
->group(function () {
Route::prefix('administrator')->group(function () {
Route::post('login', [AuthController::class, 'login']);
Route::middleware('api.auth:admins-api')->group(function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::post('refresh', [AuthController::class, 'refresh']);
Route::get('me', [AuthController::class, 'me']);
// Customers
Route::prefix('customers')->group(function () {
Route::get('/', [CustomerController::class, 'index']);
});
// Products
Route::prefix('products')->group(function () {
Route::get('/', [ProductController::class, 'index']);
Route::get('{id}', [ProductController::class, 'show']);
});
// Orders
Route::prefix('orders')->group(function () {
Route::get('/', [OrderController::class, 'index']);
});
// Invoices
Route::prefix('invoices')->group(function () {
Route::get('/', [InvoiceController::class, 'index']);
});
// vCenter
Route::prefix('vcenter')->group(function () {
Route::get('tree', [VCenterController::class, 'tree']);
});
});
});
Route::prefix('system')->middleware(['api.auth'])->group(function () {
Route::post('get-all-image', function (Media $media) {
$files = $media->getAllMedia();
$data = view('administrator.pages.component.media')->with('media', $files)->render();
@@ -123,6 +137,7 @@ Route::prefix('v1')
})->name('api.GetConsoleTicket');
});
});
Route::any('{any}', function () {
return response()->json([
'error' => true,