partial: annotate rest of admin routes

This commit is contained in:
DecDuck
2025-08-10 09:26:20 +10:00
parent 90b02b7f8e
commit 80f7757558
19 changed files with 119 additions and 58 deletions

View File

@ -11,51 +11,56 @@ const CreateNews = type({
tags: "string = '[]'",
});
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["news:create"]);
if (!allowed) throw createError({ statusCode: 403 });
/**
* Create a new news article
*/
export default defineEventHandler<{ body: typeof CreateNews.infer }>(
async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["news:create"]);
if (!allowed) throw createError({ statusCode: 403 });
const form = await readMultipartFormData(h3);
if (!form)
throw createError({
statusCode: 400,
statusMessage: "This endpoint requires multipart form data.",
const form = await readMultipartFormData(h3);
if (!form)
throw createError({
statusCode: 400,
statusMessage: "This endpoint requires multipart form data.",
});
const uploadResult = await handleFileUpload(h3, {}, ["internal:read"], 1);
if (!uploadResult)
throw createError({
statusCode: 400,
statusMessage: "Failed to upload file",
});
const [imageIds, options, pull, _dump] = uploadResult;
const body = await CreateNews(options);
if (body instanceof ArkErrors)
throw createError({ statusCode: 400, statusMessage: body.summary });
const parsedTags = JSON.parse(body.tags);
if (typeof parsedTags !== "object" || !Array.isArray(parsedTags))
throw createError({
statusCode: 400,
statusMessage: "Tags must be an array",
});
const imageId = imageIds.at(0);
const article = await newsManager.create({
title: body.title,
description: body.description,
content: body.content,
tags: parsedTags,
...(imageId && { imageObjectId: imageId }),
authorId: "system",
});
const uploadResult = await handleFileUpload(h3, {}, ["internal:read"], 1);
if (!uploadResult)
throw createError({
statusCode: 400,
statusMessage: "Failed to upload file",
});
await pull();
const [imageIds, options, pull, _dump] = uploadResult;
const body = await CreateNews(options);
if (body instanceof ArkErrors)
throw createError({ statusCode: 400, statusMessage: body.summary });
const parsedTags = JSON.parse(body.tags);
if (typeof parsedTags !== "object" || !Array.isArray(parsedTags))
throw createError({
statusCode: 400,
statusMessage: "Tags must be an array",
});
const imageId = imageIds.at(0);
const article = await newsManager.create({
title: body.title,
description: body.description,
content: body.content,
tags: parsedTags,
...(imageId && { imageObjectId: imageId }),
authorId: "system",
});
await pull();
return article;
});
return article;
},
);