57 lines
1.8 KiB
TypeScript
57 lines
1.8 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { writeFile, mkdir } from 'node:fs/promises'
|
|
import path from 'node:path'
|
|
import { readConfig } from '@/utils/config'
|
|
|
|
export const runtime = 'nodejs'
|
|
|
|
export async function POST(req: NextRequest) {
|
|
const password = req.headers.get('x-admin-password') || ''
|
|
const config = await readConfig()
|
|
|
|
if (password !== config.adminPassword) {
|
|
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
|
|
}
|
|
|
|
const formData = await req.formData()
|
|
const csvFile = formData.get('csv') as File | null
|
|
const logoFile = formData.get('logo') as File | null
|
|
|
|
const results: { csv?: string; logo?: string; error?: string } = {}
|
|
|
|
if (csvFile) {
|
|
try {
|
|
const buffer = await csvFile.arrayBuffer()
|
|
const csvDir = path.join(process.cwd(), 'src', 'data')
|
|
await mkdir(csvDir, { recursive: true })
|
|
const csvPath = path.join(csvDir, csvFile.name)
|
|
await writeFile(csvPath, Buffer.from(buffer))
|
|
results.csv = `✓ CSV uploaded: ${csvFile.name}`
|
|
} catch (e: any) {
|
|
results.error = `CSV upload failed: ${e.message}`
|
|
}
|
|
}
|
|
|
|
if (logoFile) {
|
|
try {
|
|
const buffer = await logoFile.arrayBuffer()
|
|
const logoDir = path.join(process.cwd(), 'public', 'branding')
|
|
await mkdir(logoDir, { recursive: true })
|
|
const logoPath = path.join(logoDir, logoFile.name)
|
|
await writeFile(logoPath, Buffer.from(buffer))
|
|
results.logo = `✓ Logo uploaded: ${logoFile.name}`
|
|
} catch (e: any) {
|
|
results.error = `Logo upload failed: ${e.message}`
|
|
}
|
|
}
|
|
|
|
if (!csvFile && !logoFile) {
|
|
return NextResponse.json({ error: 'No files provided' }, { status: 400 })
|
|
}
|
|
|
|
if (results.error) {
|
|
return NextResponse.json(results, { status: 500 })
|
|
}
|
|
|
|
return NextResponse.json(results)
|
|
}
|