Switched /api/resume to /resume with ISR, added additional classic redirects

This commit is contained in:
2025-04-05 22:10:03 -05:00
parent b768f5a40d
commit 129a59340a
3 changed files with 58 additions and 30 deletions

View File

@@ -72,8 +72,21 @@ const config = {
async redirects() {
// Source cannot end with / slash
return [
{ source: "/resume", destination: "/api/resume", permanent: false },
{ source: "/resume.pdf", destination: "/api/resume", permanent: false },
...[
"resume.pdf",
"resume.docx",
"resume.txt",
"resum",
"resumee",
"cv",
"cover.pdf",
"cv.docx",
"cv.pdf",
].map((ext) => ({
source: `/${ext}`,
destination: "/resume",
permanent: true,
})),
...v2_redirects,
];
},

43
src/pages/[resume].tsx Normal file
View File

@@ -0,0 +1,43 @@
import directus from "@/utils/directus";
import { readSingleton } from "@directus/sdk";
import {
GetStaticPaths,
GetStaticPropsContext,
GetStaticPropsResult,
} from "next";
// 'blocking' fallback, but don't provide any paths for pre-rendering; it will fail otherwise for redirect paths.
export const getStaticPaths: GetStaticPaths = async () => {
return { paths: [], fallback: "blocking" };
};
// Handle static props for `[resume]` route.
export async function getStaticProps({
params,
}: GetStaticPropsContext<{ resume: string }>): Promise<
GetStaticPropsResult<never>
> {
const { resume } = params ?? {};
if (resume !== "resume") return { notFound: true };
try {
console.log("Revalidating resume redirect");
const metadata = await directus.request(readSingleton("metadata"));
const resumeUrl = `${directus.url}assets/${metadata.resume}/${
metadata.resumeFilename ?? "resume.pdf"
}`;
return {
redirect: { destination: resumeUrl, permanent: false },
revalidate: 3600,
};
} catch (error) {
console.error("Failed to acquire resume asset URL", error);
throw new Error(`Failed to acquire asset (${error})`);
}
}
// Empty component as the page redirects or returns `notFound`.
export default function Resume() {
return <></>;
}

View File

@@ -1,28 +0,0 @@
import directus from "@/utils/directus";
import { readSingleton } from "@directus/sdk";
import type { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
) {
if (req.method !== "GET" && req.method !== "HEAD")
return res.status(405).json({ message: "Method not allowed" });
// Get the resume
try {
const metadata = await directus.request(readSingleton("metadata"));
const resumeUrl = `${directus.url}assets/${metadata.resume}/${
metadata.resumeFilename ?? "resume.pdf"
}`;
return res.redirect(301, resumeUrl);
} catch (error) {
console.error({
message: "Failed to acquire resume URL",
error,
});
return res.status(500).send({ error: "Failed to acquire resume URL" });
}
}