inserting signature endpoint and database methods

This commit is contained in:
John Costa
2025-11-07 17:53:46 +01:00
parent 13414f95cc
commit 42e4abf438
9 changed files with 280 additions and 1 deletions

View File

@@ -0,0 +1,11 @@
import 'dotenv/config';
import { drizzle } from 'drizzle-orm/node-postgres';
import { pgTable, text, uuid } from 'drizzle-orm/pg-core';
const DATABASE_URL = process.env.DATABASE_URL;
if (!DATABASE_URL) {
throw new Error("DATABASE_URL is missing")
}
export const db = drizzle(DATABASE_URL);

View File

@@ -0,0 +1,8 @@
import { db } from "./database";
import { signaturesTable } from "./schema";
export const insertSignature = async (signature: typeof signaturesTable.$inferInsert): Promise<typeof signaturesTable.$inferSelect | undefined> => {
const [insertedSignature] = await db.insert(signaturesTable).values(signature).returning();
return insertedSignature;
}

View File

@@ -0,0 +1,8 @@
import { pgTable, text, uuid } from "drizzle-orm/pg-core";
export const signaturesTable = pgTable("signatures", {
id: uuid().primaryKey().defaultRandom(),
email: text().notNull(),
name: text(),
comment: text(),
});

View File

@@ -0,0 +1,29 @@
import { z } from "zod"
import { insertSignature } from "../models";
const signPetitionSchema = z.object({
email: z.string(),
name: z.string().trim().min(1).max(30).optional(),
comment: z.string().trim().min(10).max(10_000).optional(),
})
export const signPetition = async (req: Request): Promise<Response> => {
const body = await req.json()
const validatedBody = signPetitionSchema.safeParse(body);
if (!validatedBody.success) {
return Response.json({ error: validatedBody.error }, { status: 400 });
}
const insertedSignature = await insertSignature({
email: validatedBody.data.email,
name: validatedBody.data.name,
comment: validatedBody.data.comment,
})
if (!insertedSignature) {
return Response.json({ error: "inserting signature in database" }, { status: 500 });
}
return Response.json(insertedSignature, { status: 200 });
}