1
0

big update base struktur tahap 1

This commit is contained in:
Wian Drs
2026-07-27 16:24:09 +07:00
parent 2b3592c4c2
commit 1dd02baa72
169 changed files with 24405 additions and 977 deletions
+197 -43
View File
@@ -1,80 +1,128 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Audit\AuditLogController;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\File\StoredFileController;
use App\Http\Controllers\Material\MaterialController;
use App\Http\Controllers\Menu\MenuController;
use App\Http\Controllers\Menu\MenuGroupController;
use App\Http\Controllers\Menu\MenuListController;
use App\Http\Controllers\Nas\NasResourceController;
use App\Http\Controllers\Profile\ProfileController;
use App\Http\Controllers\Tenant\TenantController;
use App\Http\Controllers\Ticket\TicketController;
use App\Http\Controllers\Ticket\TicketIncidentTypeController;
use App\Http\Controllers\Ticket\TicketTypeController;
use App\Http\Controllers\Ticket\TicketWorkflowController;
use App\Http\Controllers\Ticket\TicketIncidentTypeController;
use App\Http\Controllers\Material\MaterialController;
use App\Http\Controllers\Audit\AuditLogController;
use App\Http\Controllers\User\UserController;
use App\Http\Controllers\Wilayah\WilayahController;
use Illuminate\Support\Facades\Route;
Route::post('/login', [AuthController::class, 'login']);
Route::post('/register', [AuthController::class, 'register']);
Route::post('/register/verify', [AuthController::class, 'verifyRegistration']);
Route::post('/register/resend-code', [AuthController::class, 'resendVerificationCode']);
Route::middleware(['auth:sanctum', 'tenant.context'])->group(function () {
// Route::prefix('tickets')->group(function () {
// Route::get('/', [TicketController::class, 'index']);
// Route::post('/', [TicketController::class, 'store']);
// });
Route::get('/generate-token', function () {
foreach ([
'mikrotiks' => ['resource' => 'mikrotik', 'menu' => 'nas-mikrotik'],
'package-profiles' => ['resource' => 'package-profile', 'menu' => 'nas-package-profiles'],
'olts' => ['resource' => 'olt', 'menu' => 'nas-olt'],
'webfig-devices' => ['resource' => 'webfig', 'menu' => 'nas-webfig'],
] as $path => $nas) {
Route::prefix("nas/{$path}")
->middleware("menu.resource:{$nas['menu']}")
->controller(NasResourceController::class)
->group(function () use ($nas, $path) {
Route::get('/', 'index')
->name("nas.{$path}.index")
->defaults('nas_resource', $nas['resource']);
Route::post('/', 'store')
->name("nas.{$path}.store")
->defaults('nas_resource', $nas['resource']);
Route::get('/{id}', 'show')
->name("nas.{$path}.show")
->whereNumber('id')
->defaults('nas_resource', $nas['resource']);
Route::put('/{id}', 'update')
->name("nas.{$path}.update")
->whereNumber('id')
->defaults('nas_resource', $nas['resource']);
Route::patch('/{id}', 'update')
->name("nas.{$path}.patch")
->whereNumber('id')
->defaults('nas_resource', $nas['resource']);
Route::delete('/{id}', 'destroy')
->name("nas.{$path}.destroy")
->whereNumber('id')
->defaults('nas_resource', $nas['resource']);
});
}
$user = \App\Models\User::find(1);
Route::apiResource('tickets', TicketController::class)
->middleware('menu.resource:ticketing-ticket');
return $user->createToken(
'master-token'
)->plainTextToken;
});
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('tickets', TicketController::class);
Route::apiResource('ticket-types', TicketTypeController::class);
Route::apiResource('ticket-incident-types', TicketIncidentTypeController::class);
Route::apiResource('ticket-types', TicketTypeController::class)
->middleware('menu.resource:ticketing-ticket-types');
Route::apiResource('ticket-incident-types', TicketIncidentTypeController::class)
->middleware('menu.resource:ticketing-ticket-incidents');
Route::prefix('tickets/{ticket}')
->controller(TicketWorkflowController::class)
->group(function () {
Route::get('/workflow', 'history');
Route::get('/workflow', 'history')
->middleware('menu.permission:ticketing-ticket,view');
Route::post('/assign', 'assign');
Route::post('/reassign', 'reassign');
Route::post('/assign', 'assign')
->middleware('menu.permission:ticketing-ticket,update');
Route::post('/reassign', 'reassign')
->middleware('menu.permission:ticketing-ticket,update');
Route::post('/approve', 'approve');
Route::post('/reject', 'reject');
Route::post('/approve', 'approve')
->middleware('menu.permission:ticketing-approval,approve');
Route::post('/reject', 'reject')
->middleware('menu.permission:ticketing-approval,approve');
Route::post('/start', 'start');
Route::post('/start', 'start')
->middleware('menu.permission:ticketing-ticket,update');
Route::post('/pending', 'pending');
Route::post('/resume', 'resume');
Route::post('/pending', 'pending')
->middleware('menu.permission:ticketing-ticket,update');
Route::post('/resume', 'resume')
->middleware('menu.permission:ticketing-ticket,update');
Route::post('/resolve', 'resolve');
Route::post('/resolve', 'resolve')
->middleware('menu.permission:ticketing-ticket,update');
Route::post('/close', 'close');
Route::post('/close', 'close')
->middleware('menu.permission:ticketing-ticket,update');
Route::post('/cancel', 'cancel');
Route::post('/cancel', 'cancel')
->middleware('menu.permission:ticketing-ticket,delete');
Route::post('/escalate', 'escalate');
Route::post('/escalate', 'escalate')
->middleware('menu.permission:ticketing-ticket,update');
});
Route::prefix('materials')
->middleware('menu.resource:ticketing-material')
->controller(MaterialController::class)
->group(function () {
Route::get('/', 'index');
Route::post('/assign', 'assign');
Route::post('/transfer', 'transfer');
Route::post('/return', 'return');
Route::get('/', 'index');
Route::post('/assign', 'assign');
Route::post('/transfer', 'transfer');
Route::post('/return', 'return');
Route::get('/user/{user_id}', 'listByUser');
Route::get('/history/{barcode_id}', 'history');
Route::get('/user/{user_id}', 'listByUser');
Route::get('/history/{barcode_id}', 'history');
});
});
Route::prefix('audit-logs')
->middleware('access.level:tenant_owner')
->controller(AuditLogController::class)
->group(function () {
@@ -83,4 +131,110 @@ Route::middleware('auth:sanctum')->group(function () {
Route::get('/{id}', 'show');
});
Route::prefix('me')
->group(function () {
Route::get('/menus', [MenuController::class, 'myMenus']);
Route::get('/profile', [ProfileController::class, 'show']);
Route::put('/profile', [ProfileController::class, 'update']);
});
Route::prefix('files')->controller(StoredFileController::class)->group(function () {
Route::get('/', 'index');
Route::post('/', 'store');
Route::get('/{storedFile}', 'show');
Route::get('/{storedFile}/temporary-url', 'temporaryUrl');
Route::delete('/{storedFile}', 'destroy');
});
Route::get('wilayah/alamat-lengkap', [WilayahController::class, 'alamatLengkap'])
->name('wilayah.alamat-lengkap');
Route::prefix('wilayah/options')->controller(WilayahController::class)->group(function () {
Route::get('/provinsi', 'provinsiOptions')->name('wilayah.options.provinsi');
Route::get('/kabupaten/{provinsi}', 'kabupatenOptions')->name('wilayah.options.kabupaten');
Route::get('/kecamatan/{kabupaten}', 'kecamatanOptions')->name('wilayah.options.kecamatan');
Route::get('/desa/{kecamatan}', 'desaOptions')->name('wilayah.options.desa');
});
foreach ([
'desa' => 'wilayah-desa',
'kecamatan' => 'wilayah-kecamatan',
'kabupaten' => 'wilayah-kabupaten',
'provinsi' => 'wilayah-provinsi',
] as $tingkat => $menuSlug) {
$readRoutes = [
Route::get("wilayah/{$tingkat}", [WilayahController::class, 'index'])
->name("wilayah.{$tingkat}.index"),
Route::get("wilayah/{$tingkat}/{wilayah}", [WilayahController::class, 'show'])
->name("wilayah.{$tingkat}.show")
->whereNumber('wilayah'),
];
$writeRoutes = [
Route::post("wilayah/{$tingkat}", [WilayahController::class, 'store'])
->name("wilayah.{$tingkat}.store"),
Route::put("wilayah/{$tingkat}/{wilayah}", [WilayahController::class, 'update'])
->name("wilayah.{$tingkat}.update")
->whereNumber('wilayah'),
Route::patch("wilayah/{$tingkat}/{wilayah}", [WilayahController::class, 'update'])
->name("wilayah.{$tingkat}.patch")
->whereNumber('wilayah'),
Route::delete("wilayah/{$tingkat}/{wilayah}", [WilayahController::class, 'destroy'])
->name("wilayah.{$tingkat}.destroy")
->whereNumber('wilayah'),
];
foreach ($readRoutes as $wilayahRoute) {
$wilayahRoute->defaults('tingkat', $tingkat);
}
foreach ($writeRoutes as $wilayahRoute) {
$wilayahRoute->defaults('tingkat', $tingkat)
->middleware("menu.resource:{$menuSlug}");
}
}
Route::apiResource('menus', MenuListController::class)
->parameters(['menus' => 'menu_list'])
->middleware('access.level:master_admin');
Route::apiResource('menu-groups', MenuGroupController::class)
->middleware([
'access.level:tenant_owner',
'menu.resource:users-group-menus',
]);
Route::apiResource('tenants', TenantController::class)
->only(['index', 'show'])
->middleware('access.level:tenant_owner');
Route::apiResource('tenants', TenantController::class)
->except(['index', 'show'])
->middleware('access.level:master_admin');
Route::apiResource('users', UserController::class)
->middleware([
'access.level:tenant_owner',
'menu.resource:users-user',
]);
Route::prefix('menu-groups/{menu_group}')
->middleware([
'access.level:tenant_owner',
'menu.permission:users-group-menus,update',
])
->controller(MenuGroupController::class)
->group(function () {
Route::get('/menus', 'menus');
Route::get('/available-menus', 'availableMenus');
Route::put('/menus', 'syncMenus');
});
Route::prefix('users/{user}')
->middleware([
'access.level:tenant_owner',
'menu.permission:users-group-menus,update',
])
->controller(MenuGroupController::class)
->group(function () {
Route::get('/menu-groups', 'userAssignments');
Route::put('/menu-groups', 'syncUserAssignments');
});
});