diff --git a/app/Http/Controllers/Api/V1/Admin/PingController.php b/app/Http/Controllers/Api/V1/Admin/PingController.php new file mode 100644 index 0000000..275ede1 --- /dev/null +++ b/app/Http/Controllers/Api/V1/Admin/PingController.php @@ -0,0 +1,16 @@ + 'admin']); + } +} diff --git a/app/Http/Controllers/Api/V1/HealthController.php b/app/Http/Controllers/Api/V1/HealthController.php new file mode 100644 index 0000000..a37422b --- /dev/null +++ b/app/Http/Controllers/Api/V1/HealthController.php @@ -0,0 +1,27 @@ + config('app.name'), + 'default_currency' => config('lottery.default_currency'), + ]; + + if (config('app.debug')) { + $payload['laravel'] = app()->version(); + } + + return ApiResponse::success($payload); + } +} diff --git a/app/Http/Controllers/Api/V1/Player/PingController.php b/app/Http/Controllers/Api/V1/Player/PingController.php new file mode 100644 index 0000000..8ff80e4 --- /dev/null +++ b/app/Http/Controllers/Api/V1/Player/PingController.php @@ -0,0 +1,16 @@ + 'player']); + } +} diff --git a/app/Http/Middleware/EnsureAdminApi.php b/app/Http/Middleware/EnsureAdminApi.php new file mode 100644 index 0000000..db0d045 --- /dev/null +++ b/app/Http/Middleware/EnsureAdminApi.php @@ -0,0 +1,18 @@ +json([ + 'code' => $code, + 'msg' => $msg, + 'data' => $data, + ]); + } + + public static function error(string $msg, int $code, mixed $data = null, int $httpStatus = 400): JsonResponse + { + return response()->json([ + 'code' => $code, + 'msg' => $msg, + 'data' => $data, + ], $httpStatus); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index c183276..ed46bfb 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -7,11 +7,15 @@ use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware): void { - // + $middleware->alias([ + 'lottery.player' => \App\Http\Middleware\EnsurePlayerApi::class, + 'lottery.admin' => \App\Http\Middleware\EnsureAdminApi::class, + ]); }) ->withExceptions(function (Exceptions $exceptions): void { // diff --git a/config/lottery.php b/config/lottery.php new file mode 100644 index 0000000..2c126fc --- /dev/null +++ b/config/lottery.php @@ -0,0 +1,15 @@ + env('LOTTERY_DEFAULT_CURRENCY', 'NPR'), + + 'main_site' => [ + 'base_url' => env('MAIN_SITE_BASE_URL'), + 'sso_jwt_secret' => env('MAIN_SITE_SSO_JWT_SECRET'), + 'wallet_api_url' => env('MAIN_SITE_WALLET_API_URL'), + 'wallet_api_key' => env('MAIN_SITE_WALLET_API_KEY'), + 'wallet_timeout' => (int) env('MAIN_SITE_WALLET_TIMEOUT', 10), + ], + +]; diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..d773e83 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,30 @@ +group(function (): void { + Route::get('health', HealthController::class)->name('api.v1.health'); + + Route::middleware('lottery.player') + ->prefix('player') + ->name('api.v1.player.') + ->group(function (): void { + Route::get('ping', PlayerPingController::class)->name('ping'); + }); + + Route::middleware('lottery.admin') + ->prefix('admin') + ->name('api.v1.admin.') + ->group(function (): void { + Route::get('ping', AdminPingController::class)->name('ping'); + }); +});