Trình tự kiểm tra một admin mutation
1
Kiểm tra nguồn request
Handler có mutation kiểm tra same-origin khi gọi
isSameOriginRequest().2
Xác thực phiên
getAuthenticatedUserFromRequest() trả user cùng active tower và permission set.3
Kiểm tra quyền
Handler kiểm tra route access, sau đó kiểm tra CRUD hoặc specialized action tùy intent.
4
Giới hạn và parse input
Upload, reminder và webhook dùng giới hạn body riêng. Handler chỉ chuyển input đã parse sang service.
5
Gọi persistence path
Generic module dùng repository; workflow phức tạp dùng domain service và transaction riêng.
Chọn handler khi phát triển
Hợp đồng request cho tính công nợ và lập phiếu thu
POST /admin/workflow nhận dữ liệu biểu mẫu qua request.formData(). Hai intent dưới đây dùng cùng handler; intent chọn thao tác, còn returnTo phải trỏ đến màn hình được phép cho thao tác đó. Tòa nhà và người thực hiện được lấy từ phiên qua activeTowerId và email.
- Tính công nợ
- Lập phiếu thu
calculateBillingPeriod() tạo Bills, BillLines và AuditLogs trong một Prisma transaction. Response thành công chứa data.notice = "billing-calculated" và data.count là số bảng kê đã tạo.Quyền, response và lỗi
Handler kiểm tra nguồn request, phiên, màn hình nằm trong danh sách cho phép, quyền truy cập màn hình và quyền thao tác trước khi gọi service. Quyền thao tác làcalculate_billing hoặc create_receipt tương ứng.
jsonRedirect() trả JSON chứa đích điều hướng, không phải HTTP 302. Lỗi database đi qua mapDatabaseError() và dùng mã/status từ bộ ánh xạ đó. Không áp dụng bảng response này cho mọi handler khác.
Ví dụ request và response mẫu
Response behavior
Các route dùng ba kiểu response:- JSON success/error qua
api-response.ts; - redirect kèm
noticehoặcerrorcho form navigation; - raw file/stream response cho export và attachment.