mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-13 16:22:39 +10:00
feat: file uploads on news articles
This commit is contained in:
@ -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;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user