Files
Verde-Web/app/Http/Controllers/Api/V1/Store/StoreQrPurchaseController.php

64 lines
2.0 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1\Store;
use App\Http\Controllers\Api\V1\ApiController;
use App\Models\QrCode;
use App\Models\QrPurchaseOrder;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class StoreQrPurchaseController extends ApiController
{
public function pending(Request $request): JsonResponse
{
$orders = QrPurchaseOrder::with(['resident'])
->where('store_id', $request->user()->id)
->where('status', 'pending_payment')
->orderBy('created_at')
->get();
return $this->ok($orders);
}
public function complete(Request $request, string $uuid): JsonResponse
{
$request->validate([
'scanned_qr_data' => 'required|string',
]);
$order = QrPurchaseOrder::where('uuid', $uuid)
->where('store_id', $request->user()->id)
->where('status', 'pending_payment')
->firstOrFail();
// Find the scanned QR code
$qrCode = QrCode::where('serial', $request->scanned_qr_data)->first();
if (!$qrCode) {
return $this->fail('Invalid QR Code. Not found in the system.', null, 404);
}
if (! $qrCode->status->equals(\App\States\QrCode\Allocated::class) && ! $qrCode->status->equals(\App\States\QrCode\Unassigned::class)) {
return $this->fail('This QR Code cannot be assigned (already used or active).', null, 422);
}
DB::transaction(function () use ($order, $qrCode) {
$order->update([
'status' => 'completed',
'completed_at' => now(),
'qr_code_id' => $qrCode->id,
]);
$qrCode->status->transitionTo(\App\States\QrCode\Active::class);
$qrCode->update([
'assigned_to_user_id' => $order->resident_id,
'activated_at' => now(),
]);
});
return $this->ok($order->fresh(), 'QR Purchase completed and assigned successfully.');
}
}