fix : no limit team in each condition

This commit is contained in:
2026-10-06 03:11:12 +07:00 Unverified
parent c851693854
commit d13f3f93e4
4 changed files with 43 additions and 18 deletions
+27 -3
View File
@@ -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");