- Implemented the full order lifecycle, secure customer tracker, automatic acceptance emails, configurable status templates, and guest/account CRM management.
Key areas: [OrderStatusService.php](/Users/tyemeclifford/Documents/GH/fatbottomgrille/app/Services/OrderStatusService.php), [AdminController.php](/Users/tyemeclifford/Documents/GH/fatbottomgrille/app/Controllers/AdminController.php), and [Database.php](/Users/tyemeclifford/Documents/GH/fatbottomgrille/app/Core/Database.php). SQLite migration applied successfully. PHP/JS syntax, integration workflows, rendered pages, database integrity, and tracker authorization all passed. Invalid tracker tokens correctly return 403.
This commit is contained in:
@@ -11,7 +11,8 @@ final class OrderService
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Database $db,
|
||||
private readonly PaymentGateway $payments
|
||||
private readonly PaymentGateway $payments,
|
||||
private readonly CustomerService $customers
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -44,22 +45,27 @@ final class OrderService
|
||||
$pdo = $this->db->pdo();
|
||||
$pdo->beginTransaction();
|
||||
try {
|
||||
$customerId = $this->customers->capture($customer, $userId);
|
||||
$trackingToken = bin2hex(random_bytes(24));
|
||||
$statement = $pdo->prepare(
|
||||
'INSERT INTO orders
|
||||
(order_number, user_id, cart_id, customer_name, customer_email, customer_phone,
|
||||
(order_number, user_id, customer_id, cart_id, tracking_token,
|
||||
customer_name, customer_email, customer_phone,
|
||||
order_type, status, payment_status, payment_provider, payment_reference,
|
||||
subtotal_cents, tax_cents, total_cents, special_instructions, pickup_time)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
|
||||
);
|
||||
$statement->execute([
|
||||
$orderNumber,
|
||||
$userId,
|
||||
$customerId,
|
||||
(int) $cart['id'],
|
||||
$trackingToken,
|
||||
$customer['customer_name'],
|
||||
$customer['customer_email'],
|
||||
$customer['customer_phone'],
|
||||
'pickup',
|
||||
'paid',
|
||||
'pending',
|
||||
'paid',
|
||||
$payment['provider'],
|
||||
$payment['reference'],
|
||||
@@ -89,11 +95,20 @@ final class OrderService
|
||||
}
|
||||
|
||||
$pdo->prepare(
|
||||
'INSERT INTO order_events (order_id, user_id, event_type, details) VALUES (?, ?, ?, ?)'
|
||||
)->execute([$orderId, $userId, 'order_placed', 'Online pickup order paid successfully.']);
|
||||
'INSERT INTO order_events
|
||||
(order_id, user_id, event_type, details, status, customer_visible)
|
||||
VALUES (?, ?, ?, ?, ?, 1)'
|
||||
)->execute([
|
||||
$orderId,
|
||||
$userId,
|
||||
'order_placed',
|
||||
'Online pickup order paid successfully and is awaiting staff acceptance.',
|
||||
'pending',
|
||||
]);
|
||||
$pdo->prepare(
|
||||
"UPDATE carts SET status = 'converted', converted_at = CURRENT_TIMESTAMP WHERE id = ?"
|
||||
)->execute([(int) $cart['id']]);
|
||||
$this->customers->refresh($customerId);
|
||||
$pdo->commit();
|
||||
} catch (\Throwable $error) {
|
||||
$pdo->rollBack();
|
||||
|
||||
Reference in New Issue
Block a user