Fix: Using bigint and added backend testing
This commit is contained in:
parent
ed6195e1e2
commit
89507f8412
20 changed files with 830 additions and 292 deletions
|
@ -5,7 +5,7 @@ import { guilds } from "~/drizzle/schema";
|
|||
import { BasicAuth } from "~/lib/auth";
|
||||
import { buildConfig } from "~/lib/responseBuilders";
|
||||
import { ErrorResponse, Res } from "~/lib/responses";
|
||||
import { zodId } from "~/lib/zod";
|
||||
import { zodBigIntId } from "~/lib/zod";
|
||||
import { APIResponse } from "~/types/backend";
|
||||
|
||||
type Path = "/api/{guildId}/config";
|
||||
|
@ -22,9 +22,9 @@ export const GET = async (
|
|||
return ErrorResponse("UNAUTHORIZED");
|
||||
}
|
||||
|
||||
let guildId: number;
|
||||
let guildId: bigint;
|
||||
try {
|
||||
guildId = zodId.parse(event.params.guildId);
|
||||
guildId = zodBigIntId.parse(event.params.guildId);
|
||||
} catch (e) {
|
||||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
@ -41,6 +41,32 @@ export const GET = async (
|
|||
return Res("OK", buildConfig(guildQuery));
|
||||
};
|
||||
|
||||
export const POST = async (
|
||||
event: APIEvent,
|
||||
): Promise<APIResponse<Path, "post">> => {
|
||||
switch (event.request.headers.get("authorization")) {
|
||||
case BasicAuth.unencoded:
|
||||
case BasicAuth.encoded:
|
||||
break;
|
||||
|
||||
default:
|
||||
return ErrorResponse("UNAUTHORIZED");
|
||||
}
|
||||
|
||||
let guildId: bigint;
|
||||
try {
|
||||
guildId = zodBigIntId.parse(event.params.guildId);
|
||||
} catch (e) {
|
||||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
||||
const guildQuery = await db.insert(guilds).values({ id: guildId }).execute();
|
||||
|
||||
if (!guildQuery) return ErrorResponse("NOT_FOUND");
|
||||
|
||||
return Res("NO_CONTENT", null);
|
||||
};
|
||||
|
||||
export const DELETE = async (
|
||||
event: APIEvent,
|
||||
): Promise<APIResponse<Path, "delete">> => {
|
||||
|
@ -53,9 +79,9 @@ export const DELETE = async (
|
|||
return ErrorResponse("UNAUTHORIZED");
|
||||
}
|
||||
|
||||
let guildId: number;
|
||||
let guildId: bigint;
|
||||
try {
|
||||
guildId = zodId.parse(event.params.guildId);
|
||||
guildId = zodBigIntId.parse(event.params.guildId);
|
||||
} catch (e) {
|
||||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import { guilds, matches } from "~/drizzle/schema";
|
|||
import { BasicAuth } from "~/lib/auth";
|
||||
import { buildMatches } from "~/lib/responseBuilders";
|
||||
import { ErrorResponse, Res } from "~/lib/responses";
|
||||
import { zodId, zodMatch } from "~/lib/zod";
|
||||
import { zodBigIntId, zodMatch } from "~/lib/zod";
|
||||
import { APIResponse, RequestBody } from "~/types/backend";
|
||||
|
||||
type Path = "/api/{guildId}/matches";
|
||||
|
@ -22,9 +22,9 @@ export const GET = async (
|
|||
return ErrorResponse("UNAUTHORIZED");
|
||||
}
|
||||
|
||||
let guildId: number;
|
||||
let guildId: bigint;
|
||||
try {
|
||||
guildId = zodId.parse(event.params.guildId);
|
||||
guildId = zodBigIntId.parse(event.params.guildId);
|
||||
} catch (e) {
|
||||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
@ -60,9 +60,9 @@ export const POST = async (
|
|||
return ErrorResponse("UNAUTHORIZED");
|
||||
}
|
||||
|
||||
let guildId: number;
|
||||
let guildId: bigint;
|
||||
try {
|
||||
guildId = zodId.parse(event.params.guildId);
|
||||
guildId = zodBigIntId.parse(event.params.guildId);
|
||||
} catch (e) {
|
||||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
@ -94,8 +94,13 @@ export const POST = async (
|
|||
);
|
||||
|
||||
await db.insert(matches).values({
|
||||
...body.match,
|
||||
guildId: guild.id,
|
||||
channelId: BigInt(body.match.channelId),
|
||||
roleId: BigInt(body.match.roleId),
|
||||
createrId: BigInt(body.match.createrId),
|
||||
messageId: BigInt(body.match.messageId),
|
||||
matchType: body.match.matchType,
|
||||
opponentName: body.match.opponentName,
|
||||
utc_ts: new Date(body.match.utc_ts),
|
||||
});
|
||||
|
||||
|
|
|
@ -4,14 +4,14 @@ import db from "~/drizzle";
|
|||
import { guilds, tpMessages } from "~/drizzle/schema";
|
||||
import { BasicAuth } from "~/lib/auth";
|
||||
import { ErrorResponse, Res } from "~/lib/responses";
|
||||
import { zodId, zodTpMessages } from "~/lib/zod";
|
||||
import { zodBigIntId, zodTpMessages } from "~/lib/zod";
|
||||
import { APIResponse, RequestBody } from "~/types/backend";
|
||||
|
||||
type Path = "/api/{guildId}/tp_messages";
|
||||
type Path = "/api/{guildId}/timePlanning";
|
||||
|
||||
const DayKeys = ["0", "1", "2", "3", "4", "5", "6"] as const;
|
||||
type DayKeys = (typeof DayKeys)[number];
|
||||
type Messages = Record<DayKeys, number | null>;
|
||||
type Messages = Record<DayKeys, string | null>;
|
||||
|
||||
export const GET = async (
|
||||
event: APIEvent,
|
||||
|
@ -25,9 +25,9 @@ export const GET = async (
|
|||
return ErrorResponse("UNAUTHORIZED");
|
||||
}
|
||||
|
||||
let guildId: number;
|
||||
let guildId: bigint;
|
||||
try {
|
||||
guildId = zodId.parse(event.params.guildId);
|
||||
guildId = zodBigIntId.parse(event.params.guildId);
|
||||
} catch (e) {
|
||||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
@ -41,13 +41,11 @@ export const GET = async (
|
|||
|
||||
if (!guild) return ErrorResponse("NOT_FOUND");
|
||||
|
||||
if (!guild.tpEnabled || !guild.tpChannelId) return Res("NO_CONTENT", null);
|
||||
|
||||
const tpMessages = guild.tpMessages.reduce(
|
||||
(acc, message) => {
|
||||
const day = message.day.toString() as DayKeys;
|
||||
if (!/^[0-6]$/.test(day)) return acc;
|
||||
acc[day] = message.messageId;
|
||||
acc[day] = message.messageId?.toString() ?? null;
|
||||
return acc;
|
||||
},
|
||||
{
|
||||
|
@ -62,7 +60,11 @@ export const GET = async (
|
|||
);
|
||||
|
||||
return Res("OK", {
|
||||
channelId: guild.tpChannelId,
|
||||
enabled: guild.tpEnabled,
|
||||
channelId: guild.tpChannelId?.toString() ?? null,
|
||||
rolesEnabled: guild.tpRolesEnabled,
|
||||
isAvailableRoleId: guild.isAvailableRoleId?.toString() ?? null,
|
||||
wantsToBeNotifieRoledId: guild.wantsToBeNotifieRoledId?.toString() ?? null,
|
||||
messageIds: tpMessages,
|
||||
});
|
||||
};
|
||||
|
@ -79,9 +81,9 @@ export const PUT = async (
|
|||
return ErrorResponse("UNAUTHORIZED");
|
||||
}
|
||||
|
||||
let guildId: number;
|
||||
let guildId: bigint;
|
||||
try {
|
||||
guildId = zodId.parse(event.params.guildId);
|
||||
guildId = zodBigIntId.parse(event.params.guildId);
|
||||
} catch (e) {
|
||||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
@ -95,8 +97,6 @@ export const PUT = async (
|
|||
|
||||
if (!guild) return ErrorResponse("NOT_FOUND");
|
||||
|
||||
if (!guild.tpEnabled) return ErrorResponse("FORBIDDEN");
|
||||
|
||||
const unparsedBody = await new Response(event.request.body).json();
|
||||
|
||||
let body: RequestBody<Path, "put">;
|
||||
|
@ -106,19 +106,36 @@ export const PUT = async (
|
|||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
||||
if (guild.tpChannelId !== body.channelId)
|
||||
const {
|
||||
enabled,
|
||||
channelId,
|
||||
rolesEnabled,
|
||||
isAvailableRoleId,
|
||||
wantsToBeNotifieRoledId,
|
||||
messageIds,
|
||||
} = body;
|
||||
if (guild.tpChannelId !== channelId)
|
||||
await db
|
||||
.update(guilds)
|
||||
.set({ tpChannelId: body.channelId })
|
||||
.set({
|
||||
tpEnabled: enabled,
|
||||
tpChannelId: channelId ? BigInt(channelId) : null,
|
||||
tpRolesEnabled: rolesEnabled,
|
||||
isAvailableRoleId: isAvailableRoleId ? BigInt(isAvailableRoleId) : null,
|
||||
wantsToBeNotifieRoledId: wantsToBeNotifieRoledId
|
||||
? BigInt(wantsToBeNotifieRoledId)
|
||||
: null,
|
||||
})
|
||||
.where(eq(guilds.id, guild.id))
|
||||
.execute();
|
||||
|
||||
await Promise.all(
|
||||
DayKeys.map(async (dayStr) => {
|
||||
const day = parseInt(dayStr);
|
||||
const messageId = messageIds[dayStr];
|
||||
await db
|
||||
.update(tpMessages)
|
||||
.set({ messageId: body.messageIds[dayStr] })
|
||||
.set({ messageId: messageId ? BigInt(messageId) : null })
|
||||
.where(and(eq(tpMessages.guildId, guild.id), eq(tpMessages.day, day)))
|
||||
.execute();
|
||||
}),
|
|
@ -5,7 +5,7 @@ import { guilds } from "~/drizzle/schema";
|
|||
import { BasicAuth } from "~/lib/auth";
|
||||
import { buildConfig } from "~/lib/responseBuilders";
|
||||
import { ErrorResponse, Res } from "~/lib/responses";
|
||||
import { zodId } from "~/lib/zod";
|
||||
import { zodBigIntId } from "~/lib/zod";
|
||||
import { APIResponse } from "~/types/backend";
|
||||
|
||||
type Path = "/api/boot";
|
||||
|
@ -22,9 +22,9 @@ export const GET = async (
|
|||
return ErrorResponse("UNAUTHORIZED");
|
||||
}
|
||||
|
||||
let guildId: number;
|
||||
let guildId: bigint;
|
||||
try {
|
||||
guildId = zodId.parse(event.params.guildId);
|
||||
guildId = zodBigIntId.parse(event.params.guildId);
|
||||
} catch (e) {
|
||||
return ErrorResponse("BAD_REQUEST", JSON.stringify(e));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue