fix : no limit team in each condition
This commit is contained in:
+27
-3
@@ -351,9 +351,33 @@ export async function saveTeams(guideId: string, input: unknown, context: GuideM
|
||||
await tx.delete(teamConditions).where(eq(teamConditions.guideId, guideId));
|
||||
for (const [groupOrder, group] of data.groups.entries()) {
|
||||
const [condition] = await tx.insert(teamConditions).values({ guideId, name: group.name, note: group.note, iconMediaId: group.iconMediaId, sortOrder: groupOrder }).returning();
|
||||
for (const [sortOrder, team] of group.teams.entries()) {
|
||||
const [created] = await tx.insert(teamCompositions).values({ guideId, conditionId: condition.id, title: team.title, rotationSeconds: team.rotationSeconds.toString(), combo: team.combo, sortOrder }).returning();
|
||||
await tx.insert(teamMembers).values(team.members.map((member, position) => ({ ...member, teamId: created.id, position, damage: member.damage.toString() })));
|
||||
for (let start = 0; start < group.teams.length; start += 500) {
|
||||
const batch = group.teams.slice(start, start + 500);
|
||||
const created = await tx.insert(teamCompositions).values(
|
||||
batch.map((team, index) => ({
|
||||
guideId,
|
||||
conditionId: condition.id,
|
||||
title: team.title,
|
||||
rotationSeconds: team.rotationSeconds.toString(),
|
||||
combo: team.combo,
|
||||
sortOrder: start + index,
|
||||
})),
|
||||
).returning({ id: teamCompositions.id, sortOrder: teamCompositions.sortOrder });
|
||||
const teamIdByOrder = new Map<number, string>();
|
||||
for (const team of created) teamIdByOrder.set(team.sortOrder, team.id);
|
||||
const memberRows = batch.flatMap((team, index) => {
|
||||
const teamId = teamIdByOrder.get(start + index);
|
||||
if (!teamId) throw new Error("บันทึก Team ไม่สำเร็จ");
|
||||
return team.members.map((member, position) => ({
|
||||
...member,
|
||||
teamId,
|
||||
position,
|
||||
damage: member.damage.toString(),
|
||||
}));
|
||||
});
|
||||
for (let memberStart = 0; memberStart < memberRows.length; memberStart += 500) {
|
||||
await tx.insert(teamMembers).values(memberRows.slice(memberStart, memberStart + 500));
|
||||
}
|
||||
}
|
||||
}
|
||||
await auditGuide(tx, context, "guide.team.saved", updated, "team");
|
||||
|
||||
Reference in New Issue
Block a user