altarra/src/app/api/admin/upload/route.ts
2026-01-08 19:34:34 +00:00

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)
}