-- M002 前端订单列表排序优化：订单自身维护最近业务活动时间，避免列表查询每次聚合全量任务。
ALTER TABLE workflow_reservation_order
    ADD COLUMN latest_activity_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '订单最近业务活动 UTC 时间，用于订单列表最新活动排序';

-- 历史数据回填：优先取订单更新时间和所属任务最新来源/创建时间中的较大值。
UPDATE workflow_reservation_order
SET latest_activity_at = GREATEST(
        updated_at,
        COALESCE((
            SELECT MAX(COALESCE(sm.received_at, t.created_at))
            FROM workflow_reservation_task t
            LEFT JOIN platform_source_message_inbox sm
              ON sm.hotel_id = t.hotel_id
             AND sm.id = t.source_message_id
            WHERE t.hotel_id = workflow_reservation_order.hotel_id
              AND t.order_id = workflow_reservation_order.id
        ), updated_at)
    );

-- 订单列表按可见性和最新活动时间倒序分页。
CREATE INDEX idx_reservation_order_visibility_activity
    ON workflow_reservation_order (hotel_id, order_visibility, latest_activity_at DESC, updated_at DESC, id DESC);
