Skip to main content

Order Management

Routes:

  • /admin/orders — Order list
  • /admin/orders/[id] — Order detail

Files:

  • ayts-admin/app/(admin)/orders/page.tsx
  • ayts-admin/app/(admin)/orders/[id]/page.tsx

Auth required: Admin

Purpose

Admins view all orders across the platform, update order statuses, process refunds, and resolve disputes.

Order List

Filters

  • Status: Pending / Confirmed / Preparing / Ready / Out for Delivery / Delivered / Cancelled
  • Date range picker
  • Store selector
  • Search by order ID or customer name

Table Columns

ColumnSource
Order IDorders.order_number (e.g., AYTS-20260107-4976)
Customerusers.first_name + last_name
Storestores.name
ItemsCount of order_items
Totalorders.total_amount
Paymentorders.payment_method + payment_status
Statusorders.status
Dateorders.created_at
ActionsView / Update Status

Components Used

ComponentFile
OrdersTablecomponents/orders-table.tsx
OrdersFilterscomponents/orders-filters.tsx
OrdersStatscomponents/orders-stats.tsx
OrderTimelinecomponents/order-timeline.tsx

Data Fetching

// Get all orders (admin)
GET /api/admin/orders?status={status}&storeId={id}&limit=20&offset={page}

// Get single order
GET /api/orders/{id}

// Update order status
PATCH /api/orders/{id}/status
{ status: 'confirmed' | 'preparing' | 'ready' | 'out_for_delivery' | 'delivered' | 'cancelled' }

Order Detail (/admin/orders/[id])

Sections

Order Info

  • Order ID, date, status badge
  • Customer name + contact

Order Timeline

  • Visual step tracker showing status history

Line Items

  • Product name, quantity, unit price, subtotal
  • Store name

Payment Info

  • Payment method
  • Payment status
  • PayMongo reference (if online payment)
  • Refund button (if eligible)

Rider Assignment

  • Current rider (if assigned)
  • Assign/reassign rider dropdown

Refund Processing

// Process refund (admin only)
PATCH /api/payments/refund/{orderId}/process
{
amount: number, // partial or full refund
reason: string,
}
Refund UI

The API endpoint exists but there is no UI built yet. The refund button and form must be added to the order detail page.

Known Issues / Status

ItemStatus
Order list✅ Working
Status filter⚠️ Missing "preparing" status option
Order items count✅ Fixed (order_items now saved correctly)
Status update✅ Working
Refund button❌ No UI — API exists
Rider assignment⚠️ Route exists, UI not verified

Order Statuses (Normalized)

StatusMeaning
pendingPlaced, awaiting payment
confirmedPayment confirmed
preparingVendor is preparing
readyReady for pickup
out_for_deliveryRider has it
deliveredCompleted
cancelledCancelled
refundedRefund processed