From 80733193a25c892e2c96e8e7b46e81e8aa8ab30a Mon Sep 17 00:00:00 2001 From: Roy Dumblauskas Date: Fri, 26 Dec 2025 22:08:59 -0600 Subject: [PATCH] new routers article overhaul complete CRUD --- backend/src/routes/articles.ts | 55 ++++++++++++++++++++++++++++++++++ backend/src/routes/blocks.ts | 7 +++++ backend/src/routes/images.ts | 7 +++++ 3 files changed, 69 insertions(+) create mode 100644 backend/src/routes/articles.ts create mode 100644 backend/src/routes/blocks.ts create mode 100644 backend/src/routes/images.ts diff --git a/backend/src/routes/articles.ts b/backend/src/routes/articles.ts new file mode 100644 index 0000000..f52eb5a --- /dev/null +++ b/backend/src/routes/articles.ts @@ -0,0 +1,55 @@ +import { drizzle } from 'drizzle-orm/node-postgres'; +import { eq } from 'drizzle-orm'; +import { articles } from '../db/schema.ts'; +import express, { Request, Response } from "express"; + +const db = drizzle(process.env.DATABASE_URL!); +export const articlesRouter = express.Router(); + +articlesRouter.get("/getAllArticles", async (req: Request, res: Response) => { + const resp = await db.select().from(articles); + res.json({ resp }); +}); + +articlesRouter.get("/getArticle/:articleId", async (req: Request, res: Response) => { + const { articleId } = req.params; + + const resp = await db.select() + .from(articles) + .where(eq(articles.id, articleId)); + res.json({ resp }); +}); + +articlesRouter.post("/postArticle", async (req: Request, res: Response) => { + const resp = await db + .insert(articles) + .values({ + ...req.body, + slug: req.body.name.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^\w-]/g, ''), + }); + res.json({ resp }); +}); + +articlesRouter.put("/putArticle/:articleId", async (req: Request, res: Response) => { + const { articleId } = req.params; + const resp = await db.update(articles) + .set({ + name: req.body.name, + author_id: req.body.author_id, + slug: req.body.name.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^\w-]/g, ''), + summary: req.body.summary, + article_status: req.body.article_status, + last_edit: new Date(Date.now()), + date_published: req.body.article_status == "published" ? new Date(Date.now()) : null + }) + .where(eq(articles.id, articleId)); + res.json({ resp }); +}); + +articlesRouter.delete("/deleteArticle/:articleId", async (req: Request, res: Response) => { + const { articleId } = req.params; + const resp = await db.delete(articles) + .where(eq(articles.id, articleId)); + + res.json({ resp }); +}); diff --git a/backend/src/routes/blocks.ts b/backend/src/routes/blocks.ts new file mode 100644 index 0000000..144bbff --- /dev/null +++ b/backend/src/routes/blocks.ts @@ -0,0 +1,7 @@ +import { drizzle } from 'drizzle-orm/node-postgres'; +import { eq } from 'drizzle-orm'; +import { articles } from '../db/schema.ts'; +import express, { Request, Response } from "express"; + +const db = drizzle(process.env.DATABASE_URL!); +export const blocksRouter = express.Router(); diff --git a/backend/src/routes/images.ts b/backend/src/routes/images.ts new file mode 100644 index 0000000..bcf3822 --- /dev/null +++ b/backend/src/routes/images.ts @@ -0,0 +1,7 @@ +import { drizzle } from 'drizzle-orm/node-postgres'; +import { eq } from 'drizzle-orm'; +import { articles } from '../db/schema.ts'; +import express, { Request, Response } from "express"; + +const db = drizzle(process.env.DATABASE_URL!); +export const imagesRouter = express.Router();