diff --git a/src/server/api/feed.api.ts b/src/server/api/feed.api.ts new file mode 100644 index 0000000..3aff1b2 --- /dev/null +++ b/src/server/api/feed.api.ts @@ -0,0 +1,78 @@ +import { Request, Response } from "express"; +import prisma, { Prisma } from "@server/prisma"; + +export const get = async (request: Request, response: Response) => { + if (!request.query.id) { + response.status(400).json({ error: "missing 'id' query" }); + return; + } + + const feed = await prisma.feed.findUnique({ + where: { id: Number(request.query.id) }, + include: { channels: true } + }); + + if (!feed) { + response.status(404).json({ message: "no result found" }); + return; + } + + response.json(feed); +}; + +export const post = async (request: Request, response: Response) => { + const guildId = request.params.guildId; + const { name, url, active, channels } = request.body; + + let feed; + + try { + feed = await prisma.feed.create({ + data: { + name: name, + url: url, + guild_id: guildId, + active: active, + channels: channels + } + }); + } catch (error) { + console.error(error); + if (error instanceof Prisma.PrismaClientKnownRequestError) { + response.status(500).json({ error: error.message }); + return; + } + } + + response.status(201).json(feed); +}; + +export const patch = async () => {} // TODO ... + +export const del = async (request: Request, response: Response) => { + const { ids } = request.body; + const guildId = request.params.guildId; + + if (!ids || !Array.isArray(ids)) { + response.status(400).json({ error: "invalid request body" }); + return; + } + + try { + await prisma.feed.deleteMany({ where: { id: { in: ids } } }); + } catch (error) { + console.error(error); + if (error instanceof Prisma.PrismaClientKnownRequestError) { + response.status(500).json({ error: error.message }); + return; + } + } + + response.status(204).json(null); +}; + +export const datatable = async () => { + +}; + +export default { get, post, del, datatable }; \ No newline at end of file diff --git a/src/server/prisma.ts b/src/server/prisma.ts new file mode 100644 index 0000000..d19cd22 --- /dev/null +++ b/src/server/prisma.ts @@ -0,0 +1,15 @@ +import { PrismaClient, Prisma } from "@server/../../generated/prisma"; + +const prisma = new PrismaClient(); + +// const resolvePrismaCodeToHttpCode = (error: Prisma.PrismaClientKnownRequestError) => { +// switch (error.code) { +// case "P2011": +// return 0; +// default: +// throw new Error(`Unhandled prisma error code: '${error.code}'`); +// } +// } + +export { Prisma }; +export default prisma; \ No newline at end of file