酒店住宿域 · C端契约(交接小齐)

后端(bobo)已完成独立「酒店住宿域」,与通用套餐模型解耦。C端 hotel-booking.ts
当前仍走 /api/miniapp/orders 套餐模型,需小齐改为调用下列独立端点。
所有端点前缀 /api/miniapp/hotel,均需登录(Bearer token,沿用现有 apiPost / 登录态)。

1. 列出某商户在售房型(选房型用)

GET /api/miniapp/hotel/room-types?merchantId={商户ID}

返回:

{ "ok": true, "data": { "room_types": [
  { "id": 1, "merchant_id": 10, "name": "神山观景大床房", "bed_type": "大床",
    "max_guests": 2, "total_rooms": 5,
    "base_price": 688.0, "weekend_price": 888.0, "holiday_price": 988.0 }
] } }

2. 查某房型逐晚价 + 余量(选日期后用)

GET /api/miniapp/hotel/availability
    ?roomTypeId={房型ID}
    &checkIn=YYYY-MM-DD
    &checkOut=YYYY-MM-DD   // 离店日,须 > 入住日
    &roomsCount=1          // 间数,默认 1

返回:

{ "ok": true, "data": { "room_type_id": 1, "name": "神山观景大床房",
  "nights": [
    { "date": "2026-10-01", "price": 988.0, "total": 5, "left": 5, "available": true }
  ],
  "total_price": 3952.0 } }

3. 下单(建独立酒店订单)

POST /api/miniapp/hotel/bookings

body:

{ "roomTypeId": 1, "checkIn": "2026-10-01", "checkOut": "2026-10-03",
  "roomsCount": 2, "guests": 2,
  "guestName": "张三", "guestPhone": "13800000000",
  "contactName": "张三", "contactPhone": "13800000000",
  "paymentType": "offline" }   // offline | online

返回:

{ "ok": true, "data": {
  "orderId": "18", "orderNo": "HT00000018", "bookingId": "17",
  "total_price": 3952.0, "nights": 2, "status": "booked" } }

+ room_bookings(status='booked'),并逐晚减 room_calendar.sold(超售/维护日返回 409)。

4. 用户取消(自动回补房量)

POST /api/miniapp/hotel/bookings/{bookingId}/cancel

返回:{ "ok": true, "data": { "id": 17, "status": "cancelled" } }

小齐接线要点

  1. hotel-booking.ts 的 submitAction 把 apiPost('/api/miniapp/orders', {...}) 改为先取

room-types 列表 → 用户选房型/日期 → availability 校验余量 → POST bookings。

  1. 入参从套餐模型的 productId/travelers/startDate 改为上表字段

(roomTypeId / checkIn / checkOut / roomsCount / guests / guestName / guestPhone)。

  1. 取消走 POST /api/miniapp/hotel/bookings/{id}/cancel(原订单取消入口若复用 orders 域亦可,

但房量回补仅在本域 cancel 触发)。

  1. B端接单/改价/房态的界面无需 C端关心,B端已独立上线(b.kailashi.cn 房型与房价/房态日历/预订管理)。