Files
baodev0andClaude Sonnet 5.5 55a834a2f8 feat: nhắc gia hạn QR theo dịch vụ, failover server hosting, CCCD admin, log cấp phát dịch vụ
- Mail campaign: mẫu nhắc gia hạn thanh toán QR, chọn dịch vụ + chu kỳ từng dòng (renewal_services)
- Hosting: nhiều server Plesk cho một gói (service_plan_servers), chuyển server khi server chết
- Admin xem/sửa giấy tờ định danh khách, tuỳ chọn gia hạn cho khách, nhật ký cấp phát dịch vụ
- Đánh dấu mẫu email dịch vụ là non-marketing

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-30 18:36:41 +07:00

35 lines
1.2 KiB
PHP

<?php
use App\Http\Controllers\Api\Admin\Customer\CustomerIdentityController;
use App\Http\Controllers\Api\Admin\Ticket\TicketController as AdminTicketController;
use App\Http\Controllers\Api\Admin\Transaction\AdminTransactionController;
use App\Support\CustomerIdentity;
use Illuminate\Support\Facades\Route;
Route::prefix('v1/administrator/transactions')
->as('admin.transactions.')
->middleware('signed')
->group(function () {
Route::get('{transaction:uuid}/proof-image/{index?}', [AdminTransactionController::class, 'proofImage'])
->whereNumber('index')
->name('proof-image');
});
Route::prefix('v1/administrator/tickets')
->as('admin.tickets.')
->middleware('signed')
->group(function () {
Route::get('{ticket}/images/{index}', [AdminTicketController::class, 'image'])
->whereNumber('index')
->name('image');
});
Route::prefix('v1/administrator/customers')
->as('admin.customers.')
->middleware('signed')
->group(function () {
Route::get('{customer:uuid}/identity-image/{side}', [CustomerIdentityController::class, 'image'])
->whereIn('side', array_keys(CustomerIdentity::SIDES))
->name('identity-image');
});