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:
@ -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 { 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 { user } from './user.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 }>;
|
||||
|
||||
@ -31,6 +36,8 @@ export type GetTeamsReq = {
|
||||
limit?: number;
|
||||
};
|
||||
|
||||
export type GetTeamsFullReq = {};
|
||||
|
||||
export type GetTeamByIdReq = {
|
||||
id: number;
|
||||
};
|
||||
@ -127,6 +134,45 @@ export async function getTeams(db: Database, values: GetTeamsReq) {
|
||||
.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) {
|
||||
const teams = await db.select().from(team).where(eq(team.id, values.id));
|
||||
|
||||
|
Reference in New Issue
Block a user