CoastalCommitsPastes/client/pages/api/file/get-html.ts

48 lines
1.2 KiB
TypeScript
Raw Normal View History

import { withMethods } from "@lib/api-middleware/with-methods"
2022-11-10 02:11:36 -05:00
import { getHtmlFromFile } from "@lib/server/get-html-from-drift-file"
import { parseQueryParam } from "@lib/server/parse-query-param"
import { prisma } from "@lib/server/prisma"
2022-11-09 21:38:05 -05:00
import { NextApiRequest, NextApiResponse } from "next"
export default withMethods(
["GET"],
async (req: NextApiRequest, res: NextApiResponse) => {
const query = req.query
const fileId = parseQueryParam(query.fileId)
const content = parseQueryParam(query.content)
const title = parseQueryParam(query.title) || "Untitled"
2022-11-09 21:38:05 -05:00
if (fileId && (content || title)) {
return res.status(400).json({ error: "Too many arguments" })
}
2022-11-09 21:38:05 -05:00
if (fileId) {
const file = await prisma.file.findUnique({
where: {
id: fileId
}
})
2022-11-09 21:38:05 -05:00
if (!file) {
return res.status(404).json({ error: "File not found" })
}
2022-11-09 21:38:05 -05:00
return res.json(file.html)
} else {
if (!content || !title) {
return res.status(400).json({ error: "Missing arguments" })
}
2022-11-09 21:38:05 -05:00
const renderedHTML = await getHtmlFromFile({
title,
content
})
2022-11-09 21:38:05 -05:00
res.setHeader("Content-Type", "text/plain")
res.status(200).write(renderedHTML)
res.end()
return
}
2022-11-09 21:38:05 -05:00
}
)