feat: file uploads on news articles

This commit is contained in:
DecDuck
2025-03-11 17:51:46 +11:00
parent 137241fdbb
commit 0f0874c10a
7 changed files with 257 additions and 159 deletions

View File

@ -1,23 +1,51 @@
import { defineEventHandler, createError, readBody } from "h3";
import aclManager from "~/server/internal/acls";
import newsManager from "~/server/internal/news";
import { handleFileUpload } from "~/server/internal/utils/handlefileupload";
export default defineEventHandler(async (h3) => {
const allowed = await aclManager.allowSystemACL(h3, ["news:create"]);
if (!allowed) throw createError({ statusCode: 403 });
const body = await readBody(h3);
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"]);
if (!uploadResult)
throw createError({
statusCode: 400,
statusMessage: "Failed to upload file",
});
const [imageId, options, pull, dump] = uploadResult;
const title = options.title;
const description = options.description;
const content = options.content;
const tags = options.tags ? (JSON.parse(options.tags) as string[]) : [];
if (!title || !description || !content)
throw createError({
statusCode: 400,
statusMessage: "Missing or invalid title, description or content.",
});
const article = await newsManager.create({
title: body.title,
description: body.description,
content: body.content,
title: title,
description: description,
content: content,
tags: body.tags,
tags: tags,
image: body.image,
authorId: body.authorId,
image: imageId,
authorId: "system",
});
await pull();
return article;
});