diff --git a/backend/package-lock.json b/backend/package-lock.json index 469bad5..3909621 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -12,7 +12,8 @@ "dotenv": "^17.2.3", "drizzle-orm": "^0.44.7", "express": "^5.1.0", - "pg": "^8.16.3" + "pg": "^8.16.3", + "uuid": "^13.0.0" }, "devDependencies": { "@types/express": "^5.0.5", @@ -2285,6 +2286,19 @@ "node": ">= 0.8" } }, + "node_modules/uuid": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/backend/package.json b/backend/package.json index e79b844..0a3ea9f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -12,7 +12,8 @@ "dotenv": "^17.2.3", "drizzle-orm": "^0.44.7", "express": "^5.1.0", - "pg": "^8.16.3" + "pg": "^8.16.3", + "uuid": "^13.0.0" }, "devDependencies": { "@types/express": "^5.0.5", diff --git a/backend/src/db/schema.ts b/backend/src/db/schema.ts index 1559001..acab481 100644 --- a/backend/src/db/schema.ts +++ b/backend/src/db/schema.ts @@ -1,9 +1,9 @@ -import { integer, pgTable, varchar } from "drizzle-orm/pg-core"; +import { integer, uuid, pgTable, varchar, date } from "drizzle-orm/pg-core"; -export const usersTable = pgTable("users", { - id: integer().primaryKey().generatedAlwaysAsIdentity(), +export const articles = pgTable("articles", { + id: uuid().notNull().primaryKey().defaultRandom(), name: varchar({ length: 255 }).notNull(), - age: integer().notNull(), - email: varchar({ length: 255 }).notNull().unique(), + date: date({ mode: "date" }).notNull(), + text: varchar({ length: 9999 }).notNull() }); diff --git a/backend/src/index.ts b/backend/src/index.ts index e365049..203b6bb 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,19 +1,66 @@ import 'dotenv/config'; import { drizzle } from 'drizzle-orm/node-postgres'; +import { eq } from 'drizzle-orm'; import express, { Request, Response } from "express"; +import { articles } from './db/schema.ts'; // Create a connection to the database const db = drizzle(process.env.DATABASE_URL!); // Create a new express application instance const app = express(); +app.use(express.json()); // Set the network port const port = process.env.PORT || 3000; // Define the root path with a greeting message -app.get("/", (req: Request, res: Response) => { - res.json({ message: "Welcome to the Express + TypeScript Server!" }); +app.get("/status", (req: Request, res: Response) => { + res.json({ message: "Backend Operational" }); +}); + +app.get("/getAllArticles", async (req: Request, res: Response) => { + const resp = await db.select().from(articles); + res.json({ resp }); +}); + +app.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 }); +}); + +app.post("/postArticle", async (req: Request, res: Response) => { + const resp = await db + .insert(articles) + .values({ + ...req.body, + date: new Date(req.body.date) + }); + res.json({ resp }); +}); + +app.put("/putArticle/:articleId", async (req: Request, res: Response) => { + const { articleId } = req.params; + const resp = await db.update(articles) + .set({ + name: req.body.name, + date: new Date(req.body.date), + text: req.body.text + }) + .where(eq(articles.id, articleId)); + res.json({ resp }); +}); + +app.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 }); }); // Start the Express server