40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import type { LoaderFunction } from "@remix-run/node";
|
|
import { json } from "superjson-remix";
|
|
import { Prisma } from "@prisma/client";
|
|
|
|
import { requireLoggedIn } from "~/utils/auth.server";
|
|
import db from "~/utils/db.server";
|
|
|
|
export type KeypadLoaderData = {
|
|
hasOngoingSubscription: boolean;
|
|
hasPhoneNumber: boolean;
|
|
lastRecipientCalled?: string;
|
|
};
|
|
|
|
const loader: LoaderFunction = async ({ request }) => {
|
|
const { twilio } = await requireLoggedIn(request);
|
|
const phoneNumber = await db.phoneNumber.findUnique({
|
|
where: { twilioAccountSid_isCurrent: { twilioAccountSid: twilio?.accountSid ?? "", isCurrent: true } },
|
|
});
|
|
const hasOngoingSubscription = true; // TODO
|
|
const hasPhoneNumber = Boolean(phoneNumber);
|
|
const lastCall =
|
|
phoneNumber &&
|
|
(await db.phoneCall.findFirst({
|
|
where: { phoneNumberId: phoneNumber.id },
|
|
orderBy: { createdAt: Prisma.SortOrder.desc },
|
|
}));
|
|
return json<KeypadLoaderData>(
|
|
{
|
|
hasOngoingSubscription,
|
|
hasPhoneNumber,
|
|
lastRecipientCalled: lastCall?.recipient,
|
|
},
|
|
{
|
|
headers: { Vary: "Cookie" },
|
|
},
|
|
);
|
|
};
|
|
|
|
export default loader;
|