fix teams api
All checks were successful
deploy / build-and-deploy (push) Successful in 15s

This commit is contained in:
bytedream 2025-05-18 22:49:04 +02:00
parent af1424edc2
commit 9785a8c087
3 changed files with 27 additions and 48 deletions

View File

@ -169,20 +169,13 @@
"lastJoined": number | null, "lastJoined": number | null,
// Gewichtung aller Strikes // Gewichtung aller Strikes
"strikeWeight": number, "strikeWeight": number,
// Spieler 1 des Teams // Alle Spieler des Teams
"memberOne": { "users": {
// UUID des Spielers // UUID des Spielers
"uuid": string, "uuid": string,
// Ob der Spieler Tot ist // Ob der Spieler Tot ist
"dead": boolean "dead": boolean
} | null, }[]
// Spieler 2 des Teams
"memberTwo": {
// UUID des Spielers
"uuid": string,
// Ob der Spieler Tot ist
"dead": boolean
} | null
} }
``` ```

View File

@ -1,4 +1,4 @@
import { alias, char, int, mysqlTable, timestamp, varchar } from 'drizzle-orm/mysql-core'; import { char, int, mysqlTable, timestamp, varchar } from 'drizzle-orm/mysql-core';
import type { MySql2Database } from 'drizzle-orm/mysql2'; import type { MySql2Database } from 'drizzle-orm/mysql2';
import { aliasedTable, and, asc, desc, eq, like, sql } from 'drizzle-orm'; import { aliasedTable, and, asc, desc, eq, like, sql } from 'drizzle-orm';
import { teamMember } from './teamMember.ts'; import { teamMember } from './teamMember.ts';
@ -135,13 +135,6 @@ export async function getTeams(db: Database, values: GetTeamsReq) {
} }
export async function getTeamsFull(db: Database, _values: GetTeamsFullReq) { export async function getTeamsFull(db: Database, _values: GetTeamsFullReq) {
const memberOneTeamMember = alias(teamMember, 'member_one_team_member');
const memberTwoTeamMember = alias(teamMember, 'member_two_team_member');
const memberOneUser = alias(user, 'member_one_user');
const memberTwoUser = alias(user, 'member_two_user');
const memberOneDeath = alias(death, 'member_one_death');
const memberTwoDeath = alias(death, 'member_two_death');
const strikeWeightSubquery = db const strikeWeightSubquery = db
.select({ .select({
teamId: team.id, teamId: team.id,
@ -157,19 +150,14 @@ export async function getTeamsFull(db: Database, _values: GetTeamsFullReq) {
return db return db
.select({ .select({
team: team, team: team,
memberOne: memberOneUser, user: user,
memberTwo: memberTwoUser, death: death,
memberOneDeath: memberOneDeath,
memberTwoDeath: memberTwoDeath,
strikeWeight: strikeWeightSubquery.strikeWeight strikeWeight: strikeWeightSubquery.strikeWeight
}) })
.from(team) .from(team)
.leftJoin(memberOneTeamMember, eq(team.id, memberOneTeamMember.teamId)) .leftJoin(teamMember, eq(team.id, teamMember.teamId))
.leftJoin(memberTwoTeamMember, eq(team.id, memberTwoTeamMember.teamId)) .leftJoin(user, eq(teamMember.userId, user.id))
.leftJoin(memberOneUser, eq(memberOneTeamMember.userId, memberOneUser.id)) .leftJoin(death, eq(user.id, death.deadUserId))
.leftJoin(memberTwoUser, eq(memberTwoTeamMember.userId, memberTwoUser.id))
.leftJoin(memberOneDeath, eq(memberOneUser.id, memberOneDeath.deadUserId))
.leftJoin(memberTwoDeath, eq(memberTwoUser.id, memberTwoDeath.deadUserId))
.leftJoin(strikeWeightSubquery, eq(team.id, strikeWeightSubquery.teamId)); .leftJoin(strikeWeightSubquery, eq(team.id, strikeWeightSubquery.teamId));
} }

View File

@ -9,27 +9,25 @@ export const GET: APIRoute = async ({ request }) => {
const teams = await db.getTeamsFull({}); const teams = await db.getTeamsFull({});
const response = []; const response = {} as Record<number, any>;
for (const team of teams) { for (const team of teams) {
response.push({ if (response[team.team.id] === undefined) {
response[team.team.id] = {
name: team.team.name, name: team.team.name,
color: team.team.color, color: team.team.color,
lastJoined: team.team.lastJoined ? new Date(team.team.lastJoined).getTime() : null, lastJoined: team.team.lastJoined ? new Date(team.team.lastJoined).getTime() : null,
strikeWeight: team.strikeWeight ?? 0, strikeWeight: team.strikeWeight ?? 0,
memberOne: team.memberOne users: []
? { };
uuid: team.memberOne.uuid,
dead: team.memberOneDeath != null
}
: null,
memberTwo: team.memberTwo
? {
uuid: team.memberTwo.uuid,
dead: team.memberTwoDeath != null
}
: null
});
} }
return new Response(JSON.stringify(response)); if (team.user) {
response[team.team.id].users.push({
uuid: team.user.uuid,
dead: team.death != null
});
}
}
return new Response(JSON.stringify(Object.values(response)));
}; };