From 19823d8eca3916c665a7014f47be259a45ab8398 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Fri, 7 Jun 2024 17:31:17 -1000 Subject: [PATCH] feat(api): :sparkles: Add Roles API --- docs/api/index.md | 8 +- docs/api/roles.md | 153 ++ drizzle/0024_lush_aaron_stack.sql | 55 + drizzle/meta/0000_snapshot.json | 221 ++- drizzle/meta/0001_snapshot.json | 221 ++- drizzle/meta/0002_snapshot.json | 221 ++- drizzle/meta/0003_snapshot.json | 221 ++- drizzle/meta/0004_snapshot.json | 221 ++- drizzle/meta/0005_snapshot.json | 221 ++- drizzle/meta/0006_snapshot.json | 221 ++- drizzle/meta/0007_snapshot.json | 221 ++- drizzle/meta/0008_snapshot.json | 221 ++- drizzle/meta/0009_snapshot.json | 221 ++- drizzle/meta/0010_snapshot.json | 221 ++- drizzle/meta/0011_snapshot.json | 221 ++- drizzle/meta/0012_snapshot.json | 221 ++- drizzle/meta/0013_snapshot.json | 221 ++- drizzle/meta/0014_snapshot.json | 221 ++- drizzle/meta/0015_snapshot.json | 221 ++- drizzle/meta/0016_snapshot.json | 221 ++- drizzle/meta/0017_snapshot.json | 221 ++- drizzle/meta/0018_snapshot.json | 221 ++- drizzle/meta/0019_snapshot.json | 221 ++- drizzle/meta/0020_snapshot.json | 221 ++- drizzle/meta/0021_snapshot.json | 208 +- drizzle/meta/0022_snapshot.json | 474 +++-- drizzle/meta/0023_snapshot.json | 474 +++-- drizzle/meta/0024_snapshot.json | 2093 +++++++++++++++++++++ drizzle/meta/_journal.json | 7 + drizzle/schema.ts | 106 ++ packages/database-interface/role.ts | 127 ++ server/api/api/v1/roles/:id/index.test.ts | 273 +++ server/api/api/v1/roles/:id/index.ts | 141 ++ server/api/api/v1/roles/index.test.ts | 62 + server/api/api/v1/roles/index.ts | 34 + utils/api.ts | 1 + 36 files changed, 7851 insertions(+), 1006 deletions(-) create mode 100644 docs/api/roles.md create mode 100644 drizzle/0024_lush_aaron_stack.sql create mode 100644 drizzle/meta/0024_snapshot.json create mode 100644 packages/database-interface/role.ts create mode 100644 server/api/api/v1/roles/:id/index.test.ts create mode 100644 server/api/api/v1/roles/:id/index.ts create mode 100644 server/api/api/v1/roles/index.test.ts create mode 100644 server/api/api/v1/roles/index.ts diff --git a/docs/api/index.md b/docs/api/index.md index de2eb1d8..93867060 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -6,14 +6,18 @@ Some more information about the Mastodon API can be found in the [Mastodon API d ## Emoji API -For administrators. Please read [the documentation](./emojis.md). +For client developers. Please read [the documentation](./emojis.md). + +## Roles API + +For client developers. Please read [the documentation](./roles.md). ## Moderation API > [!WARNING] > **Not implemented.** -For administrators. Please read [the documentation](./moderation.md). +For client developers. Please read [the documentation](./moderation.md). ## Frontend API diff --git a/docs/api/roles.md b/docs/api/roles.md new file mode 100644 index 00000000..b70fdf41 --- /dev/null +++ b/docs/api/roles.md @@ -0,0 +1,153 @@ +# Roles API + +The Roles API lets users manage roles given to them by administrators. This API is available to all users. + +> [!WARNING] +> The API for **administrators** is different (and unimplemented): this is the API for **users**. +> +> Furthermore, users can only manage roles if they have the `roles` permission, and the role they wish to manage does not have a higher priority than their highest priority role. + +## Priorities + +Roles have a priority, which determines the order in which they are applied. Roles with higher priorities take precedence over roles with lower priorities. + +Additionally, users cannot remove or add roles with a higher priority than their highest priority role. + +## Visibility + +Roles can be visible or invisible. Invisible roles are not shown to users in the UI, but they can still be managed via the API. + +> [!WARNING] +> All roles assigned to a user are public information and can be retrieved via the API. The visibility of a role only affects whether it is shown in the UI, which clients can choose to respect or not. + +## Permissions + +```ts +// Last updated: 2024-06-07 +// Search for "RolePermissions" in the source code (GitHub search bar) for the most up-to-date version +enum RolePermissions { + MANAGE_NOTES = "notes", + MANAGE_OWN_NOTES = "owner:note", + MANAGE_ACCOUNTS = "accounts", + MANAGE_OWN_ACCOUNT = "owner:account", + MANAGE_EMOJIS = "emojis", + MANAGE_OWN_EMOJIS = "owner:emoji", + MANAGE_MEDIA = "media", + MANAGE_OWN_MEDIA = "owner:media", + MANAGE_BLOCKS = "blocks", + MANAGE_OWN_BLOCKS = "owner:block", + MANAGE_FILTERS = "filters", + MANAGE_OWN_FILTERS = "owner:filter", + MANAGE_MUTES = "mutes", + MANAGE_OWN_MUTES = "owner:mute", + MANAGE_REPORTS = "reports", + MANAGE_OWN_REPORTS = "owner:report", + MANAGE_SETTINGS = "settings", + MANAGE_OWN_SETTINGS = "owner:settings", + MANAGE_ROLES = "roles", + IGNORE_RATE_LIMITS = "ignore_rate_limits", + IMPERSONATE = "impersonate", + MANAGE_INSTANCE = "instance", + MANAGE_INSTANCE_FEDERATION = "instance:federation", + MANAGE_INSTANCE_SETTINGS = "instance:settings", + OAUTH = "oauth", +} +``` + +### Manage Roles + +The `roles` permission allows the user to manage roles, including adding and removing roles from themselves. This permission is required to use the Roles API. + +### Impersonate + +The `impersonate` permission allows the user to impersonate other users (logging in with their credentials). This is a dangerous permission and should be used with caution. + +### Manage Instance + +The `instance` permission allows the user to manage the instance, including viewing logs, restarting the instance, and more. + +### Manage Instance Federation + +The `instance:federation` permission allows the user to manage the instance's federation settings, including blocking and unblocking other instances. + +### Manage Instance Settings + +The `instance:settings` permission allows the user to manage the instance's settings, including changing the instance's name, description, and more. + +### OAuth2 + +The `oauth` permission is required for users to log in to the instance. Users who do not have this permission will not be able to log in. + +## Get Roles + +```http +GET /api/v1/roles +``` + +Retrieves a list of roles that the user has. + +### Response + +```ts +// 200 OK +{ + id: string; + name: string; + permissions: RolePermissions[]; + priority: number; + description: string | null; + visible: boolean; + icon: string | null +}[]; +``` + +## Get Role + +```http +GET /api/v1/roles/:id +``` + +Retrieves information about a role. + +### Response + +```ts +// 200 OK +{ + id: string; + name: string; + permissions: RolePermissions[]; + priority: number; + description: string | null; + visible: boolean; + icon: string | null +} +``` + +## Add Role + +```http +POST /api/v1/roles/:id +``` + +Adds the role with the given ID to the user making the request. + +### Response + +```ts +// 204 No Content +``` + +## Remove Role + +```http +DELETE /api/v1/roles/:id +``` + +Removes the role with the given ID from the user making the request. + +### Response + +```ts +// 204 No Content +``` \ No newline at end of file diff --git a/drizzle/0024_lush_aaron_stack.sql b/drizzle/0024_lush_aaron_stack.sql new file mode 100644 index 00000000..1ac19519 --- /dev/null +++ b/drizzle/0024_lush_aaron_stack.sql @@ -0,0 +1,55 @@ +CREATE TABLE IF NOT EXISTS "RoleToUsers" ( + "roleId" uuid NOT NULL, + "userId" uuid NOT NULL +); +--> statement-breakpoint +CREATE TABLE IF NOT EXISTS "Roles" ( + "id" uuid PRIMARY KEY DEFAULT uuid_generate_v7() NOT NULL, + "name" text NOT NULL, + "permissions" text[] NOT NULL, + "priority" integer DEFAULT 0 NOT NULL, + "description" text, + "visible" boolean DEFAULT false NOT NULL, + "icon" text +); +--> statement-breakpoint +DROP INDEX IF EXISTS "Applications_client_id_index";--> statement-breakpoint +DROP INDEX IF EXISTS "EmojiToNote_emojiId_noteId_index";--> statement-breakpoint +DROP INDEX IF EXISTS "EmojiToNote_noteId_index";--> statement-breakpoint +DROP INDEX IF EXISTS "EmojiToUser_emojiId_userId_index";--> statement-breakpoint +DROP INDEX IF EXISTS "EmojiToUser_userId_index";--> statement-breakpoint +DROP INDEX IF EXISTS "LysandObject_remote_id_index";--> statement-breakpoint +DROP INDEX IF EXISTS "LysandObject_uri_index";--> statement-breakpoint +DROP INDEX IF EXISTS "NoteToMentions_noteId_userId_index";--> statement-breakpoint +DROP INDEX IF EXISTS "NoteToMentions_userId_index";--> statement-breakpoint +DROP INDEX IF EXISTS "UserToPinnedNotes_userId_noteId_index";--> statement-breakpoint +DROP INDEX IF EXISTS "UserToPinnedNotes_noteId_index";--> statement-breakpoint +DROP INDEX IF EXISTS "Users_uri_index";--> statement-breakpoint +DROP INDEX IF EXISTS "Users_username_index";--> statement-breakpoint +DROP INDEX IF EXISTS "Users_email_index";--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "RoleToUsers" ADD CONSTRAINT "RoleToUsers_roleId_Roles_id_fk" FOREIGN KEY ("roleId") REFERENCES "public"."Roles"("id") ON DELETE cascade ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +DO $$ BEGIN + ALTER TABLE "RoleToUsers" ADD CONSTRAINT "RoleToUsers_userId_Users_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."Users"("id") ON DELETE cascade ON UPDATE cascade; +EXCEPTION + WHEN duplicate_object THEN null; +END $$; +--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Applications_client_id_index" ON "Applications" USING btree ("client_id");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "EmojiToNote_emojiId_noteId_index" ON "EmojiToNote" USING btree ("emojiId","noteId");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "EmojiToNote_noteId_index" ON "EmojiToNote" USING btree ("noteId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "EmojiToUser_emojiId_userId_index" ON "EmojiToUser" USING btree ("emojiId","userId");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "EmojiToUser_userId_index" ON "EmojiToUser" USING btree ("userId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "LysandObject_remote_id_index" ON "LysandObject" USING btree ("remote_id");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "LysandObject_uri_index" ON "LysandObject" USING btree ("uri");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "NoteToMentions_noteId_userId_index" ON "NoteToMentions" USING btree ("noteId","userId");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "NoteToMentions_userId_index" ON "NoteToMentions" USING btree ("userId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "UserToPinnedNotes_userId_noteId_index" ON "UserToPinnedNotes" USING btree ("userId","noteId");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "UserToPinnedNotes_noteId_index" ON "UserToPinnedNotes" USING btree ("noteId");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Users_uri_index" ON "Users" USING btree ("uri");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Users_username_index" ON "Users" USING btree ("username");--> statement-breakpoint +CREATE UNIQUE INDEX IF NOT EXISTS "Users_email_index" ON "Users" USING btree ("email"); \ No newline at end of file diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json index c78c1be6..63b7f832 100644 --- a/drizzle/meta/0000_snapshot.json +++ b/drizzle/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public._prisma_migrations": { @@ -240,14 +240,32 @@ }, "indexes": { "LysandObject_remote_id_key": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_key", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -462,9 +480,18 @@ }, "indexes": { "Application_client_id_key": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_key", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -571,14 +598,38 @@ }, "indexes": { "_EmojiToUser_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToUser_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -625,14 +676,38 @@ }, "indexes": { "_EmojiToStatus_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToStatus_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToStatus_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToStatus_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -679,14 +754,38 @@ }, "indexes": { "_StatusToUser_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_StatusToUser_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_StatusToUser_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_StatusToUser_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -733,14 +832,38 @@ }, "indexes": { "_UserPinnedNotes_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_UserPinnedNotes_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_UserPinnedNotes_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_UserPinnedNotes_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1062,9 +1185,18 @@ }, "indexes": { "Status_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1373,19 +1505,46 @@ }, "indexes": { "User_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_key": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_key", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_key": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_key", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0001_snapshot.json b/drizzle/meta/0001_snapshot.json index 96dc10c7..3df91e3a 100644 --- a/drizzle/meta/0001_snapshot.json +++ b/drizzle/meta/0001_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Application": { @@ -58,9 +58,18 @@ }, "indexes": { "Application_client_id_key": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_key", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "_EmojiToStatus_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToStatus_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToStatus_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToStatus_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "_EmojiToUser_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToUser_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_key": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_key", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1151,9 +1226,18 @@ }, "indexes": { "Status_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1234,14 +1318,38 @@ }, "indexes": { "_StatusToUser_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_StatusToUser_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_StatusToUser_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_StatusToUser_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1494,19 +1602,46 @@ }, "indexes": { "User_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_key": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_key", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_key": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_key", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1542,14 +1677,38 @@ }, "indexes": { "_UserPinnedNotes_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_UserPinnedNotes_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_UserPinnedNotes_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_UserPinnedNotes_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0002_snapshot.json b/drizzle/meta/0002_snapshot.json index 700e2b61..314ca5a1 100644 --- a/drizzle/meta/0002_snapshot.json +++ b/drizzle/meta/0002_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Application": { @@ -58,9 +58,18 @@ }, "indexes": { "Application_client_id_key": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_key", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "_EmojiToStatus_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToStatus_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToStatus_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToStatus_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "_EmojiToUser_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToUser_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_key": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_key", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1151,9 +1226,18 @@ }, "indexes": { "Status_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1234,14 +1318,38 @@ }, "indexes": { "StatusToMentions_A_B_index": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_A_B_index", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "StatusToMentions_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1494,19 +1602,46 @@ }, "indexes": { "User_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_key": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_key", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_key": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_key", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1542,14 +1677,38 @@ }, "indexes": { "_UserPinnedNotes_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_UserPinnedNotes_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_UserPinnedNotes_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_UserPinnedNotes_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0003_snapshot.json b/drizzle/meta/0003_snapshot.json index fc5d56bc..97af5e4c 100644 --- a/drizzle/meta/0003_snapshot.json +++ b/drizzle/meta/0003_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Application": { @@ -58,9 +58,18 @@ }, "indexes": { "Application_client_id_key": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_key", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "_EmojiToStatus_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToStatus_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToStatus_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToStatus_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "_EmojiToUser_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToUser_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_key": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_key", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1151,9 +1226,18 @@ }, "indexes": { "Status_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1234,14 +1318,38 @@ }, "indexes": { "StatusToMentions_statusId_userId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_statusId_userId_index", - "columns": ["statusId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "StatusToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1494,19 +1602,46 @@ }, "indexes": { "User_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_key": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_key", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_key": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_key", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1542,14 +1677,38 @@ }, "indexes": { "_UserPinnedNotes_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_UserPinnedNotes_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_UserPinnedNotes_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_UserPinnedNotes_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0004_snapshot.json b/drizzle/meta/0004_snapshot.json index 5fb0878f..0bc44b1a 100644 --- a/drizzle/meta/0004_snapshot.json +++ b/drizzle/meta/0004_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Application": { @@ -58,9 +58,18 @@ }, "indexes": { "Application_client_id_key": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_key", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "EmojiToStatus_emojiId_statusId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_emojiId_statusId_index", - "columns": ["emojiId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToStatus_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "_EmojiToUser_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToUser_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1151,9 +1226,18 @@ }, "indexes": { "Status_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1234,14 +1318,38 @@ }, "indexes": { "StatusToMentions_statusId_userId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_statusId_userId_index", - "columns": ["statusId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "StatusToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1494,19 +1602,46 @@ }, "indexes": { "User_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_key": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_key", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_key": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_key", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1542,14 +1677,38 @@ }, "indexes": { "UserToPinnedNotes_userId_statusId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_statusId_index", - "columns": ["userId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0005_snapshot.json b/drizzle/meta/0005_snapshot.json index d9511ca1..970979cc 100644 --- a/drizzle/meta/0005_snapshot.json +++ b/drizzle/meta/0005_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Application": { @@ -58,9 +58,18 @@ }, "indexes": { "Application_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "EmojiToStatus_emojiId_statusId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_emojiId_statusId_index", - "columns": ["emojiId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToStatus_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "_EmojiToUser_AB_unique": { + "columns": [ + { + "expression": "A", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_AB_unique", - "columns": ["A", "B"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "_EmojiToUser_B_index": { + "columns": [ + { + "expression": "B", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "_EmojiToUser_B_index", - "columns": ["B"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1153,9 +1228,18 @@ }, "indexes": { "Status_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1236,14 +1320,38 @@ }, "indexes": { "StatusToMentions_statusId_userId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_statusId_userId_index", - "columns": ["statusId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "StatusToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1496,19 +1604,46 @@ }, "indexes": { "User_uri_key": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_key", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_key": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_key", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_key": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_key", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1544,14 +1679,38 @@ }, "indexes": { "UserToPinnedNotes_userId_statusId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_statusId_index", - "columns": ["userId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0006_snapshot.json b/drizzle/meta/0006_snapshot.json index 6cee0a6d..b923c68c 100644 --- a/drizzle/meta/0006_snapshot.json +++ b/drizzle/meta/0006_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Application": { @@ -58,9 +58,18 @@ }, "indexes": { "Application_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "EmojiToStatus_emojiId_statusId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_emojiId_statusId_index", - "columns": ["emojiId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToStatus_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1153,9 +1228,18 @@ }, "indexes": { "Status_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1236,14 +1320,38 @@ }, "indexes": { "StatusToMentions_statusId_userId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_statusId_userId_index", - "columns": ["statusId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "StatusToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1496,19 +1604,46 @@ }, "indexes": { "User_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1544,14 +1679,38 @@ }, "indexes": { "UserToPinnedNotes_userId_statusId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_statusId_index", - "columns": ["userId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0007_snapshot.json b/drizzle/meta/0007_snapshot.json index ac710e44..bfc258c0 100644 --- a/drizzle/meta/0007_snapshot.json +++ b/drizzle/meta/0007_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Application": { @@ -58,9 +58,18 @@ }, "indexes": { "Application_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "EmojiToStatus_emojiId_statusId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_emojiId_statusId_index", - "columns": ["emojiId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToStatus_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1147,9 +1222,18 @@ }, "indexes": { "Status_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1221,14 +1305,38 @@ }, "indexes": { "StatusToMentions_statusId_userId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_statusId_userId_index", - "columns": ["statusId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "StatusToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1481,19 +1589,46 @@ }, "indexes": { "User_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1529,14 +1664,38 @@ }, "indexes": { "UserToPinnedNotes_userId_statusId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_statusId_index", - "columns": ["userId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0008_snapshot.json b/drizzle/meta/0008_snapshot.json index fada8e1b..e90c6791 100644 --- a/drizzle/meta/0008_snapshot.json +++ b/drizzle/meta/0008_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Application": { @@ -58,9 +58,18 @@ }, "indexes": { "Application_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Application_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "EmojiToStatus_emojiId_statusId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_emojiId_statusId_index", - "columns": ["emojiId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToStatus_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToStatus_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1154,9 +1229,18 @@ }, "indexes": { "Status_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Status_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1228,14 +1312,38 @@ }, "indexes": { "StatusToMentions_statusId_userId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_statusId_userId_index", - "columns": ["statusId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "StatusToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "StatusToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1488,19 +1596,46 @@ }, "indexes": { "User_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "User_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "User_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1536,14 +1671,38 @@ }, "indexes": { "UserToPinnedNotes_userId_statusId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_statusId_index", - "columns": ["userId", "statusId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_statusId_index": { + "columns": [ + { + "expression": "statusId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_statusId_index", - "columns": ["statusId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0009_snapshot.json b/drizzle/meta/0009_snapshot.json index eb7a1ad8..2c74b04e 100644 --- a/drizzle/meta/0009_snapshot.json +++ b/drizzle/meta/0009_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1154,9 +1229,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1228,14 +1312,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1488,19 +1596,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1536,14 +1671,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0010_snapshot.json b/drizzle/meta/0010_snapshot.json index 566d5e38..74d50d43 100644 --- a/drizzle/meta/0010_snapshot.json +++ b/drizzle/meta/0010_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -254,14 +263,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -306,14 +339,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1154,9 +1229,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1228,14 +1312,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1488,19 +1596,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1536,14 +1671,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0011_snapshot.json b/drizzle/meta/0011_snapshot.json index 10a831d8..1af1df3b 100644 --- a/drizzle/meta/0011_snapshot.json +++ b/drizzle/meta/0011_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -756,14 +831,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -893,9 +992,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1359,14 +1467,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1540,19 +1672,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0012_snapshot.json b/drizzle/meta/0012_snapshot.json index 8c4d81fc..39a26b65 100644 --- a/drizzle/meta/0012_snapshot.json +++ b/drizzle/meta/0012_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -817,14 +892,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -954,9 +1053,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1420,14 +1528,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1601,19 +1733,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0013_snapshot.json b/drizzle/meta/0013_snapshot.json index 0e8b872a..54f097c5 100644 --- a/drizzle/meta/0013_snapshot.json +++ b/drizzle/meta/0013_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -561,14 +618,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -832,14 +907,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -969,9 +1068,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1435,14 +1543,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1616,19 +1748,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0014_snapshot.json b/drizzle/meta/0014_snapshot.json index 41c8192b..e7e5ae6e 100644 --- a/drizzle/meta/0014_snapshot.json +++ b/drizzle/meta/0014_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -670,14 +727,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -941,14 +1016,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1078,9 +1177,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1544,14 +1652,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1725,19 +1857,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0015_snapshot.json b/drizzle/meta/0015_snapshot.json index c1aa961e..d7ff66be 100644 --- a/drizzle/meta/0015_snapshot.json +++ b/drizzle/meta/0015_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -670,14 +727,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -941,14 +1016,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1078,9 +1177,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1544,14 +1652,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1725,19 +1857,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0016_snapshot.json b/drizzle/meta/0016_snapshot.json index d3f89fea..d51dec7d 100644 --- a/drizzle/meta/0016_snapshot.json +++ b/drizzle/meta/0016_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -670,14 +727,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -941,14 +1016,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1078,9 +1177,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1558,14 +1666,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1739,19 +1871,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0017_snapshot.json b/drizzle/meta/0017_snapshot.json index b4938bc5..9555b92c 100644 --- a/drizzle/meta/0017_snapshot.json +++ b/drizzle/meta/0017_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -670,14 +727,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -941,14 +1016,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1078,9 +1177,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1562,14 +1670,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1743,19 +1875,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0018_snapshot.json b/drizzle/meta/0018_snapshot.json index 84b9eefc..8a13b8e4 100644 --- a/drizzle/meta/0018_snapshot.json +++ b/drizzle/meta/0018_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -670,14 +727,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -941,14 +1016,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1078,9 +1177,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1564,14 +1672,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1745,19 +1877,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0019_snapshot.json b/drizzle/meta/0019_snapshot.json index 64e4798e..b7ba9304 100644 --- a/drizzle/meta/0019_snapshot.json +++ b/drizzle/meta/0019_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -670,14 +727,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -941,14 +1016,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1078,9 +1177,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1570,14 +1678,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1751,19 +1883,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0020_snapshot.json b/drizzle/meta/0020_snapshot.json index 08f7ddee..008d00f9 100644 --- a/drizzle/meta/0020_snapshot.json +++ b/drizzle/meta/0020_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -670,14 +727,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -941,14 +1016,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1078,9 +1177,18 @@ }, "indexes": { "Notes_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Notes_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1570,14 +1678,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1758,19 +1890,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0021_snapshot.json b/drizzle/meta/0021_snapshot.json index f47c5bf5..b7b01def 100644 --- a/drizzle/meta/0021_snapshot.json +++ b/drizzle/meta/0021_snapshot.json @@ -1,5 +1,5 @@ { - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -58,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -191,14 +200,38 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -243,14 +276,38 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -670,14 +727,32 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -941,14 +1016,38 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1570,14 +1669,38 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { @@ -1758,19 +1881,46 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { diff --git a/drizzle/meta/0022_snapshot.json b/drizzle/meta/0022_snapshot.json index 7afd9852..9b9403e3 100644 --- a/drizzle/meta/0022_snapshot.json +++ b/drizzle/meta/0022_snapshot.json @@ -1,7 +1,5 @@ { - "id": "2ebf1bd7-ed30-4e28-aa35-091c4cec896c", - "prevId": "44e89287-856b-4cc8-bee0-fb394522b01c", - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -60,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -164,11 +171,11 @@ "Attachments_noteId_Notes_id_fk": { "name": "Attachments_noteId_Notes_id_fk", "tableFrom": "Attachments", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -193,34 +200,58 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "EmojiToNote_emojiId_Emojis_id_fk": { "name": "EmojiToNote_emojiId_Emojis_id_fk", "tableFrom": "EmojiToNote", - "tableTo": "Emojis", "columnsFrom": ["emojiId"], + "tableTo": "Emojis", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "EmojiToNote_noteId_Notes_id_fk": { "name": "EmojiToNote_noteId_Notes_id_fk", "tableFrom": "EmojiToNote", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -245,34 +276,58 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "EmojiToUser_emojiId_Emojis_id_fk": { "name": "EmojiToUser_emojiId_Emojis_id_fk", "tableFrom": "EmojiToUser", - "tableTo": "Emojis", "columnsFrom": ["emojiId"], + "tableTo": "Emojis", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "EmojiToUser_userId_Users_id_fk": { "name": "EmojiToUser_userId_Users_id_fk", "tableFrom": "EmojiToUser", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -343,20 +398,20 @@ "Emojis_instanceId_Instances_id_fk": { "name": "Emojis_instanceId_Instances_id_fk", "tableFrom": "Emojis", - "tableTo": "Instances", "columnsFrom": ["instanceId"], + "tableTo": "Instances", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Emojis_ownerId_Users_id_fk": { "name": "Emojis_ownerId_Users_id_fk", "tableFrom": "Emojis", - "tableTo": "Users", "columnsFrom": ["ownerId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -397,11 +452,11 @@ "FilterKeywords_filterId_Filters_id_fk": { "name": "FilterKeywords_filterId_Filters_id_fk", "tableFrom": "FilterKeywords", - "tableTo": "Filters", "columnsFrom": ["filterId"], + "tableTo": "Filters", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -461,11 +516,11 @@ "Filters_userId_Users_id_fk": { "name": "Filters_userId_Users_id_fk", "tableFrom": "Filters", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -514,20 +569,20 @@ "Flags_noteId_Notes_id_fk": { "name": "Flags_noteId_Notes_id_fk", "tableFrom": "Flags", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Flags_userId_Users_id_fk": { "name": "Flags_userId_Users_id_fk", "tableFrom": "Flags", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -617,20 +672,20 @@ "Likes_likerId_Users_id_fk": { "name": "Likes_likerId_Users_id_fk", "tableFrom": "Likes", - "tableTo": "Users", "columnsFrom": ["likerId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Likes_likedId_Notes_id_fk": { "name": "Likes_likedId_Notes_id_fk", "tableFrom": "Likes", - "tableTo": "Notes", "columnsFrom": ["likedId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -693,25 +748,43 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "LysandObject_authorId_LysandObject_id_fk": { "name": "LysandObject_authorId_LysandObject_id_fk", "tableFrom": "LysandObject", - "tableTo": "LysandObject", "columnsFrom": ["authorId"], + "tableTo": "LysandObject", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -765,29 +838,29 @@ "Markers_noteId_Notes_id_fk": { "name": "Markers_noteId_Notes_id_fk", "tableFrom": "Markers", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Markers_notificationId_Notifications_id_fk": { "name": "Markers_notificationId_Notifications_id_fk", "tableFrom": "Markers", - "tableTo": "Notifications", "columnsFrom": ["notificationId"], + "tableTo": "Notifications", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Markers_userId_Users_id_fk": { "name": "Markers_userId_Users_id_fk", "tableFrom": "Markers", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -841,29 +914,29 @@ "ModNotes_noteId_Notes_id_fk": { "name": "ModNotes_noteId_Notes_id_fk", "tableFrom": "ModNotes", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "ModNotes_userId_Users_id_fk": { "name": "ModNotes_userId_Users_id_fk", "tableFrom": "ModNotes", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "ModNotes_modId_Users_id_fk": { "name": "ModNotes_modId_Users_id_fk", "tableFrom": "ModNotes", - "tableTo": "Users", "columnsFrom": ["modId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -917,29 +990,29 @@ "ModTags_noteId_Notes_id_fk": { "name": "ModTags_noteId_Notes_id_fk", "tableFrom": "ModTags", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "ModTags_userId_Users_id_fk": { "name": "ModTags_userId_Users_id_fk", "tableFrom": "ModTags", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "ModTags_modId_Users_id_fk": { "name": "ModTags_modId_Users_id_fk", "tableFrom": "ModTags", - "tableTo": "Users", "columnsFrom": ["modId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -964,34 +1037,58 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "NoteToMentions_noteId_Notes_id_fk": { "name": "NoteToMentions_noteId_Notes_id_fk", "tableFrom": "NoteToMentions", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "NoteToMentions_userId_Users_id_fk": { "name": "NoteToMentions_userId_Users_id_fk", "tableFrom": "NoteToMentions", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1104,55 +1201,55 @@ "Notes_authorId_Users_id_fk": { "name": "Notes_authorId_Users_id_fk", "tableFrom": "Notes", - "tableTo": "Users", "columnsFrom": ["authorId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notes_reblogId_Notes_id_fk": { "name": "Notes_reblogId_Notes_id_fk", "tableFrom": "Notes", - "tableTo": "Notes", "columnsFrom": ["reblogId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notes_replyId_Notes_id_fk": { "name": "Notes_replyId_Notes_id_fk", "tableFrom": "Notes", - "tableTo": "Notes", "columnsFrom": ["replyId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notes_quoteId_Notes_id_fk": { "name": "Notes_quoteId_Notes_id_fk", "tableFrom": "Notes", - "tableTo": "Notes", "columnsFrom": ["quoteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notes_applicationId_Applications_id_fk": { "name": "Notes_applicationId_Applications_id_fk", "tableFrom": "Notes", - "tableTo": "Applications", "columnsFrom": ["applicationId"], + "tableTo": "Applications", "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "set null" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "Notes_uri_unique": { "name": "Notes_uri_unique", - "nullsNotDistinct": false, - "columns": ["uri"] + "columns": ["uri"], + "nullsNotDistinct": false } } }, @@ -1211,29 +1308,29 @@ "Notifications_notifiedId_Users_id_fk": { "name": "Notifications_notifiedId_Users_id_fk", "tableFrom": "Notifications", - "tableTo": "Users", "columnsFrom": ["notifiedId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notifications_accountId_Users_id_fk": { "name": "Notifications_accountId_Users_id_fk", "tableFrom": "Notifications", - "tableTo": "Users", "columnsFrom": ["accountId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notifications_noteId_Notes_id_fk": { "name": "Notifications_noteId_Notes_id_fk", "tableFrom": "Notifications", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1274,11 +1371,11 @@ "OpenIdAccounts_userId_Users_id_fk": { "name": "OpenIdAccounts_userId_Users_id_fk", "tableFrom": "OpenIdAccounts", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "set null" } }, "compositePrimaryKeys": {}, @@ -1319,11 +1416,11 @@ "OpenIdLoginFlows_applicationId_Applications_id_fk": { "name": "OpenIdLoginFlows_applicationId_Applications_id_fk", "tableFrom": "OpenIdLoginFlows", - "tableTo": "Applications", "columnsFrom": ["applicationId"], + "tableTo": "Applications", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1450,20 +1547,20 @@ "Relationships_ownerId_Users_id_fk": { "name": "Relationships_ownerId_Users_id_fk", "tableFrom": "Relationships", - "tableTo": "Users", "columnsFrom": ["ownerId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Relationships_subjectId_Users_id_fk": { "name": "Relationships_subjectId_Users_id_fk", "tableFrom": "Relationships", - "tableTo": "Users", "columnsFrom": ["subjectId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1555,20 +1652,20 @@ "Tokens_userId_Users_id_fk": { "name": "Tokens_userId_Users_id_fk", "tableFrom": "Tokens", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Tokens_applicationId_Applications_id_fk": { "name": "Tokens_applicationId_Applications_id_fk", "tableFrom": "Tokens", - "tableTo": "Applications", "columnsFrom": ["applicationId"], + "tableTo": "Applications", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1593,34 +1690,58 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "UserToPinnedNotes_userId_Users_id_fk": { "name": "UserToPinnedNotes_userId_Users_id_fk", "tableFrom": "UserToPinnedNotes", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "UserToPinnedNotes_noteId_Notes_id_fk": { "name": "UserToPinnedNotes_noteId_Notes_id_fk", "tableFrom": "UserToPinnedNotes", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1781,30 +1902,57 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "Users_instanceId_Instances_id_fk": { "name": "Users_instanceId_Instances_id_fk", "tableFrom": "Users", - "tableTo": "Instances", "columnsFrom": ["instanceId"], + "tableTo": "Instances", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1814,8 +1962,10 @@ "enums": {}, "schemas": {}, "_meta": { - "columns": {}, "schemas": {}, - "tables": {} - } + "tables": {}, + "columns": {} + }, + "id": "2ebf1bd7-ed30-4e28-aa35-091c4cec896c", + "prevId": "44e89287-856b-4cc8-bee0-fb394522b01c" } diff --git a/drizzle/meta/0023_snapshot.json b/drizzle/meta/0023_snapshot.json index 54691251..c2bd1718 100644 --- a/drizzle/meta/0023_snapshot.json +++ b/drizzle/meta/0023_snapshot.json @@ -1,7 +1,5 @@ { - "id": "c9b9230b-ba1c-4a81-bb6c-ce2e8efe09bf", - "prevId": "2ebf1bd7-ed30-4e28-aa35-091c4cec896c", - "version": "6", + "version": "7", "dialect": "postgresql", "tables": { "public.Applications": { @@ -60,9 +58,18 @@ }, "indexes": { "Applications_client_id_index": { + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Applications_client_id_index", - "columns": ["client_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": {}, @@ -164,11 +171,11 @@ "Attachments_noteId_Notes_id_fk": { "name": "Attachments_noteId_Notes_id_fk", "tableFrom": "Attachments", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -193,34 +200,58 @@ }, "indexes": { "EmojiToNote_emojiId_noteId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_emojiId_noteId_index", - "columns": ["emojiId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToNote_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToNote_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "EmojiToNote_emojiId_Emojis_id_fk": { "name": "EmojiToNote_emojiId_Emojis_id_fk", "tableFrom": "EmojiToNote", - "tableTo": "Emojis", "columnsFrom": ["emojiId"], + "tableTo": "Emojis", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "EmojiToNote_noteId_Notes_id_fk": { "name": "EmojiToNote_noteId_Notes_id_fk", "tableFrom": "EmojiToNote", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -245,34 +276,58 @@ }, "indexes": { "EmojiToUser_emojiId_userId_index": { + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_emojiId_userId_index", - "columns": ["emojiId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "EmojiToUser_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "EmojiToUser_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "EmojiToUser_emojiId_Emojis_id_fk": { "name": "EmojiToUser_emojiId_Emojis_id_fk", "tableFrom": "EmojiToUser", - "tableTo": "Emojis", "columnsFrom": ["emojiId"], + "tableTo": "Emojis", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "EmojiToUser_userId_Users_id_fk": { "name": "EmojiToUser_userId_Users_id_fk", "tableFrom": "EmojiToUser", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -343,20 +398,20 @@ "Emojis_instanceId_Instances_id_fk": { "name": "Emojis_instanceId_Instances_id_fk", "tableFrom": "Emojis", - "tableTo": "Instances", "columnsFrom": ["instanceId"], + "tableTo": "Instances", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Emojis_ownerId_Users_id_fk": { "name": "Emojis_ownerId_Users_id_fk", "tableFrom": "Emojis", - "tableTo": "Users", "columnsFrom": ["ownerId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -397,11 +452,11 @@ "FilterKeywords_filterId_Filters_id_fk": { "name": "FilterKeywords_filterId_Filters_id_fk", "tableFrom": "FilterKeywords", - "tableTo": "Filters", "columnsFrom": ["filterId"], + "tableTo": "Filters", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -461,11 +516,11 @@ "Filters_userId_Users_id_fk": { "name": "Filters_userId_Users_id_fk", "tableFrom": "Filters", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -514,20 +569,20 @@ "Flags_noteId_Notes_id_fk": { "name": "Flags_noteId_Notes_id_fk", "tableFrom": "Flags", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Flags_userId_Users_id_fk": { "name": "Flags_userId_Users_id_fk", "tableFrom": "Flags", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -617,20 +672,20 @@ "Likes_likerId_Users_id_fk": { "name": "Likes_likerId_Users_id_fk", "tableFrom": "Likes", - "tableTo": "Users", "columnsFrom": ["likerId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Likes_likedId_Notes_id_fk": { "name": "Likes_likedId_Notes_id_fk", "tableFrom": "Likes", - "tableTo": "Notes", "columnsFrom": ["likedId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -693,25 +748,43 @@ }, "indexes": { "LysandObject_remote_id_index": { + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_remote_id_index", - "columns": ["remote_id"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "LysandObject_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "LysandObject_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "LysandObject_authorId_LysandObject_id_fk": { "name": "LysandObject_authorId_LysandObject_id_fk", "tableFrom": "LysandObject", - "tableTo": "LysandObject", "columnsFrom": ["authorId"], + "tableTo": "LysandObject", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -765,29 +838,29 @@ "Markers_noteId_Notes_id_fk": { "name": "Markers_noteId_Notes_id_fk", "tableFrom": "Markers", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Markers_notificationId_Notifications_id_fk": { "name": "Markers_notificationId_Notifications_id_fk", "tableFrom": "Markers", - "tableTo": "Notifications", "columnsFrom": ["notificationId"], + "tableTo": "Notifications", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Markers_userId_Users_id_fk": { "name": "Markers_userId_Users_id_fk", "tableFrom": "Markers", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -841,29 +914,29 @@ "ModNotes_noteId_Notes_id_fk": { "name": "ModNotes_noteId_Notes_id_fk", "tableFrom": "ModNotes", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "ModNotes_userId_Users_id_fk": { "name": "ModNotes_userId_Users_id_fk", "tableFrom": "ModNotes", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "ModNotes_modId_Users_id_fk": { "name": "ModNotes_modId_Users_id_fk", "tableFrom": "ModNotes", - "tableTo": "Users", "columnsFrom": ["modId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -917,29 +990,29 @@ "ModTags_noteId_Notes_id_fk": { "name": "ModTags_noteId_Notes_id_fk", "tableFrom": "ModTags", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "ModTags_userId_Users_id_fk": { "name": "ModTags_userId_Users_id_fk", "tableFrom": "ModTags", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "ModTags_modId_Users_id_fk": { "name": "ModTags_modId_Users_id_fk", "tableFrom": "ModTags", - "tableTo": "Users", "columnsFrom": ["modId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -964,34 +1037,58 @@ }, "indexes": { "NoteToMentions_noteId_userId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_noteId_userId_index", - "columns": ["noteId", "userId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "NoteToMentions_userId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "NoteToMentions_userId_index", - "columns": ["userId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "NoteToMentions_noteId_Notes_id_fk": { "name": "NoteToMentions_noteId_Notes_id_fk", "tableFrom": "NoteToMentions", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "NoteToMentions_userId_Users_id_fk": { "name": "NoteToMentions_userId_Users_id_fk", "tableFrom": "NoteToMentions", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1104,55 +1201,55 @@ "Notes_authorId_Users_id_fk": { "name": "Notes_authorId_Users_id_fk", "tableFrom": "Notes", - "tableTo": "Users", "columnsFrom": ["authorId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notes_reblogId_Notes_id_fk": { "name": "Notes_reblogId_Notes_id_fk", "tableFrom": "Notes", - "tableTo": "Notes", "columnsFrom": ["reblogId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notes_replyId_Notes_id_fk": { "name": "Notes_replyId_Notes_id_fk", "tableFrom": "Notes", - "tableTo": "Notes", "columnsFrom": ["replyId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notes_quoteId_Notes_id_fk": { "name": "Notes_quoteId_Notes_id_fk", "tableFrom": "Notes", - "tableTo": "Notes", "columnsFrom": ["quoteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notes_applicationId_Applications_id_fk": { "name": "Notes_applicationId_Applications_id_fk", "tableFrom": "Notes", - "tableTo": "Applications", "columnsFrom": ["applicationId"], + "tableTo": "Applications", "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "set null" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "Notes_uri_unique": { "name": "Notes_uri_unique", - "nullsNotDistinct": false, - "columns": ["uri"] + "columns": ["uri"], + "nullsNotDistinct": false } } }, @@ -1211,29 +1308,29 @@ "Notifications_notifiedId_Users_id_fk": { "name": "Notifications_notifiedId_Users_id_fk", "tableFrom": "Notifications", - "tableTo": "Users", "columnsFrom": ["notifiedId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notifications_accountId_Users_id_fk": { "name": "Notifications_accountId_Users_id_fk", "tableFrom": "Notifications", - "tableTo": "Users", "columnsFrom": ["accountId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Notifications_noteId_Notes_id_fk": { "name": "Notifications_noteId_Notes_id_fk", "tableFrom": "Notifications", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1274,11 +1371,11 @@ "OpenIdAccounts_userId_Users_id_fk": { "name": "OpenIdAccounts_userId_Users_id_fk", "tableFrom": "OpenIdAccounts", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "set null" } }, "compositePrimaryKeys": {}, @@ -1319,11 +1416,11 @@ "OpenIdLoginFlows_applicationId_Applications_id_fk": { "name": "OpenIdLoginFlows_applicationId_Applications_id_fk", "tableFrom": "OpenIdLoginFlows", - "tableTo": "Applications", "columnsFrom": ["applicationId"], + "tableTo": "Applications", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1450,20 +1547,20 @@ "Relationships_ownerId_Users_id_fk": { "name": "Relationships_ownerId_Users_id_fk", "tableFrom": "Relationships", - "tableTo": "Users", "columnsFrom": ["ownerId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Relationships_subjectId_Users_id_fk": { "name": "Relationships_subjectId_Users_id_fk", "tableFrom": "Relationships", - "tableTo": "Users", "columnsFrom": ["subjectId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1555,20 +1652,20 @@ "Tokens_userId_Users_id_fk": { "name": "Tokens_userId_Users_id_fk", "tableFrom": "Tokens", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "Tokens_applicationId_Applications_id_fk": { "name": "Tokens_applicationId_Applications_id_fk", "tableFrom": "Tokens", - "tableTo": "Applications", "columnsFrom": ["applicationId"], + "tableTo": "Applications", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1593,34 +1690,58 @@ }, "indexes": { "UserToPinnedNotes_userId_noteId_index": { + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_userId_noteId_index", - "columns": ["userId", "noteId"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "UserToPinnedNotes_noteId_index": { + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "UserToPinnedNotes_noteId_index", - "columns": ["noteId"], - "isUnique": false + "isUnique": false, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "UserToPinnedNotes_userId_Users_id_fk": { "name": "UserToPinnedNotes_userId_Users_id_fk", "tableFrom": "UserToPinnedNotes", - "tableTo": "Users", "columnsFrom": ["userId"], + "tableTo": "Users", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" }, "UserToPinnedNotes_noteId_Notes_id_fk": { "name": "UserToPinnedNotes_noteId_Notes_id_fk", "tableFrom": "UserToPinnedNotes", - "tableTo": "Notes", "columnsFrom": ["noteId"], + "tableTo": "Notes", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1793,30 +1914,57 @@ }, "indexes": { "Users_uri_index": { + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_uri_index", - "columns": ["uri"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_username_index": { + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_username_index", - "columns": ["username"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false }, "Users_email_index": { + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], "name": "Users_email_index", - "columns": ["email"], - "isUnique": true + "isUnique": true, + "method": "btree", + "concurrently": false } }, "foreignKeys": { "Users_instanceId_Instances_id_fk": { "name": "Users_instanceId_Instances_id_fk", "tableFrom": "Users", - "tableTo": "Instances", "columnsFrom": ["instanceId"], + "tableTo": "Instances", "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "cascade" + "onUpdate": "cascade", + "onDelete": "cascade" } }, "compositePrimaryKeys": {}, @@ -1826,8 +1974,10 @@ "enums": {}, "schemas": {}, "_meta": { - "columns": {}, "schemas": {}, - "tables": {} - } + "tables": {}, + "columns": {} + }, + "id": "c9b9230b-ba1c-4a81-bb6c-ce2e8efe09bf", + "prevId": "2ebf1bd7-ed30-4e28-aa35-091c4cec896c" } diff --git a/drizzle/meta/0024_snapshot.json b/drizzle/meta/0024_snapshot.json new file mode 100644 index 00000000..df45b60e --- /dev/null +++ b/drizzle/meta/0024_snapshot.json @@ -0,0 +1,2093 @@ +{ + "id": "74ab101a-d541-45fe-ab04-1ddfad6dee7b", + "prevId": "c9b9230b-ba1c-4a81-bb6c-ce2e8efe09bf", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.Applications": { + "name": "Applications", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "website": { + "name": "website", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "vapid_key": { + "name": "vapid_key", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "client_id": { + "name": "client_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "secret": { + "name": "secret", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "scopes": { + "name": "scopes", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "Applications_client_id_index": { + "name": "Applications_client_id_index", + "columns": [ + { + "expression": "client_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Attachments": { + "name": "Attachments", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "remote_url": { + "name": "remote_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "thumbnail_url": { + "name": "thumbnail_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "mime_type": { + "name": "mime_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "blurhash": { + "name": "blurhash", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sha256": { + "name": "sha256", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "fps": { + "name": "fps", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "width": { + "name": "width", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "height": { + "name": "height", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "size": { + "name": "size", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "Attachments_noteId_Notes_id_fk": { + "name": "Attachments_noteId_Notes_id_fk", + "tableFrom": "Attachments", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.EmojiToNote": { + "name": "EmojiToNote", + "schema": "", + "columns": { + "emojiId": { + "name": "emojiId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "EmojiToNote_emojiId_noteId_index": { + "name": "EmojiToNote_emojiId_noteId_index", + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "EmojiToNote_noteId_index": { + "name": "EmojiToNote_noteId_index", + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "EmojiToNote_emojiId_Emojis_id_fk": { + "name": "EmojiToNote_emojiId_Emojis_id_fk", + "tableFrom": "EmojiToNote", + "tableTo": "Emojis", + "columnsFrom": ["emojiId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "EmojiToNote_noteId_Notes_id_fk": { + "name": "EmojiToNote_noteId_Notes_id_fk", + "tableFrom": "EmojiToNote", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.EmojiToUser": { + "name": "EmojiToUser", + "schema": "", + "columns": { + "emojiId": { + "name": "emojiId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "EmojiToUser_emojiId_userId_index": { + "name": "EmojiToUser_emojiId_userId_index", + "columns": [ + { + "expression": "emojiId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "EmojiToUser_userId_index": { + "name": "EmojiToUser_userId_index", + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "EmojiToUser_emojiId_Emojis_id_fk": { + "name": "EmojiToUser_emojiId_Emojis_id_fk", + "tableFrom": "EmojiToUser", + "tableTo": "Emojis", + "columnsFrom": ["emojiId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "EmojiToUser_userId_Users_id_fk": { + "name": "EmojiToUser_userId_Users_id_fk", + "tableFrom": "EmojiToUser", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Emojis": { + "name": "Emojis", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "shortcode": { + "name": "shortcode", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "visible_in_picker": { + "name": "visible_in_picker", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "alt": { + "name": "alt", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content_type": { + "name": "content_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "instanceId": { + "name": "instanceId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "ownerId": { + "name": "ownerId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "category": { + "name": "category", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "Emojis_instanceId_Instances_id_fk": { + "name": "Emojis_instanceId_Instances_id_fk", + "tableFrom": "Emojis", + "tableTo": "Instances", + "columnsFrom": ["instanceId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Emojis_ownerId_Users_id_fk": { + "name": "Emojis_ownerId_Users_id_fk", + "tableFrom": "Emojis", + "tableTo": "Users", + "columnsFrom": ["ownerId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.FilterKeywords": { + "name": "FilterKeywords", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "filterId": { + "name": "filterId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "keyword": { + "name": "keyword", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "whole_word": { + "name": "whole_word", + "type": "boolean", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "FilterKeywords_filterId_Filters_id_fk": { + "name": "FilterKeywords_filterId_Filters_id_fk", + "tableFrom": "FilterKeywords", + "tableTo": "Filters", + "columnsFrom": ["filterId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Filters": { + "name": "Filters", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "context": { + "name": "context", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "filter_action": { + "name": "filter_action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "Filters_userId_Users_id_fk": { + "name": "Filters_userId_Users_id_fk", + "tableFrom": "Filters", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Flags": { + "name": "Flags", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "flag_type": { + "name": "flag_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'other'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "Flags_noteId_Notes_id_fk": { + "name": "Flags_noteId_Notes_id_fk", + "tableFrom": "Flags", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Flags_userId_Users_id_fk": { + "name": "Flags_userId_Users_id_fk", + "tableFrom": "Flags", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Instances": { + "name": "Instances", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "base_url": { + "name": "base_url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "version": { + "name": "version", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "logo": { + "name": "logo", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "disable_automoderation": { + "name": "disable_automoderation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Likes": { + "name": "Likes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "likerId": { + "name": "likerId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "likedId": { + "name": "likedId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "Likes_likerId_Users_id_fk": { + "name": "Likes_likerId_Users_id_fk", + "tableFrom": "Likes", + "tableTo": "Users", + "columnsFrom": ["likerId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Likes_likedId_Notes_id_fk": { + "name": "Likes_likedId_Notes_id_fk", + "tableFrom": "Likes", + "tableTo": "Notes", + "columnsFrom": ["likedId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.LysandObject": { + "name": "LysandObject", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "remote_id": { + "name": "remote_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "uri": { + "name": "uri", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "authorId": { + "name": "authorId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "extra_data": { + "name": "extra_data", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "extensions": { + "name": "extensions", + "type": "jsonb", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "LysandObject_remote_id_index": { + "name": "LysandObject_remote_id_index", + "columns": [ + { + "expression": "remote_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "LysandObject_uri_index": { + "name": "LysandObject_uri_index", + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "LysandObject_authorId_LysandObject_id_fk": { + "name": "LysandObject_authorId_LysandObject_id_fk", + "tableFrom": "LysandObject", + "tableTo": "LysandObject", + "columnsFrom": ["authorId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Markers": { + "name": "Markers", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "notificationId": { + "name": "notificationId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "timeline": { + "name": "timeline", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "Markers_noteId_Notes_id_fk": { + "name": "Markers_noteId_Notes_id_fk", + "tableFrom": "Markers", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Markers_notificationId_Notifications_id_fk": { + "name": "Markers_notificationId_Notifications_id_fk", + "tableFrom": "Markers", + "tableTo": "Notifications", + "columnsFrom": ["notificationId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Markers_userId_Users_id_fk": { + "name": "Markers_userId_Users_id_fk", + "tableFrom": "Markers", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.ModNotes": { + "name": "ModNotes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "modId": { + "name": "modId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "note": { + "name": "note", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "ModNotes_noteId_Notes_id_fk": { + "name": "ModNotes_noteId_Notes_id_fk", + "tableFrom": "ModNotes", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "ModNotes_userId_Users_id_fk": { + "name": "ModNotes_userId_Users_id_fk", + "tableFrom": "ModNotes", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "ModNotes_modId_Users_id_fk": { + "name": "ModNotes_modId_Users_id_fk", + "tableFrom": "ModNotes", + "tableTo": "Users", + "columnsFrom": ["modId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.ModTags": { + "name": "ModTags", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "modId": { + "name": "modId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "tag": { + "name": "tag", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "ModTags_noteId_Notes_id_fk": { + "name": "ModTags_noteId_Notes_id_fk", + "tableFrom": "ModTags", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "ModTags_userId_Users_id_fk": { + "name": "ModTags_userId_Users_id_fk", + "tableFrom": "ModTags", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "ModTags_modId_Users_id_fk": { + "name": "ModTags_modId_Users_id_fk", + "tableFrom": "ModTags", + "tableTo": "Users", + "columnsFrom": ["modId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.NoteToMentions": { + "name": "NoteToMentions", + "schema": "", + "columns": { + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "NoteToMentions_noteId_userId_index": { + "name": "NoteToMentions_noteId_userId_index", + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "NoteToMentions_userId_index": { + "name": "NoteToMentions_userId_index", + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "NoteToMentions_noteId_Notes_id_fk": { + "name": "NoteToMentions_noteId_Notes_id_fk", + "tableFrom": "NoteToMentions", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "NoteToMentions_userId_Users_id_fk": { + "name": "NoteToMentions_userId_Users_id_fk", + "tableFrom": "NoteToMentions", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Notes": { + "name": "Notes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "uri": { + "name": "uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "authorId": { + "name": "authorId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "reblogId": { + "name": "reblogId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "content_type": { + "name": "content_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'text/plain'" + }, + "visibility": { + "name": "visibility", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "replyId": { + "name": "replyId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "quoteId": { + "name": "quoteId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "sensitive": { + "name": "sensitive", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "spoiler_text": { + "name": "spoiler_text", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "applicationId": { + "name": "applicationId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "content_source": { + "name": "content_source", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + } + }, + "indexes": {}, + "foreignKeys": { + "Notes_authorId_Users_id_fk": { + "name": "Notes_authorId_Users_id_fk", + "tableFrom": "Notes", + "tableTo": "Users", + "columnsFrom": ["authorId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Notes_reblogId_Notes_id_fk": { + "name": "Notes_reblogId_Notes_id_fk", + "tableFrom": "Notes", + "tableTo": "Notes", + "columnsFrom": ["reblogId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Notes_replyId_Notes_id_fk": { + "name": "Notes_replyId_Notes_id_fk", + "tableFrom": "Notes", + "tableTo": "Notes", + "columnsFrom": ["replyId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Notes_quoteId_Notes_id_fk": { + "name": "Notes_quoteId_Notes_id_fk", + "tableFrom": "Notes", + "tableTo": "Notes", + "columnsFrom": ["quoteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Notes_applicationId_Applications_id_fk": { + "name": "Notes_applicationId_Applications_id_fk", + "tableFrom": "Notes", + "tableTo": "Applications", + "columnsFrom": ["applicationId"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "Notes_uri_unique": { + "name": "Notes_uri_unique", + "nullsNotDistinct": false, + "columns": ["uri"] + } + } + }, + "public.Notifications": { + "name": "Notifications", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "notifiedId": { + "name": "notifiedId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "accountId": { + "name": "accountId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "dismissed": { + "name": "dismissed", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": { + "Notifications_notifiedId_Users_id_fk": { + "name": "Notifications_notifiedId_Users_id_fk", + "tableFrom": "Notifications", + "tableTo": "Users", + "columnsFrom": ["notifiedId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Notifications_accountId_Users_id_fk": { + "name": "Notifications_accountId_Users_id_fk", + "tableFrom": "Notifications", + "tableTo": "Users", + "columnsFrom": ["accountId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Notifications_noteId_Notes_id_fk": { + "name": "Notifications_noteId_Notes_id_fk", + "tableFrom": "Notifications", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.OpenIdAccounts": { + "name": "OpenIdAccounts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "server_id": { + "name": "server_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "issuer_id": { + "name": "issuer_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "OpenIdAccounts_userId_Users_id_fk": { + "name": "OpenIdAccounts_userId_Users_id_fk", + "tableFrom": "OpenIdAccounts", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.OpenIdLoginFlows": { + "name": "OpenIdLoginFlows", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "code_verifier": { + "name": "code_verifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "issuer_id": { + "name": "issuer_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "OpenIdLoginFlows_applicationId_Applications_id_fk": { + "name": "OpenIdLoginFlows_applicationId_Applications_id_fk", + "tableFrom": "OpenIdLoginFlows", + "tableTo": "Applications", + "columnsFrom": ["applicationId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Relationships": { + "name": "Relationships", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "ownerId": { + "name": "ownerId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "subjectId": { + "name": "subjectId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "following": { + "name": "following", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "showing_reblogs": { + "name": "showing_reblogs", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "notifying": { + "name": "notifying", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "followed_by": { + "name": "followed_by", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "blocking": { + "name": "blocking", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "blocked_by": { + "name": "blocked_by", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "muting": { + "name": "muting", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "muting_notifications": { + "name": "muting_notifications", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "requested": { + "name": "requested", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "domain_blocking": { + "name": "domain_blocking", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "endorsed": { + "name": "endorsed", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "languages": { + "name": "languages", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "note": { + "name": "note", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "Relationships_ownerId_Users_id_fk": { + "name": "Relationships_ownerId_Users_id_fk", + "tableFrom": "Relationships", + "tableTo": "Users", + "columnsFrom": ["ownerId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Relationships_subjectId_Users_id_fk": { + "name": "Relationships_subjectId_Users_id_fk", + "tableFrom": "Relationships", + "tableTo": "Users", + "columnsFrom": ["subjectId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.RoleToUsers": { + "name": "RoleToUsers", + "schema": "", + "columns": { + "roleId": { + "name": "roleId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "RoleToUsers_roleId_Roles_id_fk": { + "name": "RoleToUsers_roleId_Roles_id_fk", + "tableFrom": "RoleToUsers", + "tableTo": "Roles", + "columnsFrom": ["roleId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "RoleToUsers_userId_Users_id_fk": { + "name": "RoleToUsers_userId_Users_id_fk", + "tableFrom": "RoleToUsers", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Roles": { + "name": "Roles", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "permissions": { + "name": "permissions", + "type": "text[]", + "primaryKey": false, + "notNull": true + }, + "priority": { + "name": "priority", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "visible": { + "name": "visible", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "icon": { + "name": "icon", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Tokens": { + "name": "Tokens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "token_type": { + "name": "token_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "code": { + "name": "code", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "client_id": { + "name": "client_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "redirect_uri": { + "name": "redirect_uri", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "applicationId": { + "name": "applicationId", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "Tokens_userId_Users_id_fk": { + "name": "Tokens_userId_Users_id_fk", + "tableFrom": "Tokens", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "Tokens_applicationId_Applications_id_fk": { + "name": "Tokens_applicationId_Applications_id_fk", + "tableFrom": "Tokens", + "tableTo": "Applications", + "columnsFrom": ["applicationId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.UserToPinnedNotes": { + "name": "UserToPinnedNotes", + "schema": "", + "columns": { + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "noteId": { + "name": "noteId", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "UserToPinnedNotes_userId_noteId_index": { + "name": "UserToPinnedNotes_userId_noteId_index", + "columns": [ + { + "expression": "userId", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "UserToPinnedNotes_noteId_index": { + "name": "UserToPinnedNotes_noteId_index", + "columns": [ + { + "expression": "noteId", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "UserToPinnedNotes_userId_Users_id_fk": { + "name": "UserToPinnedNotes_userId_Users_id_fk", + "tableFrom": "UserToPinnedNotes", + "tableTo": "Users", + "columnsFrom": ["userId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + }, + "UserToPinnedNotes_noteId_Notes_id_fk": { + "name": "UserToPinnedNotes_noteId_Notes_id_fk", + "tableFrom": "UserToPinnedNotes", + "tableTo": "Notes", + "columnsFrom": ["noteId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.Users": { + "name": "Users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "uuid_generate_v7()" + }, + "uri": { + "name": "uri", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "display_name": { + "name": "display_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "note": { + "name": "note", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "is_admin": { + "name": "is_admin", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "email_verification_token": { + "name": "email_verification_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password_reset_token": { + "name": "password_reset_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "fields": { + "name": "fields", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[]'" + }, + "endpoints": { + "name": "endpoints", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "source": { + "name": "source", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "avatar": { + "name": "avatar", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "header": { + "name": "header", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp(3)", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "is_bot": { + "name": "is_bot", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_locked": { + "name": "is_locked", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_discoverable": { + "name": "is_discoverable", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "sanctions": { + "name": "sanctions", + "type": "text[]", + "primaryKey": false, + "notNull": false + }, + "public_key": { + "name": "public_key", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "private_key": { + "name": "private_key", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "instanceId": { + "name": "instanceId", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "disable_automoderation": { + "name": "disable_automoderation", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": { + "Users_uri_index": { + "name": "Users_uri_index", + "columns": [ + { + "expression": "uri", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "Users_username_index": { + "name": "Users_username_index", + "columns": [ + { + "expression": "username", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + }, + "Users_email_index": { + "name": "Users_email_index", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "Users_instanceId_Instances_id_fk": { + "name": "Users_instanceId_Instances_id_fk", + "tableFrom": "Users", + "tableTo": "Instances", + "columnsFrom": ["instanceId"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "cascade" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index 66dbfc96..83b86987 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -169,6 +169,13 @@ "when": 1715932436792, "tag": "0023_lazy_wolfsbane", "breakpoints": true + }, + { + "idx": 24, + "version": "7", + "when": 1717810992701, + "tag": "0024_lush_aaron_stack", + "breakpoints": true } ] } diff --git a/drizzle/schema.ts b/drizzle/schema.ts index aabca2ea..c2eb1529 100644 --- a/drizzle/schema.ts +++ b/drizzle/schema.ts @@ -484,6 +484,112 @@ export const ModTags = pgTable("ModTags", { .notNull(), }); +/** + * Permissions not prefixed with `owner:` let the role manage all instances of the resource. + * For example, a user with the `notes` permission can manage all notes of every user + * - Manage: Delete, Update, Create + * - Owner: Only manage their own resources + */ +export enum RolePermissions { + MANAGE_NOTES = "notes", + MANAGE_OWN_NOTES = "owner:note", + MANAGE_ACCOUNTS = "accounts", + MANAGE_OWN_ACCOUNT = "owner:account", + MANAGE_EMOJIS = "emojis", + MANAGE_OWN_EMOJIS = "owner:emoji", + MANAGE_MEDIA = "media", + MANAGE_OWN_MEDIA = "owner:media", + MANAGE_BLOCKS = "blocks", + MANAGE_OWN_BLOCKS = "owner:block", + MANAGE_FILTERS = "filters", + MANAGE_OWN_FILTERS = "owner:filter", + MANAGE_MUTES = "mutes", + MANAGE_OWN_MUTES = "owner:mute", + MANAGE_REPORTS = "reports", + MANAGE_OWN_REPORTS = "owner:report", + MANAGE_SETTINGS = "settings", + MANAGE_OWN_SETTINGS = "owner:settings", + MANAGE_ROLES = "roles", + IGNORE_RATE_LIMITS = "ignore_rate_limits", + IMPERSONATE = "impersonate", + MANAGE_INSTANCE = "instance", + MANAGE_INSTANCE_FEDERATION = "instance:federation", + MANAGE_INSTANCE_SETTINGS = "instance:settings", + /** Users who do not have this permission will not be able to login! */ + OAUTH = "oauth", +} + +export const DEFAULT_ROLES = [ + RolePermissions.MANAGE_OWN_NOTES, + RolePermissions.MANAGE_OWN_ACCOUNT, + RolePermissions.MANAGE_OWN_EMOJIS, + RolePermissions.MANAGE_OWN_MEDIA, + RolePermissions.MANAGE_OWN_BLOCKS, + RolePermissions.MANAGE_OWN_FILTERS, + RolePermissions.MANAGE_OWN_MUTES, + RolePermissions.MANAGE_OWN_REPORTS, + RolePermissions.MANAGE_OWN_SETTINGS, + RolePermissions.OAUTH, +]; + +export const ADMIN_ROLES = [ + ...DEFAULT_ROLES, + RolePermissions.MANAGE_NOTES, + RolePermissions.MANAGE_ACCOUNTS, + RolePermissions.MANAGE_EMOJIS, + RolePermissions.MANAGE_MEDIA, + RolePermissions.MANAGE_BLOCKS, + RolePermissions.MANAGE_FILTERS, + RolePermissions.MANAGE_MUTES, + RolePermissions.MANAGE_REPORTS, + RolePermissions.MANAGE_SETTINGS, + RolePermissions.MANAGE_ROLES, + RolePermissions.IMPERSONATE, + RolePermissions.IGNORE_RATE_LIMITS, + RolePermissions.MANAGE_INSTANCE, + RolePermissions.MANAGE_INSTANCE_FEDERATION, + RolePermissions.MANAGE_INSTANCE_SETTINGS, +]; + +export const Roles = pgTable("Roles", { + id: uuid("id").default(sql`uuid_generate_v7()`).primaryKey().notNull(), + name: text("name").notNull(), + permissions: text("permissions") + .array() + .notNull() + .$type(), + priority: integer("priority").notNull().default(0), + description: text("description"), + visible: boolean("visible").notNull().default(false), + icon: text("icon"), +}); + +export const RoleToUsers = pgTable("RoleToUsers", { + roleId: uuid("roleId") + .notNull() + .references(() => Roles.id, { + onDelete: "cascade", + onUpdate: "cascade", + }), + userId: uuid("userId") + .notNull() + .references(() => Users.id, { + onDelete: "cascade", + onUpdate: "cascade", + }), +}); + +export const RoleToUsersRelations = relations(RoleToUsers, ({ one }) => ({ + role: one(Roles, { + fields: [RoleToUsers.roleId], + references: [Roles.id], + }), + user: one(Users, { + fields: [RoleToUsers.userId], + references: [Users.id], + }), +})); + export const EmojiToUser = pgTable( "EmojiToUser", { diff --git a/packages/database-interface/role.ts b/packages/database-interface/role.ts new file mode 100644 index 00000000..3a0373d5 --- /dev/null +++ b/packages/database-interface/role.ts @@ -0,0 +1,127 @@ +import { + type InferInsertModel, + type InferSelectModel, + type SQL, + and, + desc, + eq, + inArray, +} from "drizzle-orm"; +import { db } from "~/drizzle/db"; +import { RoleToUsers, Roles } from "~/drizzle/schema"; + +export class Role { + private constructor(private role: InferSelectModel) {} + + public static async fromId(id: string | null): Promise { + if (!id) return null; + + return await Role.fromSql(eq(Roles.id, id)); + } + + public static async fromIds(ids: string[]): Promise { + return await Role.manyFromSql(inArray(Roles.id, ids)); + } + + public static async fromSql( + sql: SQL | undefined, + orderBy: SQL | undefined = desc(Roles.id), + ) { + const found = await db.query.Roles.findFirst({ + where: sql, + orderBy, + }); + + if (!found) return null; + return new Role(found); + } + + public static async getUserRoles(userId: string) { + return ( + await db.query.RoleToUsers.findMany({ + where: (role, { eq }) => eq(role.userId, userId), + with: { + role: true, + }, + }) + ).map((r) => new Role(r.role)); + } + + public static async manyFromSql( + sql: SQL | undefined, + orderBy: SQL | undefined = desc(Roles.id), + limit?: number, + offset?: number, + extra?: Parameters[0], + ) { + const found = await db.query.Roles.findMany({ + where: sql, + orderBy, + limit, + offset, + with: extra?.with, + }); + + return found.map((s) => new Role(s)); + } + + public async save( + role: Partial> = this.role, + ) { + return new Role( + ( + await db + .update(Roles) + .set(role) + .where(eq(Roles.id, this.id)) + .returning() + )[0], + ); + } + + public async delete() { + await db.delete(Roles).where(eq(Roles.id, this.id)); + } + + public static async new(role: InferInsertModel) { + return new Role((await db.insert(Roles).values(role).returning())[0]); + } + + public async linkUser(userId: string) { + await db.insert(RoleToUsers).values({ + userId, + roleId: this.id, + }); + } + + public async unlinkUser(userId: string) { + await db + .delete(RoleToUsers) + .where( + and( + eq(RoleToUsers.roleId, this.id), + eq(RoleToUsers.userId, userId), + ), + ); + } + + get id() { + return this.role.id; + } + + public getRole() { + return this.role; + } + + public toAPI() { + return { + id: this.id, + name: this.role.name, + permissions: this.role.permissions, + priority: this.role.priority, + description: this.role.description, + visible: this.role.visible, + icon: this.role.icon, + }; + } +} diff --git a/server/api/api/v1/roles/:id/index.test.ts b/server/api/api/v1/roles/:id/index.test.ts new file mode 100644 index 00000000..a2bebfc7 --- /dev/null +++ b/server/api/api/v1/roles/:id/index.test.ts @@ -0,0 +1,273 @@ +import { afterAll, beforeAll, describe, expect, test } from "bun:test"; +import { config } from "config-manager"; +import { ADMIN_ROLES, DEFAULT_ROLES, RolePermissions } from "~/drizzle/schema"; +import { Role } from "~/packages/database-interface/role"; +import { getTestUsers, sendTestRequest } from "~/tests/utils"; +import { meta } from "./index"; + +const { users, tokens } = await getTestUsers(1); +let role: Role; +let roleNotLinked: Role; +let higherPriorityRole: Role; + +beforeAll(async () => { + // Create new role + role = await Role.new({ + name: "test", + permissions: DEFAULT_ROLES, + priority: 2, + description: "test", + visible: true, + icon: "test", + }); + + expect(role).toBeDefined(); + + // Link role to user + await role.linkUser(users[0].id); + + // Create new role + roleNotLinked = await Role.new({ + name: "test2", + permissions: ADMIN_ROLES, + priority: 0, + description: "test2", + visible: true, + icon: "test2", + }); + + expect(roleNotLinked).toBeDefined(); + + // Create a role with higher priority than the user's role + higherPriorityRole = await Role.new({ + name: "higherPriorityRole", + permissions: DEFAULT_ROLES, + priority: 3, // Higher priority than the user's role + description: "Higher priority role", + visible: true, + icon: "higherPriorityRole", + }); + + expect(higherPriorityRole).toBeDefined(); +}); + +afterAll(async () => { + await role.delete(); + await roleNotLinked.delete(); + await higherPriorityRole.delete(); +}); + +// /api/v1/roles/:id +describe(meta.route, () => { + test("should return 401 if not authenticated", async () => { + const response = await sendTestRequest( + new Request( + new URL( + meta.route.replace(":id", role.id), + config.http.base_url, + ), + { + method: "GET", + }, + ), + ); + + expect(response.status).toBe(401); + }); + + test("should return 404 if role does not exist", async () => { + const response = await sendTestRequest( + new Request( + new URL( + meta.route.replace( + ":id", + "00000000-0000-0000-0000-000000000000", + ), + config.http.base_url, + ), + { + method: "GET", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }, + ), + ); + + expect(response.status).toBe(404); + }); + + test("should return the role", async () => { + const response = await sendTestRequest( + new Request( + new URL( + meta.route.replace(":id", role.id), + config.http.base_url, + ), + { + method: "GET", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }, + ), + ); + + expect(response.ok).toBe(true); + const output = await response.json(); + expect(output).toMatchObject({ + name: "test", + permissions: DEFAULT_ROLES, + priority: 2, + description: "test", + visible: true, + icon: "test", + }); + }); + + test("should return 403 if user does not have MANAGE_ROLES permission", async () => { + const response = await sendTestRequest( + new Request( + new URL( + meta.route.replace(":id", roleNotLinked.id), + config.http.base_url, + ), + { + method: "POST", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }, + ), + ); + + expect(response.status).toBe(403); + const output = await response.json(); + expect(output).toMatchObject({ + error: "You do not have permission to manage roles", + }); + }); + + test("should assign new role", async () => { + await role.save({ + permissions: [RolePermissions.MANAGE_ROLES], + }); + + const response = await sendTestRequest( + new Request( + new URL( + meta.route.replace(":id", roleNotLinked.id), + config.http.base_url, + ), + { + method: "POST", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }, + ), + ); + + expect(response.status).toBe(204); + + // Check if role was assigned + const response2 = await sendTestRequest( + new Request(new URL("/api/v1/roles", config.http.base_url), { + method: "GET", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }), + ); + + expect(response2.ok).toBe(true); + const roles = await response2.json(); + expect(roles).toHaveLength(2); + expect(roles).toContainEqual({ + id: roleNotLinked.id, + name: "test2", + permissions: ADMIN_ROLES, + priority: 0, + description: "test2", + visible: true, + icon: "test2", + }); + + await role.save({ + permissions: [], + }); + }); + + test("should unassign role", async () => { + const response = await sendTestRequest( + new Request( + new URL( + meta.route.replace(":id", role.id), + config.http.base_url, + ), + { + method: "DELETE", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }, + ), + ); + + expect(response.status).toBe(204); + + // Check if role was unassigned + const response2 = await sendTestRequest( + new Request(new URL("/api/v1/roles", config.http.base_url), { + method: "GET", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }), + ); + + expect(response2.ok).toBe(true); + const roles = await response2.json(); + expect(roles).toHaveLength(1); + expect(roles).not.toContainEqual({ + name: "test", + permissions: ADMIN_ROLES, + priority: 0, + description: "test", + visible: true, + icon: "test", + }); + }); + + test("should return 403 if user tries to add role with higher priority", async () => { + // Add MANAGE_ROLES permission to user + await role.save({ + permissions: [RolePermissions.MANAGE_ROLES], + }); + + const response = await sendTestRequest( + new Request( + new URL( + meta.route.replace(":id", higherPriorityRole.id), + config.http.base_url, + ), + { + method: "POST", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }, + ), + ); + + expect(response.status).toBe(403); + const output = await response.json(); + expect(output).toMatchObject({ + error: "Cannot assign role 'higherPriorityRole' with priority 3 to user with highest role priority 0", + }); + + await role.save({ + permissions: [], + }); + }); +}); diff --git a/server/api/api/v1/roles/:id/index.ts b/server/api/api/v1/roles/:id/index.ts new file mode 100644 index 00000000..126bf1d3 --- /dev/null +++ b/server/api/api/v1/roles/:id/index.ts @@ -0,0 +1,141 @@ +import { applyConfig, auth, handleZodError, jsonOrForm } from "@/api"; +import { errorResponse, jsonResponse, response } from "@/response"; +import { zValidator } from "@hono/zod-validator"; +import type { Hono } from "hono"; +import { z } from "zod"; +import { RolePermissions } from "~/drizzle/schema"; +import { Role } from "~/packages/database-interface/role"; + +export const meta = applyConfig({ + allowedMethods: ["GET", "POST", "DELETE"], + auth: { + required: true, + }, + ratelimits: { + duration: 60, + max: 20, + }, + route: "/api/v1/roles/:id", +}); + +export const schemas = { + param: z.object({ + id: z.string().uuid(), + }), +}; +export default (app: Hono) => + app.on( + meta.allowedMethods, + meta.route, + jsonOrForm(), + zValidator("param", schemas.param, handleZodError), + auth(meta.auth), + async (context) => { + const { user } = context.req.valid("header"); + const { id } = context.req.valid("param"); + + if (!user) { + return errorResponse("Unauthorized", 401); + } + + const userRoles = await Role.getUserRoles(user.id); + const role = await Role.fromId(id); + + if (!role) { + return errorResponse("Role not found", 404); + } + + switch (context.req.method) { + case "GET": { + return jsonResponse(role.toAPI()); + } + + case "POST": { + // Check if user has MANAGE_ROLES permission + if ( + !userRoles.some((r) => + r + .getRole() + .permissions.includes( + RolePermissions.MANAGE_ROLES, + ), + ) + ) { + return errorResponse( + "You do not have permission to manage roles", + 403, + ); + } + + const userHighestRole = userRoles.reduce((prev, current) => + prev.getRole().priority > current.getRole().priority + ? prev + : current, + ); + + if ( + role.getRole().priority > + userHighestRole.getRole().priority + ) { + return errorResponse( + `Cannot assign role '${ + role.getRole().name + }' with priority ${ + role.getRole().priority + } to user with highest role priority ${ + userHighestRole.getRole().priority + }`, + 403, + ); + } + + await role.linkUser(user.id); + + return response(null, 204); + } + case "DELETE": { + // Check if user has MANAGE_ROLES permission + if ( + !userRoles.some((r) => + r + .getRole() + .permissions.includes( + RolePermissions.MANAGE_ROLES, + ), + ) + ) { + return errorResponse( + "You do not have permission to manage roles", + 403, + ); + } + + const userHighestRole = userRoles.reduce((prev, current) => + prev.getRole().priority > current.getRole().priority + ? prev + : current, + ); + + if ( + role.getRole().priority > + userHighestRole.getRole().priority + ) { + return errorResponse( + `Cannot remove role '${ + role.getRole().name + }' with priority ${ + role.getRole().priority + } from user with highest role priority ${ + userHighestRole.getRole().priority + }`, + 403, + ); + } + + await role.unlinkUser(user.id); + + return response(null, 204); + } + } + }, + ); diff --git a/server/api/api/v1/roles/index.test.ts b/server/api/api/v1/roles/index.test.ts new file mode 100644 index 00000000..a014c8c3 --- /dev/null +++ b/server/api/api/v1/roles/index.test.ts @@ -0,0 +1,62 @@ +import { beforeAll, describe, expect, test } from "bun:test"; +import { config } from "config-manager"; +import { ADMIN_ROLES } from "~/drizzle/schema"; +import { Role } from "~/packages/database-interface/role"; +import { getTestUsers, sendTestRequest } from "~/tests/utils"; +import { meta } from "./index"; + +const { users, tokens } = await getTestUsers(1); +let role: Role; + +beforeAll(async () => { + // Create new role + role = await Role.new({ + name: "test", + permissions: ADMIN_ROLES, + priority: 0, + description: "test", + visible: true, + icon: "test", + }); + + expect(role).toBeDefined(); + + // Link role to user + await role.linkUser(users[0].id); +}); + +// /api/v1/roles +describe(meta.route, () => { + test("should return 401 if not authenticated", async () => { + const response = await sendTestRequest( + new Request(new URL(meta.route, config.http.base_url), { + method: "GET", + }), + ); + + expect(response.status).toBe(401); + }); + + test("should return a list of roles", async () => { + const response = await sendTestRequest( + new Request(new URL(meta.route, config.http.base_url), { + method: "GET", + headers: { + Authorization: `Bearer ${tokens[0].accessToken}`, + }, + }), + ); + + expect(response.ok).toBe(true); + const roles = await response.json(); + expect(roles).toHaveLength(1); + expect(roles[0]).toMatchObject({ + name: "test", + permissions: ADMIN_ROLES, + priority: 0, + description: "test", + visible: true, + icon: "test", + }); + }); +}); diff --git a/server/api/api/v1/roles/index.ts b/server/api/api/v1/roles/index.ts new file mode 100644 index 00000000..f216384a --- /dev/null +++ b/server/api/api/v1/roles/index.ts @@ -0,0 +1,34 @@ +import { applyConfig, auth } from "@/api"; +import { errorResponse, jsonResponse } from "@/response"; +import type { Hono } from "hono"; +import { Role } from "~/packages/database-interface/role"; + +export const meta = applyConfig({ + allowedMethods: ["GET"], + auth: { + required: true, + }, + ratelimits: { + duration: 60, + max: 20, + }, + route: "/api/v1/roles", +}); + +export default (app: Hono) => + app.on( + meta.allowedMethods, + meta.route, + auth(meta.auth), + async (context) => { + const { user } = context.req.valid("header"); + + if (!user) { + return errorResponse("Unauthorized", 401); + } + + const userRoles = await Role.getUserRoles(user.id); + + return jsonResponse(userRoles.map((r) => r.toAPI())); + }, + ); diff --git a/utils/api.ts b/utils/api.ts index b44d894a..7f55fb1a 100644 --- a/utils/api.ts +++ b/utils/api.ts @@ -297,6 +297,7 @@ export const jsonOrForm = () => { ...Object.fromEntries(files), }; } + await next(); }); };