update team get endpoint
All checks were successful
deploy / build-and-deploy (push) Successful in 28s
All checks were successful
deploy / build-and-deploy (push) Successful in 28s
This commit is contained in:
parent
560bf04b6c
commit
201829a523
22
README.md
22
README.md
@ -143,7 +143,7 @@
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><code>POST</code> <code>/api/teams</code> (Liste aller Teams)</summary>
|
<summary><code>GET</code> <code>/api/team</code> (Liste aller Teams)</summary>
|
||||||
|
|
||||||
##### Request Body
|
##### Request Body
|
||||||
|
|
||||||
@ -165,8 +165,24 @@
|
|||||||
"name": string,
|
"name": string,
|
||||||
// Teamfarbe in HEX
|
// Teamfarbe in HEX
|
||||||
"color": string,
|
"color": string,
|
||||||
// UUIDs aller Teammitglieder
|
// UTC timestamp wann das Team zuletzt gejoined ist
|
||||||
"users": (string | null)[]
|
"lastJoined": number | null,
|
||||||
|
// Gewichtung aller Strikes
|
||||||
|
"strikeWeight": number,
|
||||||
|
// Spieler 1 des Teams
|
||||||
|
"memberOne": {
|
||||||
|
// 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
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -26,7 +26,9 @@ import {
|
|||||||
type GetTeamByUserUuidReq,
|
type GetTeamByUserUuidReq,
|
||||||
getTeamByUserUuid,
|
getTeamByUserUuid,
|
||||||
type EditTeamReq,
|
type EditTeamReq,
|
||||||
editTeam
|
editTeam,
|
||||||
|
type GetTeamsFullReq,
|
||||||
|
getTeamsFull
|
||||||
} from './schema/team';
|
} from './schema/team';
|
||||||
import {
|
import {
|
||||||
addTeamDraft,
|
addTeamDraft,
|
||||||
@ -176,6 +178,7 @@ export class Database {
|
|||||||
editTeam = (values: EditTeamReq) => editTeam(this.db, values);
|
editTeam = (values: EditTeamReq) => editTeam(this.db, values);
|
||||||
deleteTeam = (values: DeleteTeamReq) => deleteTeam(this.db, values);
|
deleteTeam = (values: DeleteTeamReq) => deleteTeam(this.db, values);
|
||||||
getTeams = (values: GetTeamsReq) => getTeams(this.db, values);
|
getTeams = (values: GetTeamsReq) => getTeams(this.db, values);
|
||||||
|
getTeamsFull = (values: GetTeamsFullReq) => getTeamsFull(this.db, values);
|
||||||
getTeamById = (values: GetTeamByIdReq) => getTeamById(this.db, values);
|
getTeamById = (values: GetTeamByIdReq) => getTeamById(this.db, values);
|
||||||
getTeamByName = (values: GetTeamByNameReq) => getTeamByName(this.db, values);
|
getTeamByName = (values: GetTeamByNameReq) => getTeamByName(this.db, values);
|
||||||
getTeamByUserUuid = (values: GetTeamByUserUuidReq) => getTeamByUserUuid(this.db, values);
|
getTeamByUserUuid = (values: GetTeamByUserUuidReq) => getTeamByUserUuid(this.db, values);
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
import { char, int, mysqlTable, timestamp, varchar } from 'drizzle-orm/mysql-core';
|
import { alias, 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 } from 'drizzle-orm';
|
import { aliasedTable, and, asc, desc, eq, like, sql } from 'drizzle-orm';
|
||||||
import { teamMember } from './teamMember.ts';
|
import { teamMember } from './teamMember.ts';
|
||||||
import { user } from './user.ts';
|
import { user } from './user.ts';
|
||||||
import { teamDraft } from './teamDraft.ts';
|
import { teamDraft } from './teamDraft.ts';
|
||||||
|
import { death } from '@db/schema/death.ts';
|
||||||
|
import { report } from '@db/schema/report.ts';
|
||||||
|
import { reportStatus } from '@db/schema/reportStatus.ts';
|
||||||
|
import { strikeReason } from '@db/schema/strikeReason.ts';
|
||||||
|
import { strike } from '@db/schema/strike.ts';
|
||||||
|
|
||||||
type Database = MySql2Database<{ team: typeof team }>;
|
type Database = MySql2Database<{ team: typeof team }>;
|
||||||
|
|
||||||
@ -31,6 +36,8 @@ export type GetTeamsReq = {
|
|||||||
limit?: number;
|
limit?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type GetTeamsFullReq = {};
|
||||||
|
|
||||||
export type GetTeamByIdReq = {
|
export type GetTeamByIdReq = {
|
||||||
id: number;
|
id: number;
|
||||||
};
|
};
|
||||||
@ -127,6 +134,45 @@ export async function getTeams(db: Database, values: GetTeamsReq) {
|
|||||||
.limit(values?.limit ?? 100);
|
.limit(values?.limit ?? 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
strikeWeight: sql<number>`cast(sum(${strikeReason.weight}) as int)`.as('strikeWeight')
|
||||||
|
})
|
||||||
|
.from(strike)
|
||||||
|
.innerJoin(strikeReason, eq(strike.strikeReasonId, strikeReason.id))
|
||||||
|
.innerJoin(reportStatus, eq(strike.id, reportStatus.strikeId))
|
||||||
|
.innerJoin(report, eq(reportStatus.reportId, report.id))
|
||||||
|
.innerJoin(team, eq(report.reportedTeamId, team.id))
|
||||||
|
.as('strike_weight_subquery');
|
||||||
|
|
||||||
|
return db
|
||||||
|
.select({
|
||||||
|
team: team,
|
||||||
|
memberOne: memberOneUser,
|
||||||
|
memberTwo: memberTwoUser,
|
||||||
|
memberOneDeath: memberOneDeath,
|
||||||
|
memberTwoDeath: memberTwoDeath,
|
||||||
|
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(strikeWeightSubquery, eq(team.id, strikeWeightSubquery.teamId));
|
||||||
|
}
|
||||||
|
|
||||||
export async function getTeamById(db: Database, values: GetTeamByIdReq) {
|
export async function getTeamById(db: Database, values: GetTeamByIdReq) {
|
||||||
const teams = await db.select().from(team).where(eq(team.id, values.id));
|
const teams = await db.select().from(team).where(eq(team.id, values.id));
|
||||||
|
|
||||||
|
@ -7,18 +7,27 @@ export const GET: APIRoute = async ({ request }) => {
|
|||||||
return new Response(null, { status: 401 });
|
return new Response(null, { status: 401 });
|
||||||
}
|
}
|
||||||
|
|
||||||
const teams = await db.getTeams({});
|
const teams = await db.getTeamsFull({});
|
||||||
|
|
||||||
const response = [];
|
const response = [];
|
||||||
for (const team of teams) {
|
for (const team of teams) {
|
||||||
const users = [];
|
|
||||||
if (team.memberOne.uuid) users.push(team.memberOne.uuid);
|
|
||||||
if (team.memberTwo.uuid) users.push(team.memberTwo.uuid);
|
|
||||||
|
|
||||||
response.push({
|
response.push({
|
||||||
name: team.name,
|
name: team.team.name,
|
||||||
color: team.color,
|
color: team.team.color,
|
||||||
users: users
|
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
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user