From 3b03b32046745b91403870c85bdd48ecf8766c35 Mon Sep 17 00:00:00 2001
From: SrIzan10 <66965250+SrIzan10@users.noreply.github.com>
Date: Sat, 20 Dec 2025 21:21:10 +0000
Subject: [PATCH] feat: move database to postgres
---
app/lib/db/index.ts | 5 +
app/lib/db/schema.ts | 23 +
app/pages/index.vue | 2 +-
drizzle.config.ts | 10 +
drizzle/0000_pale_maximus.sql | 21 +
drizzle/meta/0000_snapshot.json | 157 +++++
drizzle/meta/_journal.json | 13 +
package.json | 10 +-
pnpm-lock.yaml | 1075 +++++++++++++++++++++++++++++--
server/cron/clean.ts | 44 +-
server/routes/ws/signaling.ts | 99 ++-
11 files changed, 1345 insertions(+), 114 deletions(-)
create mode 100644 app/lib/db/index.ts
create mode 100644 app/lib/db/schema.ts
create mode 100644 drizzle.config.ts
create mode 100644 drizzle/0000_pale_maximus.sql
create mode 100644 drizzle/meta/0000_snapshot.json
create mode 100644 drizzle/meta/_journal.json
diff --git a/app/lib/db/index.ts b/app/lib/db/index.ts
new file mode 100644
index 0000000..f927c89
--- /dev/null
+++ b/app/lib/db/index.ts
@@ -0,0 +1,5 @@
+import { drizzle } from 'drizzle-orm/neon-http';
+import * as schema from './schema';
+
+export const db = drizzle(process.env.DATABASE_URL!, { schema });
+
diff --git a/app/lib/db/schema.ts b/app/lib/db/schema.ts
new file mode 100644
index 0000000..a6e5cce
--- /dev/null
+++ b/app/lib/db/schema.ts
@@ -0,0 +1,23 @@
+import { pgTable, text, timestamp, uuid } from 'drizzle-orm/pg-core';
+
+export const peers = pgTable('peers', {
+ id: text('id').primaryKey(),
+ lastSeen: timestamp('last_seen').notNull().defaultNow(),
+});
+
+export const rooms = pgTable('rooms', {
+ id: text('id').primaryKey(),
+ broadcaster: text('broadcaster').notNull().references(() => peers.id, { onDelete: 'cascade' }),
+ createdAt: timestamp('created_at').notNull().defaultNow(),
+});
+
+export const roomViewers = pgTable('room_viewers', {
+ id: uuid('id').primaryKey().defaultRandom(),
+ roomId: text('room_id')
+ .notNull()
+ .references(() => rooms.id, { onDelete: 'cascade' }),
+ viewerId: text('viewer_id')
+ .notNull()
+ .references(() => peers.id, { onDelete: 'cascade' }),
+ joinedAt: timestamp('joined_at').notNull().defaultNow(),
+});
diff --git a/app/pages/index.vue b/app/pages/index.vue
index cb1703b..a6a0c4e 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -133,7 +133,7 @@ watch(codeRef, (newCode) => {
-
+
{{ viewerStore.connectionStatus }}