initial commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Api\V1\AuthController;
|
||||
use App\Http\Controllers\Api\V1\BookingController;
|
||||
use App\Http\Controllers\Api\V1\EstablishmentController;
|
||||
use App\Http\Controllers\Api\V1\Integration\MachineEventController;
|
||||
use App\Http\Controllers\Api\V1\MachineController;
|
||||
use App\Http\Controllers\Api\V1\Supervisor\AuthController as SupervisorAuthController;
|
||||
use App\Http\Controllers\Api\V1\Supervisor\BookingController as SupervisorBookingController;
|
||||
use App\Http\Controllers\Api\V1\Supervisor\DashboardController;
|
||||
use App\Http\Controllers\Api\V1\Supervisor\MachineController as SupervisorMachineController;
|
||||
use App\Http\Controllers\Api\V1\Supervisor\PricingController;
|
||||
use App\Http\Controllers\Api\V1\Supervisor\PromotionController;
|
||||
use App\Http\Controllers\Api\V1\Supervisor\WashController as SupervisorWashController;
|
||||
use App\Http\Controllers\Api\V1\WalletController;
|
||||
use App\Http\Controllers\Api\V1\WashController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::prefix('v1')->group(function () {
|
||||
Route::prefix('auth')->group(function () {
|
||||
Route::post('register', [AuthController::class, 'register']);
|
||||
Route::post('login', [AuthController::class, 'login']);
|
||||
Route::post('refresh', [AuthController::class, 'refresh']);
|
||||
|
||||
Route::middleware(['auth:sanctum', 'auth.api.user'])->group(function () {
|
||||
Route::post('logout', [AuthController::class, 'logout']);
|
||||
Route::get('me', [AuthController::class, 'me']);
|
||||
});
|
||||
});
|
||||
|
||||
Route::middleware(['auth:sanctum', 'auth.api.user'])->group(function () {
|
||||
Route::prefix('wallet')->group(function () {
|
||||
Route::get('/', [WalletController::class, 'index']);
|
||||
Route::get('transactions', [WalletController::class, 'transactions']);
|
||||
Route::post('top-up/initiate', [WalletController::class, 'initiateTopUp']);
|
||||
Route::post('top-up/confirm', [WalletController::class, 'confirmTopUp']);
|
||||
});
|
||||
|
||||
Route::post('bookings', [BookingController::class, 'store']);
|
||||
Route::get('bookings', [BookingController::class, 'index']);
|
||||
Route::get('bookings/{uuid}', [BookingController::class, 'show']);
|
||||
Route::patch('bookings/{uuid}/cancel', [BookingController::class, 'cancel']);
|
||||
Route::patch('bookings/{uuid}/move', [BookingController::class, 'move']);
|
||||
|
||||
Route::post('washes/start', [WashController::class, 'start']);
|
||||
Route::get('washes', [WashController::class, 'index']);
|
||||
Route::get('washes/{uuid}', [WashController::class, 'show']);
|
||||
});
|
||||
|
||||
Route::get('establishments', [EstablishmentController::class, 'index']);
|
||||
Route::get('establishments/{uuid}', [EstablishmentController::class, 'show']);
|
||||
Route::get('machines/{uuid}', [MachineController::class, 'show']);
|
||||
Route::get('machines/{uuid}/availability', [MachineController::class, 'availability']);
|
||||
Route::get('machines/{uuid}/pricing', [MachineController::class, 'pricing']);
|
||||
|
||||
Route::post('wallet/top-up/webhook/{provider}', [WalletController::class, 'webhook']);
|
||||
|
||||
Route::prefix('supervisor')->group(function () {
|
||||
Route::post('auth/login', [SupervisorAuthController::class, 'login']);
|
||||
|
||||
Route::middleware(['auth.supervisor', 'supervisor.scope'])->group(function () {
|
||||
Route::post('auth/logout', [SupervisorAuthController::class, 'logout']);
|
||||
Route::get('dashboard', [DashboardController::class, 'index']);
|
||||
Route::get('machines', [SupervisorMachineController::class, 'index']);
|
||||
Route::get('bookings', [SupervisorBookingController::class, 'index']);
|
||||
Route::get('washes', [SupervisorWashController::class, 'index']);
|
||||
Route::get('pricing', [PricingController::class, 'index']);
|
||||
Route::post('pricing', [PricingController::class, 'store']);
|
||||
Route::put('pricing/{id}', [PricingController::class, 'update']);
|
||||
Route::get('promotions', [PromotionController::class, 'index']);
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('integrations/machines')
|
||||
->middleware('machine.integration')
|
||||
->group(function () {
|
||||
Route::post('events', [MachineEventController::class, 'store']);
|
||||
Route::post('heartbeat', [MachineEventController::class, 'heartbeat']);
|
||||
Route::post('commands/{uuid}/ack', [MachineEventController::class, 'ackCommand']);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Auth\AuthenticatedSessionController;
|
||||
use App\Http\Controllers\Auth\ConfirmablePasswordController;
|
||||
use App\Http\Controllers\Auth\EmailVerificationNotificationController;
|
||||
use App\Http\Controllers\Auth\EmailVerificationPromptController;
|
||||
use App\Http\Controllers\Auth\NewPasswordController;
|
||||
use App\Http\Controllers\Auth\PasswordController;
|
||||
use App\Http\Controllers\Auth\PasswordResetLinkController;
|
||||
use App\Http\Controllers\Auth\RegisteredUserController;
|
||||
use App\Http\Controllers\Auth\VerifyEmailController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::middleware('guest')->group(function () {
|
||||
Route::get('register', [RegisteredUserController::class, 'create'])
|
||||
->name('register');
|
||||
|
||||
Route::post('register', [RegisteredUserController::class, 'store']);
|
||||
|
||||
Route::get('login', [AuthenticatedSessionController::class, 'create'])
|
||||
->name('login');
|
||||
|
||||
Route::post('login', [AuthenticatedSessionController::class, 'store']);
|
||||
|
||||
Route::get('forgot-password', [PasswordResetLinkController::class, 'create'])
|
||||
->name('password.request');
|
||||
|
||||
Route::post('forgot-password', [PasswordResetLinkController::class, 'store'])
|
||||
->name('password.email');
|
||||
|
||||
Route::get('reset-password/{token}', [NewPasswordController::class, 'create'])
|
||||
->name('password.reset');
|
||||
|
||||
Route::post('reset-password', [NewPasswordController::class, 'store'])
|
||||
->name('password.store');
|
||||
});
|
||||
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('verify-email', EmailVerificationPromptController::class)
|
||||
->name('verification.notice');
|
||||
|
||||
Route::get('verify-email/{id}/{hash}', VerifyEmailController::class)
|
||||
->middleware(['signed', 'throttle:6,1'])
|
||||
->name('verification.verify');
|
||||
|
||||
Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store'])
|
||||
->middleware('throttle:6,1')
|
||||
->name('verification.send');
|
||||
|
||||
Route::get('confirm-password', [ConfirmablePasswordController::class, 'show'])
|
||||
->name('password.confirm');
|
||||
|
||||
Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
|
||||
|
||||
Route::put('password', [PasswordController::class, 'update'])->name('password.update');
|
||||
|
||||
Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
|
||||
->name('logout');
|
||||
});
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
use App\Jobs\CheckNoShowBookings;
|
||||
use App\Jobs\GenerateDailyStats;
|
||||
use App\Jobs\RefreshOfflineMachines;
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\Schedule;
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
|
||||
Schedule::job(new CheckNoShowBookings)->everyFiveMinutes();
|
||||
Schedule::job(new RefreshOfflineMachines)->everyFiveMinutes();
|
||||
Schedule::job(new GenerateDailyStats)->dailyAt('01:00');
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Supervisor\AuthController;
|
||||
use App\Http\Controllers\Supervisor\BookingPageController;
|
||||
use App\Http\Controllers\Supervisor\DashboardController;
|
||||
use App\Http\Controllers\Supervisor\MachinePageController;
|
||||
use App\Http\Controllers\Supervisor\PricingPageController;
|
||||
use App\Http\Controllers\Supervisor\PromotionPageController;
|
||||
use App\Http\Controllers\Supervisor\WashPageController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::redirect('/', '/login');
|
||||
|
||||
Route::middleware('guest:supervisor')->group(function () {
|
||||
Route::get('login', [AuthController::class, 'create'])->name('login');
|
||||
Route::post('login', [AuthController::class, 'store'])->name('login.store');
|
||||
});
|
||||
|
||||
Route::middleware('auth:supervisor')->group(function () {
|
||||
Route::post('logout', [AuthController::class, 'destroy'])->name('logout');
|
||||
|
||||
Route::get('dashboard', [DashboardController::class, 'index'])->name('supervisor.dashboard');
|
||||
|
||||
Route::get('machines', [MachinePageController::class, 'index'])->name('supervisor.machines.index');
|
||||
Route::get('machines/{uuid}', [MachinePageController::class, 'show'])->name('supervisor.machines.show');
|
||||
|
||||
Route::get('bookings', [BookingPageController::class, 'index'])->name('supervisor.bookings.index');
|
||||
|
||||
Route::get('washes', [WashPageController::class, 'index'])->name('supervisor.washes.index');
|
||||
|
||||
Route::get('pricing', [PricingPageController::class, 'index'])->name('supervisor.pricing.index');
|
||||
Route::post('pricing', [PricingPageController::class, 'store'])->name('supervisor.pricing.store');
|
||||
Route::put('pricing/{id}', [PricingPageController::class, 'update'])->name('supervisor.pricing.update');
|
||||
Route::delete('pricing/{id}', [PricingPageController::class, 'destroy'])->name('supervisor.pricing.destroy');
|
||||
|
||||
Route::get('promotions', [PromotionPageController::class, 'index'])->name('supervisor.promotions.index');
|
||||
Route::post('promotions', [PromotionPageController::class, 'store'])->name('supervisor.promotions.store');
|
||||
Route::put('promotions/{id}', [PromotionPageController::class, 'update'])->name('supervisor.promotions.update');
|
||||
Route::delete('promotions/{id}', [PromotionPageController::class, 'destroy'])->name('supervisor.promotions.destroy');
|
||||
});
|
||||
Reference in New Issue
Block a user