70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server"
|
|
import { migrateArtistData, getMigrationStats } from "@/lib/data-migration"
|
|
|
|
// Public migration endpoint guarded by MIGRATE_TOKEN (bypasses next-auth + middleware auth)
|
|
export async function POST(request: NextRequest) {
|
|
const token =
|
|
request.headers.get("x-migrate-token") ||
|
|
new URL(request.url).searchParams.get("token")
|
|
|
|
// Require strict MIGRATE_TOKEN match
|
|
const MIGRATE_TOKEN = process.env.MIGRATE_TOKEN
|
|
if (!token || token !== MIGRATE_TOKEN) {
|
|
return NextResponse.json({ error: "Forbidden" }, { status: 403 })
|
|
}
|
|
|
|
try {
|
|
await migrateArtistData()
|
|
const stats = await getMigrationStats()
|
|
return NextResponse.json(
|
|
{
|
|
success: true,
|
|
message: "Artist data migration completed successfully",
|
|
stats,
|
|
},
|
|
{ status: 200 }
|
|
)
|
|
} catch (error) {
|
|
console.error("Public migration error:", error)
|
|
return NextResponse.json(
|
|
{
|
|
error: "Migration failed",
|
|
details: error instanceof Error ? error.message : "Unknown error",
|
|
},
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|
|
|
|
export async function GET(request: NextRequest) {
|
|
const token =
|
|
request.headers.get("x-migrate-token") ||
|
|
new URL(request.url).searchParams.get("token")
|
|
|
|
// Require strict MIGRATE_TOKEN match
|
|
const MIGRATE_TOKEN = process.env.MIGRATE_TOKEN
|
|
if (!token || token !== MIGRATE_TOKEN) {
|
|
return NextResponse.json({ error: "Forbidden" }, { status: 403 })
|
|
}
|
|
|
|
try {
|
|
const stats = await getMigrationStats()
|
|
return NextResponse.json(
|
|
{
|
|
success: true,
|
|
stats,
|
|
},
|
|
{ status: 200 }
|
|
)
|
|
} catch (error) {
|
|
console.error("Public migration stats error:", error)
|
|
return NextResponse.json(
|
|
{
|
|
error: "Failed to get migration stats",
|
|
details: error instanceof Error ? error.message : "Unknown error",
|
|
},
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|