feat(team-calc) : add character-wide team import
This commit is contained in:
@@ -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 })
|
||||
|
||||
Reference in New Issue
Block a user