async getUserByToken({ token }: { token: string }) {
const sq = this.db
.select()
.from(bansTable)
.where(gt(bansTable.issuedUntil, dayjs().toDate()))
.as("sq");
const data = await this.db
.select({
id: sessionsTable.id,
token: sessionsTable.token,
refreshToken: sessionsTable.refreshToken,
rejectedAt: sessionsTable.rejectedAt,
createdAt: sessionsTable.createdAt,
user: jsonBuildObject({
id: usersTable.id,
username: usersTable.username,
discordUsername: usersTable.discordUsername,
discordId: usersTable.discordId,
createdAt: usersTable.createdAt,
email: usersTable.email,
}),
bans: jsonAggBuildObject({
id: sq.id,
issuedTo: sq.issuedTo,
issuedUntil: sq.issuedUntil,
issuedBy: sq.issuedBy,
reason: sq.reason,
issuedAt: sq.issuedAt,
}),
})
.from(sessionsTable)
.leftJoin(usersTable, eq(sessionsTable.userId, usersTable.id))
.leftJoin(sq, eq(usersTable.id, sq.issuedTo))
.where(eq(sessionsTable.token, token))
.groupBy(usersTable.id, sessionsTable.id);
return takeFirst(data);
}
async getUserByToken({ token }: { token: string }) {
const sq = this.db
.select()
.from(bansTable)
.where(gt(bansTable.issuedUntil, dayjs().toDate()))
.as("sq");
const data = await this.db
.select({
id: sessionsTable.id,
token: sessionsTable.token,
refreshToken: sessionsTable.refreshToken,
rejectedAt: sessionsTable.rejectedAt,
createdAt: sessionsTable.createdAt,
user: jsonBuildObject({
id: usersTable.id,
username: usersTable.username,
discordUsername: usersTable.discordUsername,
discordId: usersTable.discordId,
createdAt: usersTable.createdAt,
email: usersTable.email,
}),
bans: jsonAggBuildObject({
id: sq.id,
issuedTo: sq.issuedTo,
issuedUntil: sq.issuedUntil,
issuedBy: sq.issuedBy,
reason: sq.reason,
issuedAt: sq.issuedAt,
}),
})
.from(sessionsTable)
.leftJoin(usersTable, eq(sessionsTable.userId, usersTable.id))
.leftJoin(sq, eq(usersTable.id, sq.issuedTo))
.where(eq(sessionsTable.token, token))
.groupBy(usersTable.id, sessionsTable.id);
return takeFirst(data);
}