From 33b8c178f29e1643b8fa928696cc4154c8709d9e Mon Sep 17 00:00:00 2001 From: Djalim Simaila Date: Fri, 3 Apr 2026 10:41:11 +0200 Subject: [PATCH] feat(db): add PostgreSQL connection and schema definitions --- databases/db.ts | 14 ++++++++++++++ databases/schema.ts | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 databases/db.ts create mode 100644 databases/schema.ts diff --git a/databases/db.ts b/databases/db.ts new file mode 100644 index 0000000..b405c39 --- /dev/null +++ b/databases/db.ts @@ -0,0 +1,14 @@ +import { drizzle } from "npm:drizzle-orm/node-postgres"; +import pg from "npm:pg"; + +const { Pool } = pg; + +const pool = new Pool({ + host: Deno.env.get("POSTGRES_HOST"), + port: Number(Deno.env.get("POSTGRES_PORT") ?? 5432), + user: Deno.env.get("POSTGRES_USER"), + password: Deno.env.get("POSTGRES_PASS"), + database: Deno.env.get("POSTGRES_DB"), +}); + +export const db = drizzle(pool); diff --git a/databases/schema.ts b/databases/schema.ts new file mode 100644 index 0000000..1d7632e --- /dev/null +++ b/databases/schema.ts @@ -0,0 +1,32 @@ +import { + date, + integer, + pgTable, + serial, + text, +} from "npm:drizzle-orm/pg-core"; + +export const promotions = pgTable("promotions", { + id: serial("id").primaryKey(), + endyear: integer("endyear"), + current: integer("current"), +}); + +export const students = pgTable("students", { + userId: text("userId").primaryKey(), + firstName: text("firstName"), + lastName: text("lastName"), + mail: text("mail"), + promotionId: integer("promotionId").references(() => promotions.id), +}); + +export const mobility = pgTable("mobility", { + id: serial("id").primaryKey(), + studentId: text("studentId").references(() => students.userId), + startDate: date("startDate"), + endDate: date("endDate"), + weeksCount: integer("weeksCount"), + destinationCountry: text("destinationCountry"), + destinationName: text("destinationName"), + mobilityStatus: text("mobilityStatus").default("N/A"), +});