diff --git a/server/api/v1/client/news/[id]/index.get.ts b/server/api/v1/client/news/[id]/index.get.ts new file mode 100644 index 0000000..c7019c9 --- /dev/null +++ b/server/api/v1/client/news/[id]/index.get.ts @@ -0,0 +1,20 @@ +import { defineClientEventHandler } from "~/server/internal/clients/event-handler"; +import newsManager from "~/server/internal/news"; + +export default defineClientEventHandler(async (h3) => { + const id = h3.context.params?.id; + if (!id) + throw createError({ + statusCode: 400, + message: "Missing news ID", + }); + + const news = await newsManager.fetchById(id); + if (!news) + throw createError({ + statusCode: 404, + message: "News article not found", + }); + + return news; +}); diff --git a/server/api/v1/client/news/index.get.ts b/server/api/v1/client/news/index.get.ts new file mode 100644 index 0000000..bee24c3 --- /dev/null +++ b/server/api/v1/client/news/index.get.ts @@ -0,0 +1,29 @@ +import { defineClientEventHandler } from "~/server/internal/clients/event-handler"; +import newsManager from "~/server/internal/news"; + +export default defineClientEventHandler(async (h3) => { + const query = getQuery(h3); + + const orderBy = query.order as "asc" | "desc"; + if (orderBy) { + if (typeof orderBy !== "string" || !["asc", "desc"].includes(orderBy)) + throw createError({ statusCode: 400, statusMessage: "Invalid order" }); + } + + const tags = query.tags as string[] | undefined; + if (tags) { + if (typeof tags !== "object" || !Array.isArray(tags)) + throw createError({ statusCode: 400, statusMessage: "Invalid tags" }); + } + + const options = { + take: parseInt(query.limit as string), + skip: parseInt(query.skip as string), + orderBy: orderBy, + tags: tags?.map((e) => e.toString()), + search: query.search as string, + }; + + const news = await newsManager.fetch(options); + return news; +});