feat(team-calc) : add character-wide team import

This commit is contained in:
2026-10-06 02:53:10 +07:00 Unverified
parent c856904c12
commit c851693854
6 changed files with 447 additions and 92 deletions
+58
View File
@@ -200,6 +200,64 @@ export async function listAdminTeamImportGuides(excludeGuideId: string) {
}));
}
export async function listAdminTeamImportsForCharacter(
excludeGuideId: string,
characterKey: string,
) {
const matches = await getDb()
.select({
id: teamCompositions.id,
title: teamCompositions.title,
rotationSeconds: teamCompositions.rotationSeconds,
combo: teamCompositions.combo,
guideName: guides.name,
conditionName: teamConditions.name,
})
.from(teamCompositions)
.innerJoin(guides, eq(guides.id, teamCompositions.guideId))
.innerJoin(teamMembers, eq(teamMembers.teamId, teamCompositions.id))
.leftJoin(teamConditions, eq(teamConditions.id, teamCompositions.conditionId))
.where(and(
eq(teamMembers.characterKey, characterKey),
ne(guides.id, excludeGuideId),
isNull(guides.trashedAt),
))
.orderBy(asc(guides.name), asc(guides.id), asc(teamConditions.sortOrder), asc(teamCompositions.sortOrder), asc(teamCompositions.id));
if (!matches.length) return [];
const members = await getDb()
.select({ member: teamMembers, characterName: catalogCharacters.name })
.from(teamMembers)
.leftJoin(catalogCharacters, eq(catalogCharacters.key, teamMembers.characterKey))
.where(inArray(teamMembers.teamId, matches.map((team) => team.id)))
.orderBy(asc(teamMembers.position));
const membersByTeam = new Map<string, Array<{
characterKey: string;
characterName: string;
weaponKey: string | null;
artifactKey: string | null;
secondArtifactKey: string | null;
constellation: string;
refinement: string;
damage: string;
}>>();
for (const { member, characterName } of members) {
const group = membersByTeam.get(member.teamId) ?? [];
group.push({
characterKey: member.characterKey,
characterName: characterName ?? member.characterKey,
weaponKey: member.weaponKey,
artifactKey: member.artifactKey,
secondArtifactKey: member.secondArtifactKey,
constellation: member.constellation,
refinement: member.refinement,
damage: member.damage,
});
membersByTeam.set(member.teamId, group);
}
return matches.map((team) => ({ ...team, members: membersByTeam.get(team.id) ?? [] }));
}
export async function getAdminTeamImportGuide(guideId: string) {
const [guide] = await getDb()
.select({ id: guides.id, name: guides.name })