All checks were successful
Release / Test backend (push) Successful in 40s
Release / Check ui (push) Successful in 45s
Release / Docker / caddy (push) Successful in 42s
Release / Docker / backend (push) Successful in 2m55s
Release / Docker / runner (push) Successful in 3m3s
Release / Docker / ui (push) Successful in 2m31s
Release / Gitea Release (push) Successful in 43s
Adds backend handlers and SvelteKit UI for an admin text generation tool. The tool lets admins propose and apply AI-generated chapter titles and book descriptions using Cloudflare Workers AI (12 LLM models, model selector shared across both tabs).
34 lines
1004 B
TypeScript
34 lines
1004 B
TypeScript
/**
|
|
* POST /api/admin/text-gen/description
|
|
*
|
|
* Admin-only proxy to the Go backend's book description generation endpoint.
|
|
* Returns an AI-proposed description; does NOT persist anything.
|
|
*/
|
|
|
|
import { json, error } from '@sveltejs/kit';
|
|
import type { RequestHandler } from './$types';
|
|
import { log } from '$lib/server/logger';
|
|
import { backendFetch } from '$lib/server/scraper';
|
|
|
|
export const POST: RequestHandler = async ({ request, locals }) => {
|
|
if (!locals.user || locals.user.role !== 'admin') {
|
|
throw error(403, 'Forbidden');
|
|
}
|
|
|
|
const body = await request.text();
|
|
let res: Response;
|
|
try {
|
|
res = await backendFetch('/api/admin/text-gen/description', {
|
|
method: 'POST',
|
|
headers: { 'content-type': 'application/json' },
|
|
body
|
|
});
|
|
} catch (e) {
|
|
log.error('admin/text-gen/description', 'backend proxy error', { err: String(e) });
|
|
throw error(502, 'Could not reach backend');
|
|
}
|
|
|
|
const data = await res.json().catch(() => ({}));
|
|
return json(data, { status: res.status });
|
|
};
|