72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import {
|
|
renderOtpEmail,
|
|
renderTeamInviteEmail,
|
|
renderUsageWarningEmail,
|
|
renderUsageLimitReachedEmail,
|
|
} from "~/server/email-templates";
|
|
|
|
export async function GET(request: NextRequest) {
|
|
const { searchParams } = new URL(request.url);
|
|
const type = searchParams.get("type") || "otp";
|
|
|
|
if (process.env.NODE_ENV !== "development") {
|
|
return NextResponse.json({ error: "Not Found" }, { status: 404 });
|
|
}
|
|
|
|
try {
|
|
let html: string;
|
|
|
|
if (type === "otp") {
|
|
html = await renderOtpEmail({
|
|
otpCode: "ABC123",
|
|
loginUrl: "https://app.usesend.com/login?token=abc123",
|
|
hostName: "useSend",
|
|
});
|
|
} else if (type === "invite") {
|
|
html = await renderTeamInviteEmail({
|
|
teamName: "My Awesome Team",
|
|
inviteUrl: "https://app.usesend.com/join-team?inviteId=123",
|
|
inviterName: "John Doe",
|
|
role: "admin",
|
|
});
|
|
} else if (type === "usage-warning") {
|
|
const isPaidPlan = searchParams.get("isPaidPlan") === "true";
|
|
const period = searchParams.get("period") || "daily";
|
|
|
|
html = await renderUsageWarningEmail({
|
|
teamName: "Acme Inc",
|
|
used: 8000,
|
|
limit: 10000,
|
|
period: period as "daily" | "monthly",
|
|
manageUrl: "https://app.usesend.com/settings/billing",
|
|
isPaidPlan: isPaidPlan,
|
|
});
|
|
} else if (type === "usage-limit") {
|
|
const isPaidPlan = searchParams.get("isPaidPlan") === "true";
|
|
const period = searchParams.get("period") || "daily";
|
|
html = await renderUsageLimitReachedEmail({
|
|
teamName: "Acme Inc",
|
|
limit: 10000,
|
|
period: period as "daily" | "monthly",
|
|
manageUrl: "https://app.usesend.com/settings/billing",
|
|
isPaidPlan: isPaidPlan,
|
|
});
|
|
} else {
|
|
return NextResponse.json({ error: "Invalid type" }, { status: 400 });
|
|
}
|
|
|
|
return new NextResponse(html, {
|
|
headers: {
|
|
"Content-Type": "text/html",
|
|
},
|
|
});
|
|
} catch (error) {
|
|
console.error("Error rendering email template:", error);
|
|
return NextResponse.json(
|
|
{ error: "Failed to render email template" },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|