主要變更: - 實作 POS 與販賣機訂單同步邏輯,支援多租戶與 Sanctum 驗證。 - 修正多租戶識別中間件與 Sanctum 驗證順序問題。 - 切換快取驅動至 Redis 以支援 Tenancy 標籤功能。 - 新增商品同步 API (Upsert) 及相關單元測試。 - 新增手動測試腳本 tests/manual/test_integration_api.sh。 - 前端新增銷售訂單來源篩選與欄位顯示。
57 lines
1.7 KiB
PHP
57 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Modules\Integration\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Modules\Integration\Requests\SyncVendingOrderRequest;
|
|
use App\Modules\Integration\Actions\SyncVendingOrderAction;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class VendingOrderSyncController extends Controller
|
|
{
|
|
protected $syncVendingOrderAction;
|
|
|
|
public function __construct(SyncVendingOrderAction $syncVendingOrderAction)
|
|
{
|
|
$this->syncVendingOrderAction = $syncVendingOrderAction;
|
|
}
|
|
|
|
/**
|
|
* 接收並同步販賣機交易訂單
|
|
*
|
|
* @param SyncVendingOrderRequest $request
|
|
* @return JsonResponse
|
|
*/
|
|
public function store(SyncVendingOrderRequest $request): JsonResponse
|
|
{
|
|
try {
|
|
$result = $this->syncVendingOrderAction->execute($request->validated());
|
|
|
|
$statusCode = ($result['status'] === 'exists') ? 200 : 201;
|
|
|
|
return response()->json([
|
|
'message' => $result['message'],
|
|
'order_id' => $result['order_id'] ?? null,
|
|
], $statusCode);
|
|
|
|
} catch (\Illuminate\Validation\ValidationException $e) {
|
|
return response()->json([
|
|
'message' => 'Validation failed',
|
|
'errors' => $e->errors()
|
|
], 422);
|
|
|
|
} catch (\Exception $e) {
|
|
Log::error('Vending Order Sync Failed', [
|
|
'error' => $e->getMessage(),
|
|
'trace' => $e->getTraceAsString(),
|
|
'payload' => $request->all()
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Sync failed: An unexpected error occurred.'
|
|
], 500);
|
|
}
|
|
}
|
|
}
|