37 lines
1.0 KiB
PHP
37 lines
1.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Repositories\ProductRepository;
|
|
|
|
final class CartController
|
|
{
|
|
public function sync(): void
|
|
{
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
$payload = json_decode((string) file_get_contents('php://input'), true);
|
|
$items = is_array($payload) && isset($payload['items']) && is_array($payload['items'])
|
|
? $payload['items']
|
|
: [];
|
|
|
|
if ($items === []) {
|
|
echo json_encode(['items' => []], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
return;
|
|
}
|
|
|
|
try {
|
|
$snapshots = (new ProductRepository())->cartSnapshots($items);
|
|
echo json_encode(['items' => $snapshots], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
} catch (\Throwable) {
|
|
http_response_code(500);
|
|
echo json_encode([
|
|
'items' => [],
|
|
'error' => 'cart_sync_failed',
|
|
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
}
|
|
}
|
|
}
|