Intégration reservations et mock lavage
This commit is contained in:
@@ -12,9 +12,9 @@ use App\Http\Resources\BookingResource;
|
||||
use App\Models\Booking;
|
||||
use App\Models\Machine;
|
||||
use App\Services\BookingService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class BookingController extends Controller
|
||||
{
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1;
|
||||
|
||||
use App\Http\Controllers\Concerns\RespondsWithJson;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Throwable;
|
||||
|
||||
class HealthController extends Controller
|
||||
{
|
||||
use RespondsWithJson;
|
||||
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
return $this->success([
|
||||
'status' => 'ok',
|
||||
'service' => 'laverie-api',
|
||||
'timestamp' => now()->toIso8601String(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function database(): JsonResponse
|
||||
{
|
||||
try {
|
||||
DB::select('SELECT 1');
|
||||
|
||||
return $this->success([
|
||||
'status' => 'ok',
|
||||
'database' => config('database.default'),
|
||||
'timestamp' => now()->toIso8601String(),
|
||||
]);
|
||||
} catch (Throwable $e) {
|
||||
return $this->error('Database connection failed', 503, [
|
||||
'database' => ['Connection unavailable'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ use App\Http\Resources\MachineResource;
|
||||
use App\Models\Booking;
|
||||
use App\Models\Machine;
|
||||
use App\Services\PricingService;
|
||||
use App\Support\WashCycleProgress;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -29,6 +30,34 @@ class MachineController extends Controller
|
||||
|
||||
return $this->success([
|
||||
'machine' => new MachineResource($machine),
|
||||
'pricing' => [
|
||||
'price' => $this->pricingService->getActivePrice($machine),
|
||||
'currency' => 'EUR',
|
||||
],
|
||||
'estimated_duration_minutes' => WashCycleProgress::estimateDurationMinutes($machine->type),
|
||||
]);
|
||||
}
|
||||
|
||||
public function lookup(Request $request): JsonResponse
|
||||
{
|
||||
$request->validate([
|
||||
'qr_code' => ['required_without:machine_uuid', 'nullable', 'string', 'max:255'],
|
||||
'machine_uuid' => ['required_without:qr_code', 'nullable', 'uuid'],
|
||||
]);
|
||||
|
||||
$machine = $request->filled('machine_uuid')
|
||||
? Machine::query()->where('uuid', $request->string('machine_uuid')->toString())->firstOrFail()
|
||||
: Machine::query()->where('qr_code', $request->string('qr_code')->toString())->firstOrFail();
|
||||
|
||||
$machine->load('establishment');
|
||||
|
||||
return $this->success([
|
||||
'machine' => new MachineResource($machine),
|
||||
'pricing' => [
|
||||
'price' => $this->pricingService->getActivePrice($machine),
|
||||
'currency' => 'EUR',
|
||||
],
|
||||
'estimated_duration_minutes' => WashCycleProgress::estimateDurationMinutes($machine->type),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,9 +25,9 @@ class WashController extends Controller
|
||||
|
||||
public function start(StartWashRequest $request): JsonResponse
|
||||
{
|
||||
$machine = Machine::query()
|
||||
->where('uuid', $request->string('machine_uuid')->toString())
|
||||
->firstOrFail();
|
||||
$machine = $request->filled('machine_uuid')
|
||||
? Machine::query()->where('uuid', $request->string('machine_uuid')->toString())->firstOrFail()
|
||||
: Machine::query()->where('qr_code', $request->string('qr_code')->toString())->firstOrFail();
|
||||
|
||||
$bookingId = null;
|
||||
if ($request->filled('booking_uuid')) {
|
||||
|
||||
@@ -15,7 +15,8 @@ class StartWashRequest extends FormRequest
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'machine_uuid' => ['required', 'uuid', 'exists:machines,uuid'],
|
||||
'machine_uuid' => ['required_without:qr_code', 'nullable', 'uuid', 'exists:machines,uuid'],
|
||||
'qr_code' => ['required_without:machine_uuid', 'nullable', 'string', 'max:255', 'exists:machines,qr_code'],
|
||||
'booking_uuid' => ['nullable', 'uuid', 'exists:bookings,uuid'],
|
||||
'trigger_method' => ['required', Rule::in(['qr_code', 'booking', 'supervisor', 'system'])],
|
||||
'program' => ['nullable', 'string', 'max:100'],
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Support\WashCycleProgress;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
@@ -22,6 +23,7 @@ class WashResource extends JsonResource
|
||||
'machine' => new MachineResource($this->whenLoaded('machine')),
|
||||
'booking' => new BookingResource($this->whenLoaded('booking')),
|
||||
'user' => new UserResource($this->whenLoaded('user')),
|
||||
'progress' => WashCycleProgress::forWash($this->resource),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user