Chuyển tới nội dung chính

process_user_request

Thao tác của admin trong luồng trạng thái: tiếp nhận, báo giá, hoàn tất hoặc từ chối một yêu cầu. Để báo giá, chuyển yêu cầu sang ISSUED kèm các khoản phí; sau đó yêu cầu chờ người yêu cầu.

Đây là một GraphQL mutation trả về UserRequest, và cần role ADMIN.

Input​

input: ProcessUserRequestInput!

TrườngKiểuBắt buộcMô tả
idStringCóUser request cần xử lý.
statusProcessUserRequestStatusCóIN_CHARGE, ISSUED, RESOLVED hoặc REJECTED.
fees mới[UserRequestFeeInput!]Khi yêu cầu thay đổi (update) chuyển sang ISSUEDBáo giá. amount là tổng giá của các khoản. Danh sách rỗng nghĩa là báo giá miễn phí. Bị bỏ qua với các trạng thái khác.
currencyStringKhôngĐơn vị tiền của mọi khoản phí. Mặc định VND. currency bên trong dữ liệu của từng khoản bị bỏ qua.
internal_amountDecimalKhôngChi phí nội bộ. Chỉ người dùng ADMIN đọc lại được.
amount đã bỏDecimal—Được tính từ fees. Gửi trường này giờ sẽ làm lỗi request.

UserRequestFeeInput có cùng dạng với dữ liệu phí của add_passenger_fee:

TrườngKiểuBắt buộcMô tả
fee_typeFeeTypeCóBAGGAGE, SEAT hoặc OTHER.
legFlightLegKhi yêu cầu là khứ hồiDEPARTURE hoặc RETURN. Mặc định là chặng của yêu cầu, và phải khớp với chặng đó nếu yêu cầu chỉ có một chặng.
baggageAddBaggageInputKhi BAGGAGEHành lý. price của nó là giá của khoản phí.
seatSeatInputKhi SEATGhế. fee của nó là giá của khoản phí.
other_feeOtherFeeInputKhi OTHERKhoản phí khác. price của nó là giá của khoản phí.

Mỗi khoản phí được lưu kèm một id, mà người yêu cầu và add_passenger_fee dùng về sau. Một vài quy tắc:

  • Giá không được âm.
  • Mỗi chặng tối đa một ghế và một hành lý — một hành khách chỉ giữ được một ghế và một hành lý.
  • transaction_time trong dữ liệu phí bị bỏ qua; nó được đặt khi khoản phí được áp dụng.
  • Không đổi được các khoản phí sau khi yêu cầu đã ở ISSUED.
  • Yêu cầu hủy (cancel) có thể phát hành kèm hoặc không kèm khoản phí.

Các bước chuyển được phép​

Trạng thái hiện tạistatus được phépTrường hợp khác
PENDINGIN_CHARGE, RESOLVED, REJECTED — admin nào cũng đượcISSUED trả về invalid_status
IN_CHARGEISSUED, RESOLVED, REJECTED — chỉ admin đang xử lýAdmin khác nhận unauthorized; yêu cầu thay đổi chuyển sang ISSUED mà không có fees nhận fees_required
ISSUEDKhông có — đang chờ người yêu cầulocked_issued_request
AWAITING_PERSONAL_PAYMENTKhông có — đang chờ người yêu cầu thanh toánlocked_awaiting_personal_payment_request
CONFIRMEDKhông có — đang chờ phê duyệtlocked_confirmed_request
RESOLVED, REJECTED, CANCELED, DECLINEDKhông có (trạng thái cuối)<status>_user_request với admin đã xử lý, unauthorized với người khác

Gửi đúng trạng thái mà yêu cầu đang có sẽ trả về invalid_params.

Mutation
mutation {
process_user_request(input: {
id: "3JMY..."
status: ISSUED
currency: "VND"
fees: [
{ fee_type: SEAT, leg: DEPARTURE, seat: { code: "12A", fee: 100000 } }
{ fee_type: OTHER, leg: DEPARTURE, other_fee: { price: 50000, note: "Change fee" } }
]
}) {
id status amount currency
fees { id fee_type leg price }
}
}

Mã lỗi​

Mã lỗiÝ nghĩa
fees_requiredYêu cầu thay đổi được chuyển sang ISSUED mà không có fees.
missing_fee_dataMột khoản phí thiếu dữ liệu tương ứng với fee_type — baggage, seat hoặc other_fee.
fee_leg_requiredMột khoản phí của yêu cầu khứ hồi không có leg.
fee_leg_mismatchleg của một khoản phí không phải chặng của yêu cầu.
invalid_fee_legleg của một khoản phí là ROUND_TRIP; mỗi khoản chỉ cho một chặng.
invalid_fee_priceGiá của một khoản phí bị âm.
duplicate_feeHai ghế, hoặc hai hành lý, trên cùng một chặng.
invalid_statusYêu cầu PENDING được chuyển thẳng sang ISSUED; hãy tiếp nhận trước.
locked_issued_requestĐang chờ người yêu cầu xác nhận hoặc từ chối.
locked_awaiting_personal_payment_requestĐang chờ người yêu cầu thanh toán phần của mình.
locked_confirmed_requestĐã xác nhận; đang chờ phê duyệt.
invalid_paramsYêu cầu đã có đúng trạng thái đó.
<status>_user_requestYêu cầu đang ở trạng thái cuối.
unauthorizedMột admin khác đang xử lý yêu cầu.
not_foundid không tồn tại.

API này cũng có thể trả về Lỗi middleware — UNAUTHORIZED khi người gọi không có role ADMIN, khác với unauthorized viết thường ở trên.