withRouting( web: __DIR__ . '/../routes/web.php', api: __DIR__ . '/../routes/api.php', commands: __DIR__ . '/../routes/console.php', health: '/up', then: function () { Route::prefix('public/api') ->middleware('apipub') ->group(base_path('routes/apipub.php')); }, ) ->withMiddleware(function (Middleware $middleware) { // '*' trusts all proxies, required for correct IP/HTTPS detection behind AWS ALB/Vapor $middleware->trustProxies(at: '*'); $middleware->web(append: [ \App\Http\Middleware\LogRequestPathMiddleware::class, ]); $middleware->api(append: [ \App\Http\Middleware\LogRequestPathMiddleware::class, ]); $middleware->api(prepend: [ 'throttle:300,1', ]); $middleware->validateCsrfTokens(except: [ 'move-order/api/move', ]); $middleware->alias([ 'valid.token' => \App\Http\Middleware\ValidateToken::class, 'token.check' => \App\Http\Middleware\TokenCheckerMiddleware::class, 'auth.check' => \App\Http\Middleware\CheckAuthorizationMiddleware::class, 'storage.invoice.check.byorder' => \App\Http\Middleware\CheckForStorageInvoiceByOrderId::class, 'storage.invoice.check.bytransaction' => \App\Http\Middleware\CheckForStorageInvoiceByTransactionId::class, 'storage.invoice.check.bytransactions' => \App\Http\Middleware\CheckForStorageInvoiceByTransactions::class, 'storage.invoice.check.bygroup' => \App\Http\Middleware\CheckForStorageInvoiceByGroup::class, 'storage.invoice.check.bypackinglists' => \App\Http\Middleware\CheckForStorageInvoiceByPackingLists::class, 'admin' => \App\Http\Middleware\EnsureUserIsAdmin::class, ]); $middleware->appendToGroup('apipub', [ \Illuminate\Routing\Middleware\SubstituteBindings::class, \App\Http\Middleware\LogRequestPathMiddleware::class, ]); }) ->withExceptions(function (Exceptions $exceptions) { $exceptions->render(function (AuthenticationException $e, $request) { if ($request->expectsJson()) { return (new ApiResponseObject('Authentication', 'To keep your account secure, we need to re-validate it.', HttpStatus::ACCESS_UNAUTHORISED))->handler(); } }); // Don't flash these inputs $exceptions->dontFlash([ 'password', 'password_confirmation', ]); // $exceptions->render(function (MaintenanceModeException $e, $request) { // return response()->view('pages.errors.maintenance'); // }); }) ->withCommands([ __DIR__ . '/../app/Console/Commands', __DIR__ . '/../app/Console/Commands/V2', ]) ->withSchedule(function (Schedule $schedule) { //Commands Version 2: Laravel Vapor with AWS $isEnabled = env('COMMANDS_V2_ENABLED', false); if ($isEnabled) { // $schedule->command('dummy-command') // ->everyFiveMinutes() // ->withoutOverlapping(); $schedule->command('housekeeping-s3-files-command') ->dailyAt('01:00') ->withoutOverlapping(); $schedule->command('password-reset-token-expriration-check-command') ->everySixHours() ->withoutOverlapping(); $schedule->command('new-user-registration-expire-check-command') ->everySixHours() ->withoutOverlapping(); if (env('APP_ENV') === 'production') { $schedule->command('curl-vt-command') ->cron('0 8 * * *') ->withoutOverlapping(); // $schedule->command('curl-yd-order-list-command') // ->cron('0 9-18/3 * * *') // ->withoutOverlapping(); $schedule->command('process-yd-by-traking-no-data-command') ->cron('0 8,11,14,17 * * *') ->withoutOverlapping(); $schedule->command('process-yd-portal-data-command') ->cron('0 9,12,15,18 * * *') //->cron('0 9-18/3 * * *') ->withoutOverlapping(); $schedule->command('fix-packinglist-command') ->cron('30 9-18/3 * * *') ->withoutOverlapping(); $schedule->command('fix-duplicate-container-reference-command') ->cron('0 1 * * *') ->withoutOverlapping(); $schedule->command('invoice-generate-command') // ->hourly() ->cron('0 0-8,10-11,13-14,16-17,19-23 * * *') ->withoutOverlapping(); $schedule->command('billplz-failed-callback-fix-command') ->hourly() ->withoutOverlapping(); $schedule->command('check-storage-invoices-group-transactions-command') ->dailyAt('0:01') ->withoutOverlapping(); $schedule->command('permits-reminder-send-command') ->dailyAt('09:30') ->withoutOverlapping(); $schedule->command('process-delayed-jobs-command') ->everyFiveMinutes() ->withoutOverlapping(); } elseif (env('APP_ENV') === 'development') { $schedule->command('process-delayed-jobs-command') ->everyTwoHours() ->withoutOverlapping(); } } //Commands Version 1: Before AWS else { $schedule->command('command:curlVTCommand') ->cron('0 8 * * *') ->withoutOverlapping() ->appendOutputTo(storage_path() . '/logs/curlvt.log'); $schedule->command('command:curlYdOrderListCommand') ->cron('0 9-18/3 * * *') ->withoutOverlapping() ->appendOutputTo(storage_path() . '/logs/curlyd.log'); $schedule->command('fix-packinglist') ->cron('30 9-18/3 * * *') ->withoutOverlapping() ->appendOutputTo(storage_path() . '/logs/fix_packinglist.log'); // $schedule->command('command:curlYdOrderListCommand') // ->cron('0 9 * * *') // ->withoutOverlapping() // ->appendOutputTo(storage_path().'/logs/departure_email.log'); $schedule->command('fix-duplicate-container-reference') ->cron('0 1 * * *') ->withoutOverlapping() ->appendOutputTo(storage_path() . '/logs/fix_duplicate_container_reference.log'); $schedule->command('invoice:generate') ->hourly() ->withoutOverlapping() ->appendOutputTo(storage_path() . '/logs/auto_generate_invoice.log'); $schedule->command('billplz-failed-callback:fix') ->hourly() ->withoutOverlapping() ->appendOutputTo(storage_path() . '/logs/fix_failed_callback_from_billplz.log'); $schedule->command('check-storage-invoices-group-transactions') ->dailyAt('0:01') ->withoutOverlapping() ->appendOutputTo(storage_path() . '/logs/check_storage_invoices.log'); $schedule->command('permitsReminder:send') ->dailyAt('09:30') ->withoutOverlapping() ->appendOutputTo(storage_path() . '/logs/permits-reminder-send.log'); } }) ->create();