Files
buzz-sheet/lib/commission/request-validation.ts
T
gunshiz 6fc4427ae1
CI / Verify (push) Successful in 1m49s
CI / Build immutable images and deploy (push) Successful in 2m14s
feat : custom stats with double price in commission
2026-10-10 05:08:06 +07:00

26 lines
2.6 KiB
TypeScript

import { commissionRequestSchema, type CommissionRequest } from "./request";
export function commissionRequestIssues(request: CommissionRequest) {
const parsed = commissionRequestSchema.safeParse(request);
if (parsed.success) return [];
return parsed.error.issues.map(({ path }) => {
let message = "เพิ่มทีมหรือรายการเปรียบเทียบอย่างน้อยหนึ่งรายการ";
if (path[0] === "teams") {
const teamNumber = Number(path[1]) + 1;
const memberNumber = typeof path[3] === "number" ? path[3] + 1 : null;
message = memberNumber && path[4] === "characterKey" ? `ทีม ${teamNumber}: เลือกตัวละครที่ ${memberNumber}`
: memberNumber && path[4] === "weaponKey" ? `ทีม ${teamNumber}: เลือกอาวุธให้ตัวละครที่ ${memberNumber}`
: memberNumber && path[4] === "artifactKey" ? `ทีม ${teamNumber}: เลือกอาร์ติแฟกต์ให้ตัวละครที่ ${memberNumber}`
: memberNumber && path[4] === "customStats" ? `ทีม ${teamNumber}: ระบุค่าสเตตัสให้ตัวละครที่ ${memberNumber} ไม่เกิน 4,000 ตัวอักษร`
: `ทีม ${teamNumber}: เลือกตัวละคร 4 ตัวที่ไม่ซ้ำกัน พร้อมอาวุธและอาร์ติแฟกต์`;
}
if (path[0] === "weapons") message = path[2] === "customStats"
? `ชุดเปรียบเทียบอาวุธ ${Number(path[1]) + 1}: ระบุค่าสเตตัสที่ต้องการ ไม่เกิน 4,000 ตัวอักษร`
: `ชุดเปรียบเทียบอาวุธ ${Number(path[1]) + 1}: เลือกตัวละครและอาวุธต่างกันอย่างน้อย 2 ชิ้น`;
if (path[0] === "constellations") message = path[2] === "customStats"
? `ชุดเปรียบเทียบกลุ่มดาว ${Number(path[1]) + 1}: ระบุค่าสเตตัสที่ต้องการ ไม่เกิน 4,000 ตัวอักษร`
: `ชุดเปรียบเทียบกลุ่มดาว ${Number(path[1]) + 1}: เลือกตัวละครและกลุ่มดาวอย่างน้อย 1 ระดับ`;
return { path: path.join("."), message };
});
}