From 9785a8c0874cb70389efba2bdff5f5e53e924c3c Mon Sep 17 00:00:00 2001 From: bytedream Date: Sun, 18 May 2025 22:49:04 +0200 Subject: [PATCH] fix teams api --- README.md | 13 +++---------- src/db/schema/team.ts | 24 ++++++----------------- src/pages/api/team/index.ts | 38 ++++++++++++++++++------------------- 3 files changed, 27 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index a532d44..20e3226 100644 --- a/README.md +++ b/README.md @@ -169,20 +169,13 @@ "lastJoined": number | null, // Gewichtung aller Strikes "strikeWeight": number, - // Spieler 1 des Teams - "memberOne": { + // Alle Spieler des Teams + "users": { // UUID des Spielers "uuid": string, // Ob der Spieler Tot ist "dead": boolean - } | null, - // Spieler 2 des Teams - "memberTwo": { - // UUID des Spielers - "uuid": string, - // Ob der Spieler Tot ist - "dead": boolean - } | null + }[] } ``` diff --git a/src/db/schema/team.ts b/src/db/schema/team.ts index 29cae91..48b9a69 100644 --- a/src/db/schema/team.ts +++ b/src/db/schema/team.ts @@ -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 { aliasedTable, and, asc, desc, eq, like, sql } from 'drizzle-orm'; 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) { - 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 .select({ teamId: team.id, @@ -157,19 +150,14 @@ export async function getTeamsFull(db: Database, _values: GetTeamsFullReq) { return db .select({ team: team, - memberOne: memberOneUser, - memberTwo: memberTwoUser, - memberOneDeath: memberOneDeath, - memberTwoDeath: memberTwoDeath, + user: user, + death: death, strikeWeight: strikeWeightSubquery.strikeWeight }) .from(team) - .leftJoin(memberOneTeamMember, eq(team.id, memberOneTeamMember.teamId)) - .leftJoin(memberTwoTeamMember, eq(team.id, memberTwoTeamMember.teamId)) - .leftJoin(memberOneUser, eq(memberOneTeamMember.userId, memberOneUser.id)) - .leftJoin(memberTwoUser, eq(memberTwoTeamMember.userId, memberTwoUser.id)) - .leftJoin(memberOneDeath, eq(memberOneUser.id, memberOneDeath.deadUserId)) - .leftJoin(memberTwoDeath, eq(memberTwoUser.id, memberTwoDeath.deadUserId)) + .leftJoin(teamMember, eq(team.id, teamMember.teamId)) + .leftJoin(user, eq(teamMember.userId, user.id)) + .leftJoin(death, eq(user.id, death.deadUserId)) .leftJoin(strikeWeightSubquery, eq(team.id, strikeWeightSubquery.teamId)); } diff --git a/src/pages/api/team/index.ts b/src/pages/api/team/index.ts index ca7da9e..298d7a7 100644 --- a/src/pages/api/team/index.ts +++ b/src/pages/api/team/index.ts @@ -9,27 +9,25 @@ export const GET: APIRoute = async ({ request }) => { const teams = await db.getTeamsFull({}); - const response = []; + const response = {} as Record; for (const team of teams) { - response.push({ - name: team.team.name, - color: team.team.color, - lastJoined: team.team.lastJoined ? new Date(team.team.lastJoined).getTime() : null, - strikeWeight: team.strikeWeight ?? 0, - memberOne: team.memberOne - ? { - uuid: team.memberOne.uuid, - dead: team.memberOneDeath != null - } - : null, - memberTwo: team.memberTwo - ? { - uuid: team.memberTwo.uuid, - dead: team.memberTwoDeath != null - } - : null - }); + if (response[team.team.id] === undefined) { + response[team.team.id] = { + name: team.team.name, + color: team.team.color, + lastJoined: team.team.lastJoined ? new Date(team.team.lastJoined).getTime() : null, + strikeWeight: team.strikeWeight ?? 0, + users: [] + }; + } + + if (team.user) { + response[team.team.id].users.push({ + uuid: team.user.uuid, + dead: team.death != null + }); + } } - return new Response(JSON.stringify(response)); + return new Response(JSON.stringify(Object.values(response))); };