mirror of
https://github.com/Xevion/xevion.dev.git
synced 2025-12-06 09:17:05 -06:00
Switched /api/resume to /resume with ISR, added additional classic redirects
This commit is contained in:
@@ -72,8 +72,21 @@ const config = {
|
|||||||
async redirects() {
|
async redirects() {
|
||||||
// Source cannot end with / slash
|
// Source cannot end with / slash
|
||||||
return [
|
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,
|
...v2_redirects,
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
|||||||
43
src/pages/[resume].tsx
Normal file
43
src/pages/[resume].tsx
Normal 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 <></>;
|
||||||
|
}
|
||||||
@@ -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" });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user