From 37ae49b66edce23f438b89453608e13d45182b78 Mon Sep 17 00:00:00 2001 From: fucksophie Date: Sun, 4 Jan 2026 14:45:15 +0200 Subject: [PATCH] add group, server and friends to db --- drizzle/0002_fair_sasquatch.sql | 1 + drizzle/0003_wise_lucky_pierre.sql | 18 +++ drizzle/meta/0002_snapshot.json | 131 ++++++++++++++++ drizzle/meta/0003_snapshot.json | 238 +++++++++++++++++++++++++++++ drizzle/meta/_journal.json | 14 ++ src/lib/server/db/schema.ts | 32 +++- 6 files changed, 426 insertions(+), 8 deletions(-) create mode 100644 drizzle/0002_fair_sasquatch.sql create mode 100644 drizzle/0003_wise_lucky_pierre.sql create mode 100644 drizzle/meta/0002_snapshot.json create mode 100644 drizzle/meta/0003_snapshot.json diff --git a/drizzle/0002_fair_sasquatch.sql b/drizzle/0002_fair_sasquatch.sql new file mode 100644 index 0000000..ba772e5 --- /dev/null +++ b/drizzle/0002_fair_sasquatch.sql @@ -0,0 +1 @@ +ALTER TABLE `user` ADD `friends` text DEFAULT '[]' NOT NULL; \ No newline at end of file diff --git a/drizzle/0003_wise_lucky_pierre.sql b/drizzle/0003_wise_lucky_pierre.sql new file mode 100644 index 0000000..b387f5a --- /dev/null +++ b/drizzle/0003_wise_lucky_pierre.sql @@ -0,0 +1,18 @@ +CREATE TABLE `group` ( + `id` text PRIMARY KEY NOT NULL, + `name` text NOT NULL, + `owner` text NOT NULL, + `members` text DEFAULT '[]' NOT NULL, + FOREIGN KEY (`owner`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE no action +); +--> statement-breakpoint +CREATE TABLE `server` ( + `id` text PRIMARY KEY NOT NULL, + `name` text NOT NULL, + `owner` text NOT NULL, + `members` text DEFAULT '[]' NOT NULL, + `channels` text DEFAULT '[]' NOT NULL, + FOREIGN KEY (`owner`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE no action +); +--> statement-breakpoint +ALTER TABLE `user` DROP COLUMN `age`; \ No newline at end of file diff --git a/drizzle/meta/0002_snapshot.json b/drizzle/meta/0002_snapshot.json new file mode 100644 index 0000000..d6e1dc3 --- /dev/null +++ b/drizzle/meta/0002_snapshot.json @@ -0,0 +1,131 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "6f6aa2cb-1b39-4cff-a1c6-915735fab505", + "prevId": "8eb771ed-36ad-43c2-a76a-3c704801326a", + "tables": { + "session": { + "name": "session", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "user": { + "name": "user", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "age": { + "name": "age", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password_hash": { + "name": "password_hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "friends": { + "name": "friends", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + } + }, + "indexes": { + "user_username_unique": { + "name": "user_username_unique", + "columns": [ + "username" + ], + "isUnique": true + }, + "user_email_unique": { + "name": "user_email_unique", + "columns": [ + "email" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/0003_snapshot.json b/drizzle/meta/0003_snapshot.json new file mode 100644 index 0000000..fb9c4c4 --- /dev/null +++ b/drizzle/meta/0003_snapshot.json @@ -0,0 +1,238 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "218a80a3-4754-48c7-8173-099613497b99", + "prevId": "6f6aa2cb-1b39-4cff-a1c6-915735fab505", + "tables": { + "group": { + "name": "group", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "members": { + "name": "members", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + } + }, + "indexes": {}, + "foreignKeys": { + "group_owner_user_id_fk": { + "name": "group_owner_user_id_fk", + "tableFrom": "group", + "tableTo": "user", + "columnsFrom": [ + "owner" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "server": { + "name": "server", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "owner": { + "name": "owner", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "members": { + "name": "members", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + }, + "channels": { + "name": "channels", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + } + }, + "indexes": {}, + "foreignKeys": { + "server_owner_user_id_fk": { + "name": "server_owner_user_id_fk", + "tableFrom": "server", + "tableTo": "user", + "columnsFrom": [ + "owner" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "session": { + "name": "session", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "user": { + "name": "user", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password_hash": { + "name": "password_hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "friends": { + "name": "friends", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + } + }, + "indexes": { + "user_username_unique": { + "name": "user_username_unique", + "columns": [ + "username" + ], + "isUnique": true + }, + "user_email_unique": { + "name": "user_email_unique", + "columns": [ + "email" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index a51921f..f0a4d5a 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -15,6 +15,20 @@ "when": 1767361487418, "tag": "0001_melted_goliath", "breakpoints": true + }, + { + "idx": 2, + "version": "6", + "when": 1767530520182, + "tag": "0002_fair_sasquatch", + "breakpoints": true + }, + { + "idx": 3, + "version": "6", + "when": 1767530666249, + "tag": "0003_wise_lucky_pierre", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts index 153c605..0c1dba8 100644 --- a/src/lib/server/db/schema.ts +++ b/src/lib/server/db/schema.ts @@ -2,20 +2,36 @@ import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core'; export const user = sqliteTable('user', { id: text('id').primaryKey(), - age: integer('age'), username: text('username').notNull().unique(), email: text('email').notNull().unique(), - passwordHash: text('password_hash').notNull() + passwordHash: text('password_hash').notNull(), + friends: text('friends', { mode: "json"}).default([]).notNull(), }); export const session = sqliteTable('session', { - id: text('id').primaryKey(), - userId: text('user_id') - .notNull() - .references(() => user.id), - expiresAt: integer('expires_at', { mode: 'timestamp' }).notNull() + id: text('id').primaryKey(), + userId: text('user_id') + .notNull() + .references(() => user.id), + expiresAt: integer('expires_at', { mode: 'timestamp' }).notNull() }); -export type Session = typeof session.$inferSelect; +export const server = sqliteTable("server", { + id: text('id').primaryKey(), + name: text('name').notNull(), + owner: text('owner').notNull().references(() => user.id), + members: text('members', { mode: "json"}).default([]).notNull(), + channels: text('channels', { mode: "json"}).default([]).notNull(), +}) +export const group = sqliteTable("group", { + id: text('id').primaryKey(), + name: text('name').notNull(), + owner: text('owner').notNull().references(() => user.id), + members: text('members', { mode: "json"}).default([]).notNull(), +}) + +export type Session = typeof session.$inferSelect; export type User = typeof user.$inferSelect; +export type Group = typeof group.$inferSelect; +export type Server = typeof server.$inferSelect;