mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-26 09:20:24 -05:00
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import type { LoaderFunctionArgs } from "@remix-run/node";
|
|
import { z } from "zod/v4";
|
|
import { requireUserId } from "~/features/auth/core/user.server";
|
|
import * as BuildRepository from "~/features/builds/BuildRepository.server";
|
|
import type { Ability } from "~/modules/in-game-lists/types";
|
|
import { actualNumber, id } from "~/utils/zod";
|
|
|
|
const newBuildLoaderParamsSchema = z.object({
|
|
buildId: z.preprocess(actualNumber, id),
|
|
});
|
|
|
|
export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
const user = await requireUserId(request);
|
|
const url = new URL(request.url);
|
|
|
|
const params = newBuildLoaderParamsSchema.safeParse(
|
|
Object.fromEntries(url.searchParams),
|
|
);
|
|
|
|
const usersBuilds = await BuildRepository.allByUserId({
|
|
userId: user.id,
|
|
showPrivate: true,
|
|
});
|
|
const buildToEdit = usersBuilds.find(
|
|
(b) => params.success && b.id === params.data.buildId,
|
|
);
|
|
|
|
return {
|
|
buildToEdit,
|
|
gearIdToAbilities: resolveGearIdToAbilities(),
|
|
};
|
|
|
|
function resolveGearIdToAbilities() {
|
|
return usersBuilds.reduce(
|
|
(acc, build) => {
|
|
acc[`HEAD_${build.headGearSplId}`] = build.abilities[0];
|
|
acc[`CLOTHES_${build.clothesGearSplId}`] = build.abilities[1];
|
|
acc[`SHOES_${build.shoesGearSplId}`] = build.abilities[2];
|
|
|
|
return acc;
|
|
},
|
|
{} as Record<string, [Ability, Ability, Ability, Ability]>,
|
|
);
|
|
}
|
|
};
|