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ường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id | String | Có | User request cần xử lý. |
status | ProcessUserRequestStatus | Có | IN_CHARGE, ISSUED, RESOLVED hoặc REJECTED. |
fees mới | [UserRequestFeeInput!] | Khi yêu cầu thay đổi (update) chuyển sang ISSUED | Bá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. |
currency | String | Khô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_amount | Decimal | Không | Chi 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ường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
fee_type | FeeType | Có | BAGGAGE, SEAT hoặc OTHER. |
leg | FlightLeg | Khi yêu cầu là khứ hồi | DEPARTURE 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. |
baggage | AddBaggageInput | Khi BAGGAGE | Hành lý. price của nó là giá của khoản phí. |
seat | SeatInput | Khi SEAT | Ghế. fee của nó là giá của khoản phí. |
other_fee | OtherFeeInput | Khi OTHER | Khoả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_timetrong 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ại | status được phép | Trường hợp khác |
|---|---|---|
PENDING | IN_CHARGE, RESOLVED, REJECTED — admin nào cũng được | ISSUED trả về invalid_status |
IN_CHARGE | ISSUED, 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 |
ISSUED | Không có — đang chờ người yêu cầu | locked_issued_request |
AWAITING_PERSONAL_PAYMENT | Không có — đang chờ người yêu cầu thanh toán | locked_awaiting_personal_payment_request |
CONFIRMED | Không có — đang chờ phê duyệt | locked_confirmed_request |
RESOLVED, REJECTED, CANCELED, DECLINED | Khô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_required | Yêu cầu thay đổi được chuyển sang ISSUED mà không có fees. |
missing_fee_data | Một khoản phí thiếu dữ liệu tương ứng với fee_type — baggage, seat hoặc other_fee. |
fee_leg_required | Một khoản phí của yêu cầu khứ hồi không có leg. |
fee_leg_mismatch | leg của một khoản phí không phải chặng của yêu cầu. |
invalid_fee_leg | leg của một khoản phí là ROUND_TRIP; mỗi khoản chỉ cho một chặng. |
invalid_fee_price | Giá của một khoản phí bị âm. |
duplicate_fee | Hai ghế, hoặc hai hành lý, trên cùng một chặng. |
invalid_status | Yê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_params | Yêu cầu đã có đúng trạng thái đó. |
<status>_user_request | Yêu cầu đang ở trạng thái cuối. |
unauthorized | Một admin khác đang xử lý yêu cầu. |
not_found | id 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.