Supra_App/src/routes/api/catalog-banner/+server.ts

41 lines
1.5 KiB
TypeScript
Raw Normal View History

import { json, error } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { env } from '$env/dynamic/public';
const API_BASE = env.PUBLIC_POST_IMAGE;
// Replace an existing promo's banner image.
export const POST: RequestHandler = async ({ request }) => {
try {
const formData = await request.formData();
const country = formData.get('country') as string;
const slug = formData.get('slug') as string;
const uid = formData.get('uid') as string;
const displayName = formData.get('displayName') as string;
const email = formData.get('email') as string;
const banner = formData.get('banner') as File;
if (!country || !slug || !uid || !displayName || !email || !banner) {
throw error(400, 'Missing required fields');
}
const endpoint =
`${API_BASE}/catalog/banner/${encodeURIComponent(country)}/${encodeURIComponent(slug)}` +
`/${encodeURIComponent(uid)}/${encodeURIComponent(displayName)}/${encodeURIComponent(email)}`;
const upstream = new FormData();
upstream.append('banner', banner);
const response = await fetch(endpoint, { method: 'POST', body: upstream });
if (!response.ok) {
const data = await response.json().catch(() => ({ detail: response.statusText }));
throw error(response.status, data.detail || 'Replace banner failed');
}
return json(await response.json());
} catch (err) {
if (err && typeof err === 'object' && 'status' in err) throw err;
throw error(500, err instanceof Error ? err.message : 'Internal server error');
}
};