diff --git a/src/app/api/people/[username]/export/route.ts b/src/app/api/people/[username]/export/route.ts new file mode 100644 index 0000000..8f60c58 --- /dev/null +++ b/src/app/api/people/[username]/export/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; +import { getContributorPassport } from "@/lib/passport"; +import { verifySessionToken, COOKIE_NAME } from "@/lib/auth/session"; + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ username: string }> } +) { + const { username } = await params; + const token = request.cookies.get(COOKIE_NAME)?.value; + const sessionUser = token ? await verifySessionToken(token) : null; + + const passport = await getContributorPassport(username, sessionUser?.id); + + if ("notFound" in passport) { + return NextResponse.json({ error: "Contributor not found" }, { status: 404 }); + } + + if ("isPrivate" in passport) { + return NextResponse.json( + { error: "Contributor passport is private" }, + { status: 403 } + ); + } + + return NextResponse.json({ + platform: "TechNexusOrg", + schemaVersion: "1.0.0", + exportedAt: new Date().toISOString(), + passport, + }); +} diff --git a/src/app/people/[username]/page.tsx b/src/app/people/[username]/page.tsx index 025ef67..70cb8e0 100644 --- a/src/app/people/[username]/page.tsx +++ b/src/app/people/[username]/page.tsx @@ -87,6 +87,23 @@ export default async function ContributorPassportPage({ return (
+ {/* Schema.org Person JSON-LD */} +