diff --git a/README.md b/README.md index edf9abf..5d4358c 100755 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ pnpm i pnpm run build # データベースのマイグレーション -pnpm -F backend mikro migration:up +pnpm -F backend migrator up # 起動 pnpm -F backend start diff --git a/packages/backend/src/migrations/.snapshot-chat.json b/packages/backend/src/migrations/.snapshot-chat.json index f946015..dc68dbc 100644 --- a/packages/backend/src/migrations/.snapshot-chat.json +++ b/packages/backend/src/migrations/.snapshot-chat.json @@ -24,19 +24,19 @@ }, "value": { "name": "value", - "type": "text", + "type": "varchar(4096)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, + "length": 4096, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "text" + "mappedType": "string" } }, "name": "config", @@ -107,6 +107,22 @@ "enumItems": [], "mappedType": "string" }, + "icon": { + "name": "icon", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": 255, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, "profile": { "name": "profile", "type": "varchar(4096)", @@ -155,8 +171,8 @@ "enumItems": [], "mappedType": "text" }, - "is_owner": { - "name": "is_owner", + "is_admin": { + "name": "is_admin", "type": "boolean", "unsigned": false, "autoincrement": false, @@ -397,6 +413,543 @@ } }, "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": true, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "text": { + "name": "text", + "type": "varchar(4096)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 4096, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "created_by_id": { + "name": "created_by_id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "timestamptz", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 6, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + } + }, + "name": "log", + "schema": "public", + "indexes": [ + { + "keyName": "log_pkey", + "columnNames": [ + "id" + ], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "log_created_by_id_foreign": { + "constraintName": "log_created_by_id_foreign", + "columnNames": [ + "created_by_id" + ], + "localTableName": "public.log", + "referencedColumnNames": [ + "id" + ], + "referencedTableName": "public.user", + "deleteRule": "set null", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": true, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(20)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 20, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "description": { + "name": "description", + "type": "varchar(4096)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 4096, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "icon": { + "name": "icon", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": 255, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "created_by_id": { + "name": "created_by_id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "timestamptz", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 6, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + } + }, + "name": "community", + "schema": "public", + "indexes": [ + { + "columnNames": [ + "name" + ], + "composite": false, + "keyName": "community_name_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": [ + "name" + ], + "composite": false, + "keyName": "community_name_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "keyName": "community_pkey", + "columnNames": [ + "id" + ], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "community_created_by_id_foreign": { + "constraintName": "community_created_by_id_foreign", + "columnNames": [ + "created_by_id" + ], + "localTableName": "public.community", + "referencedColumnNames": [ + "id" + ], + "referencedTableName": "public.user", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": true, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "name": { + "name": "name", + "type": "varchar(20)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 20, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "description": { + "name": "description", + "type": "varchar(4096)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 4096, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "community_id": { + "name": "community_id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "created_by_id": { + "name": "created_by_id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "timestamptz", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 6, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + } + }, + "name": "channel", + "schema": "public", + "indexes": [ + { + "columnNames": [ + "name" + ], + "composite": false, + "keyName": "channel_name_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": [ + "name" + ], + "composite": false, + "keyName": "channel_name_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "keyName": "channel_pkey", + "columnNames": [ + "id" + ], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "channel_community_id_foreign": { + "constraintName": "channel_community_id_foreign", + "columnNames": [ + "community_id" + ], + "localTableName": "public.channel", + "referencedColumnNames": [ + "id" + ], + "referencedTableName": "public.community", + "updateRule": "cascade" + }, + "channel_created_by_id_foreign": { + "constraintName": "channel_created_by_id_foreign", + "columnNames": [ + "created_by_id" + ], + "localTableName": "public.channel", + "referencedColumnNames": [ + "id" + ], + "referencedTableName": "public.user", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": true, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "message": { + "name": "message", + "type": "varchar(4096)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 4096, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "channel_id": { + "name": "channel_id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "created_by_id": { + "name": "created_by_id", + "type": "varchar(10)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 10, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "string" + }, + "created_at": { + "name": "created_at", + "type": "timestamptz", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 6, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + } + }, + "name": "message", + "schema": "public", + "indexes": [ + { + "keyName": "message_pkey", + "columnNames": [ + "id" + ], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "message_channel_id_foreign": { + "constraintName": "message_channel_id_foreign", + "columnNames": [ + "channel_id" + ], + "localTableName": "public.message", + "referencedColumnNames": [ + "id" + ], + "referencedTableName": "public.channel", + "updateRule": "cascade" + }, + "message_created_by_id_foreign": { + "constraintName": "message_created_by_id_foreign", + "columnNames": [ + "created_by_id" + ], + "localTableName": "public.message", + "referencedColumnNames": [ + "id" + ], + "referencedTableName": "public.user", + "updateRule": "cascade" + } + }, + "nativeEnums": {} } ], "nativeEnums": {} diff --git a/packages/backend/src/migrations/Migration20260602125825.ts b/packages/backend/src/migrations/Migration20260602125825.ts new file mode 100644 index 0000000..26ad701 --- /dev/null +++ b/packages/backend/src/migrations/Migration20260602125825.ts @@ -0,0 +1,54 @@ +import { Migration } from '@mikro-orm/migrations'; + +export class Migration20260602125825 extends Migration { + + override async up(): Promise { + this.addSql(`create table "log" ("id" varchar(10) not null, "text" varchar(4096) not null, "created_by_id" varchar(10) null, "created_at" timestamptz not null, constraint "log_pkey" primary key ("id"));`); + + this.addSql(`create table "community" ("id" varchar(10) not null, "name" varchar(20) not null, "description" varchar(4096) not null, "icon" varchar(255) null, "created_by_id" varchar(10) not null, "created_at" timestamptz not null, constraint "community_pkey" primary key ("id"));`); + this.addSql(`create index "community_name_index" on "community" ("name");`); + this.addSql(`alter table "community" add constraint "community_name_unique" unique ("name");`); + + this.addSql(`create table "channel" ("id" varchar(10) not null, "name" varchar(20) not null, "description" varchar(4096) not null, "community_id" varchar(10) not null, "created_by_id" varchar(10) not null, "created_at" timestamptz not null, constraint "channel_pkey" primary key ("id"));`); + this.addSql(`create index "channel_name_index" on "channel" ("name");`); + this.addSql(`alter table "channel" add constraint "channel_name_unique" unique ("name");`); + + this.addSql(`create table "message" ("id" varchar(10) not null, "message" varchar(4096) not null, "channel_id" varchar(10) not null, "created_by_id" varchar(10) not null, "created_at" timestamptz not null, constraint "message_pkey" primary key ("id"));`); + + this.addSql(`alter table "log" add constraint "log_created_by_id_foreign" foreign key ("created_by_id") references "user" ("id") on update cascade on delete set null;`); + + this.addSql(`alter table "community" add constraint "community_created_by_id_foreign" foreign key ("created_by_id") references "user" ("id") on update cascade;`); + + this.addSql(`alter table "channel" add constraint "channel_community_id_foreign" foreign key ("community_id") references "community" ("id") on update cascade;`); + this.addSql(`alter table "channel" add constraint "channel_created_by_id_foreign" foreign key ("created_by_id") references "user" ("id") on update cascade;`); + + this.addSql(`alter table "message" add constraint "message_channel_id_foreign" foreign key ("channel_id") references "channel" ("id") on update cascade;`); + this.addSql(`alter table "message" add constraint "message_created_by_id_foreign" foreign key ("created_by_id") references "user" ("id") on update cascade;`); + + this.addSql(`alter table "config" alter column "value" type varchar(4096) using ("value"::varchar(4096));`); + + this.addSql(`alter table "user" add column "icon" varchar(255) null;`); + this.addSql(`alter table "user" rename column "is_owner" to "is_admin";`); + } + + override async down(): Promise { + this.addSql(`alter table "channel" drop constraint "channel_community_id_foreign";`); + + this.addSql(`alter table "message" drop constraint "message_channel_id_foreign";`); + + this.addSql(`drop table if exists "log" cascade;`); + + this.addSql(`drop table if exists "community" cascade;`); + + this.addSql(`drop table if exists "channel" cascade;`); + + this.addSql(`drop table if exists "message" cascade;`); + + this.addSql(`alter table "config" alter column "value" type text using ("value"::text);`); + + this.addSql(`alter table "user" drop column "icon";`); + + this.addSql(`alter table "user" rename column "is_admin" to "is_owner";`); + } + +}