From 7f2ca58679ae507b00d5bd9dbff932a663d28555 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 13 Nov 2023 23:37:40 +0000 Subject: [PATCH] feat: setup init migration --- bun.lockb | Bin 193247 -> 193719 bytes drizzle.config.ts | 1 + package.json | 2 + src/server/db/migrate.ts | 5 + .../db/migrations/0000_hesitant_nocturne.sql | 81 +++ .../db/migrations/meta/0000_snapshot.json | 508 ++++++++++++++++++ src/server/db/migrations/meta/_journal.json | 13 + src/server/db/schema.ts | 4 +- 8 files changed, 612 insertions(+), 2 deletions(-) create mode 100644 src/server/db/migrate.ts create mode 100644 src/server/db/migrations/0000_hesitant_nocturne.sql create mode 100644 src/server/db/migrations/meta/0000_snapshot.json create mode 100644 src/server/db/migrations/meta/_journal.json diff --git a/bun.lockb b/bun.lockb index ed2714fb11ababe170ee3afdcf9024a40b6fd3e3..337d1c9d7f293a5d85006f15945503a2b22a6f34 100755 GIT binary patch delta 32429 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 delta 32671 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 Mik console.log(e)) diff --git a/src/server/db/migrations/0000_hesitant_nocturne.sql b/src/server/db/migrations/0000_hesitant_nocturne.sql new file mode 100644 index 00000000..1c916e58 --- /dev/null +++ b/src/server/db/migrations/0000_hesitant_nocturne.sql @@ -0,0 +1,81 @@ +CREATE TABLE `account` ( + `userId` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `provider` varchar(255) NOT NULL, + `providerAccountId` varchar(255) NOT NULL, + `refresh_token` text, + `access_token` text, + `expires_at` int, + `token_type` varchar(255), + `scope` varchar(255), + `id_token` text, + `session_state` varchar(255), + CONSTRAINT `account_provider_providerAccountId` PRIMARY KEY(`provider`,`providerAccountId`) +); +--> statement-breakpoint +CREATE TABLE `board` ( + `id` bigint AUTO_INCREMENT NOT NULL, + `publicId` varchar(12) NOT NULL, + `name` varchar(255), + `createdBy` varchar(255) NOT NULL, + `createdAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updatedAt` timestamp ON UPDATE CURRENT_TIMESTAMP, + CONSTRAINT `board_id` PRIMARY KEY(`id`), + CONSTRAINT `board_publicId_unique` UNIQUE(`publicId`) +); +--> statement-breakpoint +CREATE TABLE `card` ( + `id` bigint AUTO_INCREMENT NOT NULL, + `publicId` varchar(12) NOT NULL, + `title` varchar(256) NOT NULL, + `description` varchar(256), + `createdBy` varchar(256) NOT NULL, + `createdAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updatedAt` timestamp ON UPDATE CURRENT_TIMESTAMP, + `listId` bigint NOT NULL, + `index` int NOT NULL, + CONSTRAINT `card_id` PRIMARY KEY(`id`), + CONSTRAINT `card_publicId_unique` UNIQUE(`publicId`), + CONSTRAINT `card_listId_index_unique` UNIQUE(`listId`,`index`) +); +--> statement-breakpoint +CREATE TABLE `list` ( + `id` bigint AUTO_INCREMENT NOT NULL, + `publicId` varchar(12) NOT NULL, + `name` varchar(256) NOT NULL, + `createdBy` varchar(256) NOT NULL, + `createdAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updatedAt` timestamp ON UPDATE CURRENT_TIMESTAMP, + `boardId` bigint NOT NULL, + `index` int NOT NULL, + CONSTRAINT `list_id` PRIMARY KEY(`id`), + CONSTRAINT `list_publicId_unique` UNIQUE(`publicId`), + CONSTRAINT `list_boardId_index_unique` UNIQUE(`boardId`,`index`) +); +--> statement-breakpoint +CREATE TABLE `session` ( + `sessionToken` varchar(255) NOT NULL, + `userId` varchar(255) NOT NULL, + `expires` timestamp NOT NULL, + CONSTRAINT `session_sessionToken` PRIMARY KEY(`sessionToken`) +); +--> statement-breakpoint +CREATE TABLE `user` ( + `id` varchar(255) NOT NULL, + `name` varchar(255), + `email` varchar(255) NOT NULL, + `emailVerified` timestamp(3) DEFAULT CURRENT_TIMESTAMP(3), + `image` varchar(255), + CONSTRAINT `user_id` PRIMARY KEY(`id`), + CONSTRAINT `user_email_unique` UNIQUE(`email`) +); +--> statement-breakpoint +CREATE TABLE `verificationToken` ( + `identifier` varchar(255) NOT NULL, + `token` varchar(255) NOT NULL, + `expires` timestamp NOT NULL, + CONSTRAINT `verificationToken_identifier_token` PRIMARY KEY(`identifier`,`token`) +); +--> statement-breakpoint +CREATE INDEX `userId_idx` ON `account` (`userId`);--> statement-breakpoint +CREATE INDEX `userId_idx` ON `session` (`userId`); \ No newline at end of file diff --git a/src/server/db/migrations/meta/0000_snapshot.json b/src/server/db/migrations/meta/0000_snapshot.json new file mode 100644 index 00000000..a26bbca6 --- /dev/null +++ b/src/server/db/migrations/meta/0000_snapshot.json @@ -0,0 +1,508 @@ +{ + "version": "5", + "dialect": "mysql", + "id": "f4bbbfaf-8b0d-40fd-9414-9e783f1a8197", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "account": { + "name": "account", + "columns": { + "userId": { + "name": "userId", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provider": { + "name": "provider", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "providerAccountId": { + "name": "providerAccountId", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "int", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "token_type": { + "name": "token_type", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "scope": { + "name": "scope", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "session_state": { + "name": "session_state", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "userId_idx": { + "name": "userId_idx", + "columns": [ + "userId" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "account_provider_providerAccountId": { + "name": "account_provider_providerAccountId", + "columns": [ + "provider", + "providerAccountId" + ] + } + }, + "uniqueConstraints": {} + }, + "board": { + "name": "board", + "columns": { + "id": { + "name": "id", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": true + }, + "publicId": { + "name": "publicId", + "type": "varchar(12)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdBy": { + "name": "createdBy", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "onUpdate": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "board_id": { + "name": "board_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": { + "board_publicId_unique": { + "name": "board_publicId_unique", + "columns": [ + "publicId" + ] + } + } + }, + "card": { + "name": "card", + "columns": { + "id": { + "name": "id", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": true + }, + "publicId": { + "name": "publicId", + "type": "varchar(12)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "createdBy": { + "name": "createdBy", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "onUpdate": true + }, + "listId": { + "name": "listId", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "index": { + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "card_id": { + "name": "card_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": { + "card_publicId_unique": { + "name": "card_publicId_unique", + "columns": [ + "publicId" + ] + }, + "card_listId_index_unique": { + "name": "card_listId_index_unique", + "columns": [ + "listId", + "index" + ] + } + } + }, + "list": { + "name": "list", + "columns": { + "id": { + "name": "id", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": true + }, + "publicId": { + "name": "publicId", + "type": "varchar(12)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdBy": { + "name": "createdBy", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "onUpdate": true + }, + "boardId": { + "name": "boardId", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "index": { + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "list_id": { + "name": "list_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": { + "list_publicId_unique": { + "name": "list_publicId_unique", + "columns": [ + "publicId" + ] + }, + "list_boardId_index_unique": { + "name": "list_boardId_index_unique", + "columns": [ + "boardId", + "index" + ] + } + } + }, + "session": { + "name": "session", + "columns": { + "sessionToken": { + "name": "sessionToken", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "userId": { + "name": "userId", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires": { + "name": "expires", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "userId_idx": { + "name": "userId_idx", + "columns": [ + "userId" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": { + "session_sessionToken": { + "name": "session_sessionToken", + "columns": [ + "sessionToken" + ] + } + }, + "uniqueConstraints": {} + }, + "user": { + "name": "user", + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "emailVerified": { + "name": "emailVerified", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "CURRENT_TIMESTAMP(3)" + }, + "image": { + "name": "image", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "user_id": { + "name": "user_id", + "columns": [ + "id" + ] + } + }, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "columns": [ + "email" + ] + } + } + }, + "verificationToken": { + "name": "verificationToken", + "columns": { + "identifier": { + "name": "identifier", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires": { + "name": "expires", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "verificationToken_identifier_token": { + "name": "verificationToken_identifier_token", + "columns": [ + "identifier", + "token" + ] + } + }, + "uniqueConstraints": {} + } + }, + "schemas": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + } +} \ No newline at end of file diff --git a/src/server/db/migrations/meta/_journal.json b/src/server/db/migrations/meta/_journal.json new file mode 100644 index 00000000..11334eea --- /dev/null +++ b/src/server/db/migrations/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "5", + "dialect": "mysql", + "entries": [ + { + "idx": 0, + "version": "5", + "when": 1699896771081, + "tag": "0000_hesitant_nocturne", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/src/server/db/schema.ts b/src/server/db/schema.ts index 41a93ed0..7482d3fc 100644 --- a/src/server/db/schema.ts +++ b/src/server/db/schema.ts @@ -53,7 +53,7 @@ export const lists = mySqlTable( .default(sql`CURRENT_TIMESTAMP`) .notNull(), updatedAt: timestamp("updatedAt").onUpdateNow(), - boardId: varchar("boardId", { length: 256 }).notNull(), + boardId: bigint("boardId", { mode: "number" }).notNull(), index: int("index").notNull() }, (t) => ({ unq: unique().on(t.boardId, t.index), @@ -84,7 +84,7 @@ export const cards = mySqlTable( .default(sql`CURRENT_TIMESTAMP`) .notNull(), updatedAt: timestamp("updatedAt").onUpdateNow(), - listId: varchar("listId", { length: 256 }).notNull(), + listId: bigint("listId", { mode: "number" }).notNull(), index: int("index").notNull() }, (t) => ({ unq: unique().on(t.listId, t.index),