diff --git a/packages/db/drizzle/0066_adorable_matthew_murdock.sql b/packages/db/drizzle/0066_adorable_matthew_murdock.sql new file mode 100644 index 00000000..34c50914 --- /dev/null +++ b/packages/db/drizzle/0066_adorable_matthew_murdock.sql @@ -0,0 +1,33 @@ +CREATE INDEX `users_to_workspaces_workspace_id_idx` ON `users_to_workspaces` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `status_report_workspace_created_idx` ON `status_report` (`workspace_id`,`created_at`);--> statement-breakpoint +CREATE INDEX `status_report_page_id_idx` ON `status_report` (`page_id`);--> statement-breakpoint +CREATE INDEX `status_report_update_status_report_id_idx` ON `status_report_update` (`status_report_id`);--> statement-breakpoint +CREATE INDEX `integration_workspace_id_idx` ON `integration` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `page_lower_slug_idx` ON `page` (LOWER("slug"));--> statement-breakpoint +CREATE INDEX `page_lower_custom_domain_idx` ON `page` (LOWER("custom_domain"));--> statement-breakpoint +CREATE INDEX `page_workspace_id_idx` ON `page` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `monitor_workspace_id_active_idx` ON `monitor` (`workspace_id`) WHERE "monitor"."deleted_at" IS NULL;--> statement-breakpoint +CREATE INDEX `notification_workspace_id_idx` ON `notification` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `notifications_to_monitors_notification_id_idx` ON `notifications_to_monitors` (`notification_id`);--> statement-breakpoint +CREATE INDEX `invitation_workspace_id_idx` ON `invitation` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `incident_workspace_id_idx` ON `incident` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `monitor_tag_workspace_id_idx` ON `monitor_tag` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `monitor_tag_to_monitor_monitor_tag_id_idx` ON `monitor_tag_to_monitor` (`monitor_tag_id`);--> statement-breakpoint +CREATE INDEX `application_workspace_id_idx` ON `application` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `maintenance_page_id_idx` ON `maintenance` (`page_id`);--> statement-breakpoint +CREATE INDEX `maintenance_workspace_id_idx` ON `maintenance` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `check_workspace_id_idx` ON `check` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `monitor_run_workspace_id_idx` ON `monitor_run` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `monitor_run_monitor_id_idx` ON `monitor_run` (`monitor_id`);--> statement-breakpoint +CREATE INDEX `private_location_workspace_id_idx` ON `private_location` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `private_location_to_monitor_private_location_id_idx` ON `private_location_to_monitor` (`private_location_id`);--> statement-breakpoint +CREATE INDEX `private_location_to_monitor_monitor_id_idx` ON `private_location_to_monitor` (`monitor_id`);--> statement-breakpoint +CREATE INDEX `monitor_group_workspace_id_idx` ON `monitor_group` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `monitor_group_page_id_idx` ON `monitor_group` (`page_id`);--> statement-breakpoint +CREATE INDEX `api_key_workspace_id_idx` ON `api_key` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `maintenance_to_page_component_page_component_id_idx` ON `maintenance_to_page_component` (`page_component_id`);--> statement-breakpoint +CREATE INDEX `page_component_workspace_id_idx` ON `page_component` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `status_report_to_page_component_page_component_id_idx` ON `status_report_to_page_component` (`page_component_id`);--> statement-breakpoint +CREATE INDEX `page_component_groups_page_id_idx` ON `page_component_groups` (`page_id`);--> statement-breakpoint +CREATE INDEX `page_component_groups_workspace_id_idx` ON `page_component_groups` (`workspace_id`);--> statement-breakpoint +CREATE INDEX `feedback_workspace_id_idx` ON `feedback` (`workspace_id`); \ No newline at end of file diff --git a/packages/db/drizzle/meta/0066_snapshot.json b/packages/db/drizzle/meta/0066_snapshot.json new file mode 100644 index 00000000..31ad4ecc --- /dev/null +++ b/packages/db/drizzle/meta/0066_snapshot.json @@ -0,0 +1,3905 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "4a6c108d-d12a-4be4-84af-d4d970d84bb3", + "prevId": "084142ea-4cb4-497c-a08a-140f2dd5942e", + "tables": { + "workspace": { + "name": "workspace", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "stripe_id": { + "name": "stripe_id", + "type": "text(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subscription_id": { + "name": "subscription_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "plan": { + "name": "plan", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "ends_at": { + "name": "ends_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "paid_until": { + "name": "paid_until", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "limits": { + "name": "limits", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'{}'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "dsn": { + "name": "dsn", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "workspace_slug_unique": { + "name": "workspace_slug_unique", + "columns": [ + "slug" + ], + "isUnique": true + }, + "workspace_stripe_id_unique": { + "name": "workspace_stripe_id_unique", + "columns": [ + "stripe_id" + ], + "isUnique": true + }, + "workspace_id_dsn_unique": { + "name": "workspace_id_dsn_unique", + "columns": [ + "id", + "dsn" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "account": { + "name": "account", + "columns": { + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provider_account_id": { + "name": "provider_account_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "token_type": { + "name": "token_type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "session_state": { + "name": "session_state", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "account_provider_provider_account_id_pk": { + "columns": [ + "provider", + "provider_account_id" + ], + "name": "account_provider_provider_account_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "session": { + "name": "session", + "columns": { + "session_token": { + "name": "session_token", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires": { + "name": "expires", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "user": { + "name": "user", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "tenant_id": { + "name": "tenant_id", + "type": "text(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "photo_url": { + "name": "photo_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "emailVerified": { + "name": "emailVerified", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "deleted_at": { + "name": "deleted_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "user_tenant_id_unique": { + "name": "user_tenant_id_unique", + "columns": [ + "tenant_id" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "users_to_workspaces": { + "name": "users_to_workspaces", + "columns": { + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'member'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "users_to_workspaces_workspace_id_idx": { + "name": "users_to_workspaces_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "users_to_workspaces_user_id_user_id_fk": { + "name": "users_to_workspaces_user_id_user_id_fk", + "tableFrom": "users_to_workspaces", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "users_to_workspaces_workspace_id_workspace_id_fk": { + "name": "users_to_workspaces_workspace_id_workspace_id_fk", + "tableFrom": "users_to_workspaces", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "users_to_workspaces_user_id_workspace_id_pk": { + "columns": [ + "user_id", + "workspace_id" + ], + "name": "users_to_workspaces_user_id_workspace_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "verification_token": { + "name": "verification_token", + "columns": { + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires": { + "name": "expires", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "verification_token_identifier_token_pk": { + "columns": [ + "identifier", + "token" + ], + "name": "verification_token_identifier_token_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "status_report": { + "name": "status_report", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "text(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "status_report_workspace_created_idx": { + "name": "status_report_workspace_created_idx", + "columns": [ + "workspace_id", + "created_at" + ], + "isUnique": false + }, + "status_report_page_id_idx": { + "name": "status_report_page_id_idx", + "columns": [ + "page_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "status_report_workspace_id_workspace_id_fk": { + "name": "status_report_workspace_id_workspace_id_fk", + "tableFrom": "status_report", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "status_report_page_id_page_id_fk": { + "name": "status_report_page_id_page_id_fk", + "tableFrom": "status_report", + "tableTo": "page", + "columnsFrom": [ + "page_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "status_report_update": { + "name": "status_report_update", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "date": { + "name": "date", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "status_report_id": { + "name": "status_report_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "status_report_update_status_report_id_idx": { + "name": "status_report_update_status_report_id_idx", + "columns": [ + "status_report_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "status_report_update_status_report_id_status_report_id_fk": { + "name": "status_report_update_status_report_id_status_report_id_fk", + "tableFrom": "status_report_update", + "tableTo": "status_report", + "columnsFrom": [ + "status_report_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "integration": { + "name": "integration", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "credential": { + "name": "credential", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "external_id": { + "name": "external_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "integration_workspace_id_idx": { + "name": "integration_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "integration_workspace_id_workspace_id_fk": { + "name": "integration_workspace_id_workspace_id_fk", + "tableFrom": "integration", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "page": { + "name": "page", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "icon": { + "name": "icon", + "type": "text(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "slug": { + "name": "slug", + "type": "text(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "custom_domain": { + "name": "custom_domain", + "type": "text(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "published": { + "name": "published", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "force_theme": { + "name": "force_theme", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'system'" + }, + "password": { + "name": "password", + "type": "text(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "password_protected": { + "name": "password_protected", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "access_type": { + "name": "access_type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'public'" + }, + "auth_email_domains": { + "name": "auth_email_domains", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "allowed_ip_ranges": { + "name": "allowed_ip_ranges", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "homepage_url": { + "name": "homepage_url", + "type": "text(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "contact_url": { + "name": "contact_url", + "type": "text(256)", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "default_locale": { + "name": "default_locale", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'en'" + }, + "locales": { + "name": "locales", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "legacy_page": { + "name": "legacy_page", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "configuration": { + "name": "configuration", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "allow_index": { + "name": "allow_index", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + }, + "show_monitor_values": { + "name": "show_monitor_values", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "page_slug_unique": { + "name": "page_slug_unique", + "columns": [ + "slug" + ], + "isUnique": true + }, + "page_lower_slug_idx": { + "name": "page_lower_slug_idx", + "columns": [ + "LOWER(\"slug\")" + ], + "isUnique": false + }, + "page_lower_custom_domain_idx": { + "name": "page_lower_custom_domain_idx", + "columns": [ + "LOWER(\"custom_domain\")" + ], + "isUnique": false + }, + "page_workspace_id_idx": { + "name": "page_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "page_workspace_id_workspace_id_fk": { + "name": "page_workspace_id_workspace_id_fk", + "tableFrom": "page", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "monitor": { + "name": "monitor", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "job_type": { + "name": "job_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'http'" + }, + "periodicity": { + "name": "periodicity", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'other'" + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'active'" + }, + "active": { + "name": "active", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "regions": { + "name": "regions", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "url": { + "name": "url", + "type": "text(2048)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "external_name": { + "name": "external_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "headers": { + "name": "headers", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "body": { + "name": "body", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "method": { + "name": "method", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'GET'" + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "timeout": { + "name": "timeout", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 45000 + }, + "degraded_after": { + "name": "degraded_after", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "assertions": { + "name": "assertions", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "otel_endpoint": { + "name": "otel_endpoint", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "otel_headers": { + "name": "otel_headers", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "public": { + "name": "public", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "retry": { + "name": "retry", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 3 + }, + "follow_redirects": { + "name": "follow_redirects", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "deleted_at": { + "name": "deleted_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "monitor_workspace_id_active_idx": { + "name": "monitor_workspace_id_active_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false, + "where": "\"monitor\".\"deleted_at\" IS NULL" + } + }, + "foreignKeys": { + "monitor_workspace_id_workspace_id_fk": { + "name": "monitor_workspace_id_workspace_id_fk", + "tableFrom": "monitor", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "page_subscriber": { + "name": "page_subscriber", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "channel_type": { + "name": "channel_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'email'" + }, + "webhook_url": { + "name": "webhook_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "channel_config": { + "name": "channel_config", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "source": { + "name": "source", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'self_signup'" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "accepted_at": { + "name": "accepted_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "unsubscribed_at": { + "name": "unsubscribed_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "idx_page_subscriber_email_page_active": { + "name": "idx_page_subscriber_email_page_active", + "columns": [ + "LOWER(\"email\")", + "page_id" + ], + "isUnique": true, + "where": "\"page_subscriber\".\"unsubscribed_at\" IS NULL AND \"page_subscriber\".\"channel_type\" = 'email'" + }, + "idx_page_subscriber_webhook_page_active": { + "name": "idx_page_subscriber_webhook_page_active", + "columns": [ + "LOWER(\"webhook_url\")", + "page_id" + ], + "isUnique": true, + "where": "\"page_subscriber\".\"unsubscribed_at\" IS NULL AND \"page_subscriber\".\"channel_type\" = 'webhook'" + } + }, + "foreignKeys": { + "page_subscriber_page_id_page_id_fk": { + "name": "page_subscriber_page_id_page_id_fk", + "tableFrom": "page_subscriber", + "tableTo": "page", + "columnsFrom": [ + "page_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": { + "page_subscriber_channel_check": { + "name": "page_subscriber_channel_check", + "value": "(\"page_subscriber\".\"channel_type\" = 'email' AND \"page_subscriber\".\"email\" IS NOT NULL AND \"page_subscriber\".\"webhook_url\" IS NULL) OR (\"page_subscriber\".\"channel_type\" = 'webhook' AND \"page_subscriber\".\"webhook_url\" IS NOT NULL AND \"page_subscriber\".\"email\" IS NULL)" + } + } + }, + "page_subscriber_to_page_component": { + "name": "page_subscriber_to_page_component", + "columns": { + "page_subscriber_id": { + "name": "page_subscriber_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "page_component_id": { + "name": "page_component_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": {}, + "foreignKeys": { + "page_subscriber_to_page_component_page_subscriber_id_page_subscriber_id_fk": { + "name": "page_subscriber_to_page_component_page_subscriber_id_page_subscriber_id_fk", + "tableFrom": "page_subscriber_to_page_component", + "tableTo": "page_subscriber", + "columnsFrom": [ + "page_subscriber_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "page_subscriber_to_page_component_page_component_id_page_component_id_fk": { + "name": "page_subscriber_to_page_component_page_component_id_page_component_id_fk", + "tableFrom": "page_subscriber_to_page_component", + "tableTo": "page_component", + "columnsFrom": [ + "page_component_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "page_subscriber_to_page_component_page_subscriber_id_page_component_id_pk": { + "columns": [ + "page_subscriber_id", + "page_component_id" + ], + "name": "page_subscriber_to_page_component_page_subscriber_id_page_component_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "notification": { + "name": "notification", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'{}'" + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "notification_workspace_id_idx": { + "name": "notification_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "notification_workspace_id_workspace_id_fk": { + "name": "notification_workspace_id_workspace_id_fk", + "tableFrom": "notification", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "notification_trigger": { + "name": "notification_trigger", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "monitor_id": { + "name": "monitor_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "notification_id": { + "name": "notification_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "cron_timestamp": { + "name": "cron_timestamp", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "notification_id_monitor_id_crontimestampe": { + "name": "notification_id_monitor_id_crontimestampe", + "columns": [ + "notification_id", + "monitor_id", + "cron_timestamp" + ], + "isUnique": true + } + }, + "foreignKeys": { + "notification_trigger_monitor_id_monitor_id_fk": { + "name": "notification_trigger_monitor_id_monitor_id_fk", + "tableFrom": "notification_trigger", + "tableTo": "monitor", + "columnsFrom": [ + "monitor_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notification_trigger_notification_id_notification_id_fk": { + "name": "notification_trigger_notification_id_notification_id_fk", + "tableFrom": "notification_trigger", + "tableTo": "notification", + "columnsFrom": [ + "notification_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "notifications_to_monitors": { + "name": "notifications_to_monitors", + "columns": { + "monitor_id": { + "name": "monitor_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "notification_id": { + "name": "notification_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "notifications_to_monitors_notification_id_idx": { + "name": "notifications_to_monitors_notification_id_idx", + "columns": [ + "notification_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "notifications_to_monitors_monitor_id_monitor_id_fk": { + "name": "notifications_to_monitors_monitor_id_monitor_id_fk", + "tableFrom": "notifications_to_monitors", + "tableTo": "monitor", + "columnsFrom": [ + "monitor_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notifications_to_monitors_notification_id_notification_id_fk": { + "name": "notifications_to_monitors_notification_id_notification_id_fk", + "tableFrom": "notifications_to_monitors", + "tableTo": "notification", + "columnsFrom": [ + "notification_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "notifications_to_monitors_monitor_id_notification_id_pk": { + "columns": [ + "monitor_id", + "notification_id" + ], + "name": "notifications_to_monitors_monitor_id_notification_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "monitor_status": { + "name": "monitor_status", + "columns": { + "monitor_id": { + "name": "monitor_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "region": { + "name": "region", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'active'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "monitor_status_idx": { + "name": "monitor_status_idx", + "columns": [ + "monitor_id", + "region" + ], + "isUnique": false + } + }, + "foreignKeys": { + "monitor_status_monitor_id_monitor_id_fk": { + "name": "monitor_status_monitor_id_monitor_id_fk", + "tableFrom": "monitor_status", + "tableTo": "monitor", + "columnsFrom": [ + "monitor_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "monitor_status_monitor_id_region_pk": { + "columns": [ + "monitor_id", + "region" + ], + "name": "monitor_status_monitor_id_region_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "invitation": { + "name": "invitation", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'member'" + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "accepted_at": { + "name": "accepted_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "invitation_workspace_id_idx": { + "name": "invitation_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "incident": { + "name": "incident", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "summary": { + "name": "summary", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'triage'" + }, + "monitor_id": { + "name": "monitor_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "started_at": { + "name": "started_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "acknowledged_at": { + "name": "acknowledged_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "acknowledged_by": { + "name": "acknowledged_by", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "resolved_at": { + "name": "resolved_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "resolved_by": { + "name": "resolved_by", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "incident_screenshot_url": { + "name": "incident_screenshot_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "recovery_screenshot_url": { + "name": "recovery_screenshot_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "auto_resolved": { + "name": "auto_resolved", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "incident_workspace_id_idx": { + "name": "incident_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + }, + "incident_monitor_id_started_at_unique": { + "name": "incident_monitor_id_started_at_unique", + "columns": [ + "monitor_id", + "started_at" + ], + "isUnique": true + } + }, + "foreignKeys": { + "incident_monitor_id_monitor_id_fk": { + "name": "incident_monitor_id_monitor_id_fk", + "tableFrom": "incident", + "tableTo": "monitor", + "columnsFrom": [ + "monitor_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set default", + "onUpdate": "no action" + }, + "incident_workspace_id_workspace_id_fk": { + "name": "incident_workspace_id_workspace_id_fk", + "tableFrom": "incident", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "incident_acknowledged_by_user_id_fk": { + "name": "incident_acknowledged_by_user_id_fk", + "tableFrom": "incident", + "tableTo": "user", + "columnsFrom": [ + "acknowledged_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "incident_resolved_by_user_id_fk": { + "name": "incident_resolved_by_user_id_fk", + "tableFrom": "incident", + "tableTo": "user", + "columnsFrom": [ + "resolved_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "monitor_tag": { + "name": "monitor_tag", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "color": { + "name": "color", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "monitor_tag_workspace_id_idx": { + "name": "monitor_tag_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "monitor_tag_workspace_id_workspace_id_fk": { + "name": "monitor_tag_workspace_id_workspace_id_fk", + "tableFrom": "monitor_tag", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "monitor_tag_to_monitor": { + "name": "monitor_tag_to_monitor", + "columns": { + "monitor_id": { + "name": "monitor_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "monitor_tag_id": { + "name": "monitor_tag_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "monitor_tag_to_monitor_monitor_tag_id_idx": { + "name": "monitor_tag_to_monitor_monitor_tag_id_idx", + "columns": [ + "monitor_tag_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "monitor_tag_to_monitor_monitor_id_monitor_id_fk": { + "name": "monitor_tag_to_monitor_monitor_id_monitor_id_fk", + "tableFrom": "monitor_tag_to_monitor", + "tableTo": "monitor", + "columnsFrom": [ + "monitor_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "monitor_tag_to_monitor_monitor_tag_id_monitor_tag_id_fk": { + "name": "monitor_tag_to_monitor_monitor_tag_id_monitor_tag_id_fk", + "tableFrom": "monitor_tag_to_monitor", + "tableTo": "monitor_tag", + "columnsFrom": [ + "monitor_tag_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "monitor_tag_to_monitor_monitor_id_monitor_tag_id_pk": { + "columns": [ + "monitor_id", + "monitor_tag_id" + ], + "name": "monitor_tag_to_monitor_monitor_id_monitor_tag_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "application": { + "name": "application", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "dsn": { + "name": "dsn", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "application_dsn_unique": { + "name": "application_dsn_unique", + "columns": [ + "dsn" + ], + "isUnique": true + }, + "application_workspace_id_idx": { + "name": "application_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "application_workspace_id_workspace_id_fk": { + "name": "application_workspace_id_workspace_id_fk", + "tableFrom": "application", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "maintenance": { + "name": "maintenance", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "title": { + "name": "title", + "type": "text(256)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "from": { + "name": "from", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "to": { + "name": "to", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "maintenance_page_id_idx": { + "name": "maintenance_page_id_idx", + "columns": [ + "page_id" + ], + "isUnique": false + }, + "maintenance_workspace_id_idx": { + "name": "maintenance_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "maintenance_workspace_id_workspace_id_fk": { + "name": "maintenance_workspace_id_workspace_id_fk", + "tableFrom": "maintenance", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "maintenance_page_id_page_id_fk": { + "name": "maintenance_page_id_page_id_fk", + "tableFrom": "maintenance", + "tableTo": "page", + "columnsFrom": [ + "page_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "check": { + "name": "check", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "regions": { + "name": "regions", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "''" + }, + "url": { + "name": "url", + "type": "text(4096)", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "headers": { + "name": "headers", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "body": { + "name": "body", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "''" + }, + "method": { + "name": "method", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "'GET'" + }, + "count_requests": { + "name": "count_requests", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 1 + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "check_workspace_id_idx": { + "name": "check_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "check_workspace_id_workspace_id_fk": { + "name": "check_workspace_id_workspace_id_fk", + "tableFrom": "check", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "monitor_run": { + "name": "monitor_run", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "monitor_id": { + "name": "monitor_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "runned_at": { + "name": "runned_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "monitor_run_workspace_id_idx": { + "name": "monitor_run_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + }, + "monitor_run_monitor_id_idx": { + "name": "monitor_run_monitor_id_idx", + "columns": [ + "monitor_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "monitor_run_workspace_id_workspace_id_fk": { + "name": "monitor_run_workspace_id_workspace_id_fk", + "tableFrom": "monitor_run", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "monitor_run_monitor_id_monitor_id_fk": { + "name": "monitor_run_monitor_id_monitor_id_fk", + "tableFrom": "monitor_run", + "tableTo": "monitor", + "columnsFrom": [ + "monitor_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "private_location": { + "name": "private_location", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "last_seen_at": { + "name": "last_seen_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "private_location_workspace_id_idx": { + "name": "private_location_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "private_location_workspace_id_workspace_id_fk": { + "name": "private_location_workspace_id_workspace_id_fk", + "tableFrom": "private_location", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "private_location_to_monitor": { + "name": "private_location_to_monitor", + "columns": { + "private_location_id": { + "name": "private_location_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "monitor_id": { + "name": "monitor_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "deleted_at": { + "name": "deleted_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "private_location_to_monitor_private_location_id_idx": { + "name": "private_location_to_monitor_private_location_id_idx", + "columns": [ + "private_location_id" + ], + "isUnique": false + }, + "private_location_to_monitor_monitor_id_idx": { + "name": "private_location_to_monitor_monitor_id_idx", + "columns": [ + "monitor_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "private_location_to_monitor_private_location_id_private_location_id_fk": { + "name": "private_location_to_monitor_private_location_id_private_location_id_fk", + "tableFrom": "private_location_to_monitor", + "tableTo": "private_location", + "columnsFrom": [ + "private_location_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "private_location_to_monitor_monitor_id_monitor_id_fk": { + "name": "private_location_to_monitor_monitor_id_monitor_id_fk", + "tableFrom": "private_location_to_monitor", + "tableTo": "monitor", + "columnsFrom": [ + "monitor_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "monitor_group": { + "name": "monitor_group", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "monitor_group_workspace_id_idx": { + "name": "monitor_group_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + }, + "monitor_group_page_id_idx": { + "name": "monitor_group_page_id_idx", + "columns": [ + "page_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "monitor_group_workspace_id_workspace_id_fk": { + "name": "monitor_group_workspace_id_workspace_id_fk", + "tableFrom": "monitor_group", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "monitor_group_page_id_page_id_fk": { + "name": "monitor_group_page_id_page_id_fk", + "tableFrom": "monitor_group", + "tableTo": "page", + "columnsFrom": [ + "page_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "viewer": { + "name": "viewer", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "emailVerified": { + "name": "emailVerified", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "viewer_email_unique": { + "name": "viewer_email_unique", + "columns": [ + "email" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "viewer_accounts": { + "name": "viewer_accounts", + "columns": { + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "provider": { + "name": "provider", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "providerAccountId": { + "name": "providerAccountId", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "token_type": { + "name": "token_type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "session_state": { + "name": "session_state", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "viewer_accounts_user_id_viewer_id_fk": { + "name": "viewer_accounts_user_id_viewer_id_fk", + "tableFrom": "viewer_accounts", + "tableTo": "viewer", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "viewer_accounts_provider_providerAccountId_pk": { + "columns": [ + "provider", + "providerAccountId" + ], + "name": "viewer_accounts_provider_providerAccountId_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "viewer_session": { + "name": "viewer_session", + "columns": { + "session_token": { + "name": "session_token", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires": { + "name": "expires", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "viewer_session_user_id_viewer_id_fk": { + "name": "viewer_session_user_id_viewer_id_fk", + "tableFrom": "viewer_session", + "tableTo": "viewer", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "api_key": { + "name": "api_key", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "prefix": { + "name": "prefix", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "hashed_token": { + "name": "hashed_token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_by_id": { + "name": "created_by_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "last_used_at": { + "name": "last_used_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "api_key_prefix_unique": { + "name": "api_key_prefix_unique", + "columns": [ + "prefix" + ], + "isUnique": true + }, + "api_key_hashed_token_unique": { + "name": "api_key_hashed_token_unique", + "columns": [ + "hashed_token" + ], + "isUnique": true + }, + "api_key_prefix_idx": { + "name": "api_key_prefix_idx", + "columns": [ + "prefix" + ], + "isUnique": false + }, + "api_key_workspace_id_idx": { + "name": "api_key_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "api_key_workspace_id_workspace_id_fk": { + "name": "api_key_workspace_id_workspace_id_fk", + "tableFrom": "api_key", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "api_key_created_by_id_user_id_fk": { + "name": "api_key_created_by_id_user_id_fk", + "tableFrom": "api_key", + "tableTo": "user", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "maintenance_to_page_component": { + "name": "maintenance_to_page_component", + "columns": { + "maintenance_id": { + "name": "maintenance_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "page_component_id": { + "name": "page_component_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "maintenance_to_page_component_page_component_id_idx": { + "name": "maintenance_to_page_component_page_component_id_idx", + "columns": [ + "page_component_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "maintenance_to_page_component_maintenance_id_maintenance_id_fk": { + "name": "maintenance_to_page_component_maintenance_id_maintenance_id_fk", + "tableFrom": "maintenance_to_page_component", + "tableTo": "maintenance", + "columnsFrom": [ + "maintenance_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "maintenance_to_page_component_page_component_id_page_component_id_fk": { + "name": "maintenance_to_page_component_page_component_id_page_component_id_fk", + "tableFrom": "maintenance_to_page_component", + "tableTo": "page_component", + "columnsFrom": [ + "page_component_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "maintenance_to_page_component_maintenance_id_page_component_id_pk": { + "columns": [ + "maintenance_id", + "page_component_id" + ], + "name": "maintenance_to_page_component_maintenance_id_page_component_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "page_component": { + "name": "page_component", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'monitor'" + }, + "monitor_id": { + "name": "monitor_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 0 + }, + "group_id": { + "name": "group_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "group_order": { + "name": "group_order", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": 0 + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "page_component_workspace_id_idx": { + "name": "page_component_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + }, + "page_component_page_id_monitor_id_unique": { + "name": "page_component_page_id_monitor_id_unique", + "columns": [ + "page_id", + "monitor_id" + ], + "isUnique": true + } + }, + "foreignKeys": { + "page_component_workspace_id_workspace_id_fk": { + "name": "page_component_workspace_id_workspace_id_fk", + "tableFrom": "page_component", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "page_component_page_id_page_id_fk": { + "name": "page_component_page_id_page_id_fk", + "tableFrom": "page_component", + "tableTo": "page", + "columnsFrom": [ + "page_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "page_component_monitor_id_monitor_id_fk": { + "name": "page_component_monitor_id_monitor_id_fk", + "tableFrom": "page_component", + "tableTo": "monitor", + "columnsFrom": [ + "monitor_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "page_component_group_id_page_component_groups_id_fk": { + "name": "page_component_group_id_page_component_groups_id_fk", + "tableFrom": "page_component", + "tableTo": "page_component_groups", + "columnsFrom": [ + "group_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": { + "page_component_type_check": { + "name": "page_component_type_check", + "value": "\"page_component\".\"type\" = 'monitor' AND \"page_component\".\"monitor_id\" IS NOT NULL OR \"page_component\".\"type\" = 'static' AND \"page_component\".\"monitor_id\" IS NULL" + } + } + }, + "status_report_to_page_component": { + "name": "status_report_to_page_component", + "columns": { + "status_report_id": { + "name": "status_report_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "page_component_id": { + "name": "page_component_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "status_report_to_page_component_page_component_id_idx": { + "name": "status_report_to_page_component_page_component_id_idx", + "columns": [ + "page_component_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "status_report_to_page_component_status_report_id_status_report_id_fk": { + "name": "status_report_to_page_component_status_report_id_status_report_id_fk", + "tableFrom": "status_report_to_page_component", + "tableTo": "status_report", + "columnsFrom": [ + "status_report_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "status_report_to_page_component_page_component_id_page_component_id_fk": { + "name": "status_report_to_page_component_page_component_id_page_component_id_fk", + "tableFrom": "status_report_to_page_component", + "tableTo": "page_component", + "columnsFrom": [ + "page_component_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "status_report_to_page_component_status_report_id_page_component_id_pk": { + "columns": [ + "status_report_id", + "page_component_id" + ], + "name": "status_report_to_page_component_status_report_id_page_component_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "page_component_groups": { + "name": "page_component_groups", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "page_id": { + "name": "page_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "default_open": { + "name": "default_open", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "page_component_groups_page_id_idx": { + "name": "page_component_groups_page_id_idx", + "columns": [ + "page_id" + ], + "isUnique": false + }, + "page_component_groups_workspace_id_idx": { + "name": "page_component_groups_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "page_component_groups_workspace_id_workspace_id_fk": { + "name": "page_component_groups_workspace_id_workspace_id_fk", + "tableFrom": "page_component_groups", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "page_component_groups_page_id_page_id_fk": { + "name": "page_component_groups_page_id_page_id_fk", + "tableFrom": "page_component_groups", + "tableTo": "page", + "columnsFrom": [ + "page_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "feedback": { + "name": "feedback", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "source": { + "name": "source", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "blocker": { + "name": "blocker", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "(strftime('%s', 'now'))" + } + }, + "indexes": { + "feedback_workspace_id_idx": { + "name": "feedback_workspace_id_idx", + "columns": [ + "workspace_id" + ], + "isUnique": false + } + }, + "foreignKeys": { + "feedback_workspace_id_workspace_id_fk": { + "name": "feedback_workspace_id_workspace_id_fk", + "tableFrom": "feedback", + "tableTo": "workspace", + "columnsFrom": [ + "workspace_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "feedback_user_id_user_id_fk": { + "name": "feedback_user_id_user_id_fk", + "tableFrom": "feedback", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "audit_log": { + "name": "audit_log", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "workspace_id": { + "name": "workspace_id", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "actor_type": { + "name": "actor_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "actor_id": { + "name": "actor_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "actor_user_id": { + "name": "actor_user_id", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "entity_type": { + "name": "entity_type", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "entity_id": { + "name": "entity_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "before": { + "name": "before", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "after": { + "name": "after", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "changed_fields": { + "name": "changed_fields", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "audit_log_workspace_created_idx": { + "name": "audit_log_workspace_created_idx", + "columns": [ + "workspace_id", + "created_at" + ], + "isUnique": false + }, + "audit_log_entity_idx": { + "name": "audit_log_entity_idx", + "columns": [ + "workspace_id", + "entity_type", + "entity_id", + "created_at" + ], + "isUnique": false + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": { + "page_lower_slug_idx": { + "columns": { + "LOWER(\"slug\")": { + "isExpression": true + } + } + }, + "page_lower_custom_domain_idx": { + "columns": { + "LOWER(\"custom_domain\")": { + "isExpression": true + } + } + }, + "idx_page_subscriber_email_page_active": { + "columns": { + "LOWER(\"email\")": { + "isExpression": true + } + } + }, + "idx_page_subscriber_webhook_page_active": { + "columns": { + "LOWER(\"webhook_url\")": { + "isExpression": true + } + } + } + } + } +} \ No newline at end of file diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json index 6214d545..22caec51 100644 --- a/packages/db/drizzle/meta/_journal.json +++ b/packages/db/drizzle/meta/_journal.json @@ -463,6 +463,13 @@ "when": 1777044904253, "tag": "0065_stiff_hiroim", "breakpoints": true + }, + { + "idx": 66, + "version": "6", + "when": 1778177332398, + "tag": "0066_adorable_matthew_murdock", + "breakpoints": true } ] } \ No newline at end of file diff --git a/packages/db/src/schema/api-keys/api_key.ts b/packages/db/src/schema/api-keys/api_key.ts index b9ff5bc4..14b3c689 100644 --- a/packages/db/src/schema/api-keys/api_key.ts +++ b/packages/db/src/schema/api-keys/api_key.ts @@ -24,9 +24,10 @@ export const apiKey = sqliteTable( expiresAt: integer("expires_at", { mode: "timestamp" }), lastUsedAt: integer("last_used_at", { mode: "timestamp" }), }, - (table) => ({ - prefixIdx: index("api_key_prefix_idx").on(table.prefix), - }), + (table) => [ + index("api_key_prefix_idx").on(table.prefix), + index("api_key_workspace_id_idx").on(table.workspaceId), + ], ); export const apiKeyRelations = relations(apiKey, ({ one }) => ({ diff --git a/packages/db/src/schema/applications/application.ts b/packages/db/src/schema/applications/application.ts index 8bb55029..46ff7bbe 100644 --- a/packages/db/src/schema/applications/application.ts +++ b/packages/db/src/schema/applications/application.ts @@ -1,18 +1,22 @@ import { sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { workspace } from "../workspaces"; -export const application = sqliteTable("application", { - id: integer("id").primaryKey(), - name: text("name"), // friendly name for the project - dsn: text("dsn").unique(), // dsn for the source +export const application = sqliteTable( + "application", + { + id: integer("id").primaryKey(), + name: text("name"), // friendly name for the project + dsn: text("dsn").unique(), // dsn for the source - workspaceId: integer("workspace_id").references(() => workspace.id), + workspaceId: integer("workspace_id").references(() => workspace.id), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [index("application_workspace_id_idx").on(t.workspaceId)], +); diff --git a/packages/db/src/schema/audit_logs/audit_log.ts b/packages/db/src/schema/audit_logs/audit_log.ts index b6579da1..b8d7d142 100644 --- a/packages/db/src/schema/audit_logs/audit_log.ts +++ b/packages/db/src/schema/audit_logs/audit_log.ts @@ -33,18 +33,15 @@ export const auditLog = sqliteTable( .notNull() .$defaultFn(() => new Date()), }, - (t) => ({ - workspaceCreatedIdx: index("audit_log_workspace_created_idx").on( - t.workspaceId, - t.createdAt, - ), - entityIdx: index("audit_log_entity_idx").on( + (t) => [ + index("audit_log_workspace_created_idx").on(t.workspaceId, t.createdAt), + index("audit_log_entity_idx").on( t.workspaceId, t.entityType, t.entityId, t.createdAt, ), - }), + ], ); export type AuditLog = typeof auditLog.$inferSelect; diff --git a/packages/db/src/schema/check/check.ts b/packages/db/src/schema/check/check.ts index 71341838..c2230559 100644 --- a/packages/db/src/schema/check/check.ts +++ b/packages/db/src/schema/check/check.ts @@ -1,21 +1,25 @@ import { sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { monitorMethods } from "../monitors/constants"; import { workspace } from "../workspaces"; -export const check = sqliteTable("check", { - id: integer("id").primaryKey({ autoIncrement: true }), - regions: text("regions").default("").notNull(), - url: text("url", { length: 4096 }).notNull(), - headers: text("headers").default(""), - body: text("body").default(""), - method: text("method", { enum: monitorMethods }).default("GET"), +export const check = sqliteTable( + "check", + { + id: integer("id").primaryKey({ autoIncrement: true }), + regions: text("regions").default("").notNull(), + url: text("url", { length: 4096 }).notNull(), + headers: text("headers").default(""), + body: text("body").default(""), + method: text("method", { enum: monitorMethods }).default("GET"), - countRequests: integer("count_requests").default(1), + countRequests: integer("count_requests").default(1), - workspaceId: integer("workspace_id").references(() => workspace.id), + workspaceId: integer("workspace_id").references(() => workspace.id), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [index("check_workspace_id_idx").on(t.workspaceId)], +); diff --git a/packages/db/src/schema/feedbacks/feedback.ts b/packages/db/src/schema/feedbacks/feedback.ts index 82bc8d94..93b828ed 100644 --- a/packages/db/src/schema/feedbacks/feedback.ts +++ b/packages/db/src/schema/feedbacks/feedback.ts @@ -1,31 +1,35 @@ import { relations, sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { user } from "../users"; import { workspace } from "../workspaces"; import { feedbackSource, feedbackType } from "./constants"; -export const feedback = sqliteTable("feedback", { - id: integer("id").primaryKey(), +export const feedback = sqliteTable( + "feedback", + { + id: integer("id").primaryKey(), - workspaceId: integer("workspace_id") - .references(() => workspace.id, { onDelete: "cascade" }) - .notNull(), - userId: integer("user_id") - .references(() => user.id, { onDelete: "cascade" }) - .notNull(), + workspaceId: integer("workspace_id") + .references(() => workspace.id, { onDelete: "cascade" }) + .notNull(), + userId: integer("user_id") + .references(() => user.id, { onDelete: "cascade" }) + .notNull(), - source: text("source", { enum: feedbackSource }).notNull(), - message: text("message").notNull(), - type: text("type", { enum: feedbackType }), - blocker: integer("blocker", { mode: "boolean" }), - path: text("path").notNull(), - metadata: text("metadata"), + source: text("source", { enum: feedbackSource }).notNull(), + message: text("message").notNull(), + type: text("type", { enum: feedbackType }), + blocker: integer("blocker", { mode: "boolean" }), + path: text("path").notNull(), + metadata: text("metadata"), - createdAt: integer("created_at", { mode: "timestamp" }) - .default(sql`(strftime('%s', 'now'))`) - .notNull(), -}); + createdAt: integer("created_at", { mode: "timestamp" }) + .default(sql`(strftime('%s', 'now'))`) + .notNull(), + }, + (t) => [index("feedback_workspace_id_idx").on(t.workspaceId)], +); export const feedbackRelations = relations(feedback, ({ one }) => ({ workspace: one(workspace, { diff --git a/packages/db/src/schema/incidents/incident.ts b/packages/db/src/schema/incidents/incident.ts index b3d00171..7b898174 100644 --- a/packages/db/src/schema/incidents/incident.ts +++ b/packages/db/src/schema/incidents/incident.ts @@ -1,6 +1,12 @@ import { sql } from "drizzle-orm"; import { relations } from "drizzle-orm"; -import { integer, sqliteTable, text, unique } from "drizzle-orm/sqlite-core"; +import { + index, + integer, + sqliteTable, + text, + unique, +} from "drizzle-orm/sqlite-core"; import { monitor } from "../monitors"; import { user } from "../users/user"; @@ -56,11 +62,10 @@ export const incidentTable = sqliteTable( sql`(strftime('%s', 'now'))`, ), }, - (table) => { - return { - unique: unique().on(table.monitorId, table.startedAt), - }; - }, + (table) => [ + unique().on(table.monitorId, table.startedAt), + index("incident_workspace_id_idx").on(table.workspaceId), + ], ); export const incidentRelations = relations(incidentTable, ({ one }) => ({ diff --git a/packages/db/src/schema/integration.ts b/packages/db/src/schema/integration.ts index 39836a39..adeae12e 100644 --- a/packages/db/src/schema/integration.ts +++ b/packages/db/src/schema/integration.ts @@ -1,30 +1,34 @@ import { sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { createInsertSchema, createSelectSchema } from "drizzle-zod"; import type { z } from "zod"; import { workspace } from "./workspaces"; -export const integration = sqliteTable("integration", { - id: integer("id").primaryKey(), - name: text("name", { length: 256 }).notNull(), // Should be vercel or other +export const integration = sqliteTable( + "integration", + { + id: integer("id").primaryKey(), + name: text("name", { length: 256 }).notNull(), // Should be vercel or other - workspaceId: integer("workspace_id").references(() => workspace.id), + workspaceId: integer("workspace_id").references(() => workspace.id), - // Not used yet but we might need to get store something for the integration webhook url and or secret - credential: text("credential", { mode: "json" }), + // Not used yet but we might need to get store something for the integration webhook url and or secret + credential: text("credential", { mode: "json" }), - externalId: text("external_id").notNull(), // the id of the integration in the external service + externalId: text("external_id").notNull(), // the id of the integration in the external service - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), - data: text("data", { mode: "json" }).notNull(), -}); + data: text("data", { mode: "json" }).notNull(), + }, + (t) => [index("integration_workspace_id_idx").on(t.workspaceId)], +); export const insertIntegrationSchema = createInsertSchema(integration); export const selectIntegrationSchema = createSelectSchema(integration); diff --git a/packages/db/src/schema/invitations/invitation.ts b/packages/db/src/schema/invitations/invitation.ts index ca4a08a2..e5421a6c 100644 --- a/packages/db/src/schema/invitations/invitation.ts +++ b/packages/db/src/schema/invitations/invitation.ts @@ -1,20 +1,24 @@ import { relations, sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { workspace, workspaceRole } from "../workspaces"; -export const invitation = sqliteTable("invitation", { - id: integer("id").primaryKey(), - email: text("email").notNull(), - role: text("role", { enum: workspaceRole }).notNull().default("member"), - workspaceId: integer("workspace_id").notNull(), - token: text("token").notNull(), - expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - acceptedAt: integer("accepted_at", { mode: "timestamp" }), -}); +export const invitation = sqliteTable( + "invitation", + { + id: integer("id").primaryKey(), + email: text("email").notNull(), + role: text("role", { enum: workspaceRole }).notNull().default("member"), + workspaceId: integer("workspace_id").notNull(), + token: text("token").notNull(), + expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(), + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + acceptedAt: integer("accepted_at", { mode: "timestamp" }), + }, + (t) => [index("invitation_workspace_id_idx").on(t.workspaceId)], +); export const invitationRelations = relations(invitation, ({ one }) => ({ workspace: one(workspace, { diff --git a/packages/db/src/schema/maintenances/maintenance.ts b/packages/db/src/schema/maintenances/maintenance.ts index 6cd75e60..ffe802a8 100644 --- a/packages/db/src/schema/maintenances/maintenance.ts +++ b/packages/db/src/schema/maintenances/maintenance.ts @@ -1,28 +1,37 @@ import { relations, sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { maintenancesToPageComponents } from "../page_components"; import { page } from "../pages"; import { workspace } from "../workspaces"; -export const maintenance = sqliteTable("maintenance", { - id: integer("id").primaryKey(), - title: text("title", { length: 256 }).notNull(), - message: text("message").notNull(), +export const maintenance = sqliteTable( + "maintenance", + { + id: integer("id").primaryKey(), + title: text("title", { length: 256 }).notNull(), + message: text("message").notNull(), - from: integer("from", { mode: "timestamp" }).notNull(), - to: integer("to", { mode: "timestamp" }).notNull(), + from: integer("from", { mode: "timestamp" }).notNull(), + to: integer("to", { mode: "timestamp" }).notNull(), - workspaceId: integer("workspace_id").references(() => workspace.id), - pageId: integer("page_id").references(() => page.id, { onDelete: "cascade" }), + workspaceId: integer("workspace_id").references(() => workspace.id), + pageId: integer("page_id").references(() => page.id, { + onDelete: "cascade", + }), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [ + index("maintenance_page_id_idx").on(t.pageId), + index("maintenance_workspace_id_idx").on(t.workspaceId), + ], +); export const maintenanceRelations = relations(maintenance, ({ one, many }) => ({ maintenancesToPageComponents: many(maintenancesToPageComponents), diff --git a/packages/db/src/schema/monitor_groups/monitor_group.ts b/packages/db/src/schema/monitor_groups/monitor_group.ts index da027806..2b401dca 100644 --- a/packages/db/src/schema/monitor_groups/monitor_group.ts +++ b/packages/db/src/schema/monitor_groups/monitor_group.ts @@ -1,23 +1,30 @@ import { sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { page } from "../pages"; import { workspace } from "../workspaces"; -export const monitorGroup = sqliteTable("monitor_group", { - id: integer("id").primaryKey(), - workspaceId: integer("workspace_id") - .references(() => workspace.id, { onDelete: "cascade" }) - .notNull(), - pageId: integer("page_id") - .references(() => page.id, { onDelete: "cascade" }) - .notNull(), - name: text("name").notNull(), +export const monitorGroup = sqliteTable( + "monitor_group", + { + id: integer("id").primaryKey(), + workspaceId: integer("workspace_id") + .references(() => workspace.id, { onDelete: "cascade" }) + .notNull(), + pageId: integer("page_id") + .references(() => page.id, { onDelete: "cascade" }) + .notNull(), + name: text("name").notNull(), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [ + index("monitor_group_workspace_id_idx").on(t.workspaceId), + index("monitor_group_page_id_idx").on(t.pageId), + ], +); diff --git a/packages/db/src/schema/monitor_run/monitor_run.ts b/packages/db/src/schema/monitor_run/monitor_run.ts index d70e3396..5d58298a 100644 --- a/packages/db/src/schema/monitor_run/monitor_run.ts +++ b/packages/db/src/schema/monitor_run/monitor_run.ts @@ -1,17 +1,24 @@ import { sql } from "drizzle-orm"; -import { integer, sqliteTable } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable } from "drizzle-orm/sqlite-core"; import { monitor } from "../monitors"; import { workspace } from "../workspaces/workspace"; -export const monitorRun = sqliteTable("monitor_run", { - id: integer("id").primaryKey(), +export const monitorRun = sqliteTable( + "monitor_run", + { + id: integer("id").primaryKey(), - workspaceId: integer("workspace_id").references(() => workspace.id), - monitorId: integer("monitor_id").references(() => monitor.id), + workspaceId: integer("workspace_id").references(() => workspace.id), + monitorId: integer("monitor_id").references(() => monitor.id), - runnedAt: integer("runned_at", { mode: "timestamp_ms" }), + runnedAt: integer("runned_at", { mode: "timestamp_ms" }), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [ + index("monitor_run_workspace_id_idx").on(t.workspaceId), + index("monitor_run_monitor_id_idx").on(t.monitorId), + ], +); diff --git a/packages/db/src/schema/monitor_tags/monitor_tag.ts b/packages/db/src/schema/monitor_tags/monitor_tag.ts index c0bf9c79..b8cd5c04 100644 --- a/packages/db/src/schema/monitor_tags/monitor_tag.ts +++ b/packages/db/src/schema/monitor_tags/monitor_tag.ts @@ -1,5 +1,6 @@ import { relations, sql } from "drizzle-orm"; import { + index, integer, primaryKey, sqliteTable, @@ -9,22 +10,26 @@ import { import { monitor } from "../monitors"; import { workspace } from "../workspaces"; -export const monitorTag = sqliteTable("monitor_tag", { - id: integer("id").primaryKey(), - workspaceId: integer("workspace_id") - .references(() => workspace.id, { onDelete: "cascade" }) - .notNull(), +export const monitorTag = sqliteTable( + "monitor_tag", + { + id: integer("id").primaryKey(), + workspaceId: integer("workspace_id") + .references(() => workspace.id, { onDelete: "cascade" }) + .notNull(), - name: text("name").notNull(), - color: text("color").notNull(), + name: text("name").notNull(), + color: text("color").notNull(), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [index("monitor_tag_workspace_id_idx").on(t.workspaceId)], +); export const monitorTagsToMonitors = sqliteTable( "monitor_tag_to_monitor", @@ -39,9 +44,10 @@ export const monitorTagsToMonitors = sqliteTable( sql`(strftime('%s', 'now'))`, ), }, - (t) => ({ - pk: primaryKey({ columns: [t.monitorId, t.monitorTagId] }), - }), + (t) => [ + primaryKey({ columns: [t.monitorId, t.monitorTagId] }), + index("monitor_tag_to_monitor_monitor_tag_id_idx").on(t.monitorTagId), + ], ); export const monitorTagsToMonitorsRelation = relations( diff --git a/packages/db/src/schema/monitors/monitor.ts b/packages/db/src/schema/monitors/monitor.ts index 365ea5b4..9c15405a 100644 --- a/packages/db/src/schema/monitors/monitor.ts +++ b/packages/db/src/schema/monitors/monitor.ts @@ -1,5 +1,5 @@ import { relations, sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { monitorPeriodicity } from "../constants"; import { incidentTable } from "../incidents/incident"; @@ -10,59 +10,67 @@ import { privateLocationToMonitors } from "../private_locations"; import { workspace } from "../workspaces/workspace"; import { monitorJobTypes, monitorMethods, monitorStatus } from "./constants"; -export const monitor = sqliteTable("monitor", { - id: integer("id").primaryKey(), - jobType: text("job_type", { enum: monitorJobTypes }) - .default("http") - .notNull(), - periodicity: text("periodicity", { enum: monitorPeriodicity }) - .default("other") - .notNull(), - status: text("status", { enum: monitorStatus }).default("active").notNull(), - active: integer("active", { mode: "boolean" }).default(false), +export const monitor = sqliteTable( + "monitor", + { + id: integer("id").primaryKey(), + jobType: text("job_type", { enum: monitorJobTypes }) + .default("http") + .notNull(), + periodicity: text("periodicity", { enum: monitorPeriodicity }) + .default("other") + .notNull(), + status: text("status", { enum: monitorStatus }).default("active").notNull(), + active: integer("active", { mode: "boolean" }).default(false), - regions: text("regions").default("").notNull(), + regions: text("regions").default("").notNull(), - url: text("url", { length: 2048 }).notNull(), // URI + url: text("url", { length: 2048 }).notNull(), // URI - name: text("name", { length: 256 }).default("").notNull(), - externalName: text("external_name"), - description: text("description").default("").notNull(), + name: text("name", { length: 256 }).default("").notNull(), + externalName: text("external_name"), + description: text("description").default("").notNull(), - headers: text("headers").default(""), - body: text("body").default(""), - method: text("method", { enum: monitorMethods }).default("GET"), - workspaceId: integer("workspace_id").references(() => workspace.id), + headers: text("headers").default(""), + body: text("body").default(""), + method: text("method", { enum: monitorMethods }).default("GET"), + workspaceId: integer("workspace_id").references(() => workspace.id), - // Custom timeout for this monitor - timeout: integer("timeout").notNull().default(45000), // in milliseconds + // Custom timeout for this monitor + timeout: integer("timeout").notNull().default(45000), // in milliseconds - // Threshold for the monitor to be considered degraded - degradedAfter: integer("degraded_after"), // in millisecond + // Threshold for the monitor to be considered degraded + degradedAfter: integer("degraded_after"), // in millisecond - assertions: text("assertions"), + assertions: text("assertions"), - otelEndpoint: text("otel_endpoint"), + otelEndpoint: text("otel_endpoint"), - otelHeaders: text("otel_headers"), + otelHeaders: text("otel_headers"), - public: integer("public", { mode: "boolean" }).default(false), + public: integer("public", { mode: "boolean" }).default(false), - retry: integer("retry").default(3), + retry: integer("retry").default(3), - followRedirects: integer("follow_redirects", { mode: "boolean" }).default( - true, - ), + followRedirects: integer("follow_redirects", { mode: "boolean" }).default( + true, + ), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), - deletedAt: integer("deleted_at", { mode: "timestamp" }), -}); + deletedAt: integer("deleted_at", { mode: "timestamp" }), + }, + (t) => [ + index("monitor_workspace_id_active_idx") + .on(t.workspaceId) + .where(sql`${t.deletedAt} IS NULL`), + ], +); export const monitorRelation = relations(monitor, ({ one, many }) => ({ monitorTagsToMonitors: many(monitorTagsToMonitors), diff --git a/packages/db/src/schema/notifications/notification.ts b/packages/db/src/schema/notifications/notification.ts index f0db8ef3..82e2e634 100644 --- a/packages/db/src/schema/notifications/notification.ts +++ b/packages/db/src/schema/notifications/notification.ts @@ -1,5 +1,6 @@ import { relations, sql } from "drizzle-orm"; import { + index, integer, primaryKey, sqliteTable, @@ -11,19 +12,23 @@ import { monitor } from "../monitors"; import { workspace } from "../workspaces"; import { notificationProvider } from "./constants"; -export const notification = sqliteTable("notification", { - id: integer("id").primaryKey(), - name: text("name").notNull(), - provider: text("provider", { enum: notificationProvider }).notNull(), - data: text("data").default("{}"), - workspaceId: integer("workspace_id").references(() => workspace.id), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); +export const notification = sqliteTable( + "notification", + { + id: integer("id").primaryKey(), + name: text("name").notNull(), + provider: text("provider", { enum: notificationProvider }).notNull(), + data: text("data").default("{}"), + workspaceId: integer("workspace_id").references(() => workspace.id), + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [index("notification_workspace_id_idx").on(t.workspaceId)], +); export const notificationTrigger = sqliteTable( "notification_trigger", @@ -38,13 +43,13 @@ export const notificationTrigger = sqliteTable( ), cronTimestamp: integer("cron_timestamp").notNull(), }, - (table) => ({ - unique: uniqueIndex("notification_id_monitor_id_crontimestampe").on( + (table) => [ + uniqueIndex("notification_id_monitor_id_crontimestampe").on( table.notificationId, table.monitorId, table.cronTimestamp, ), - }), + ], ); export const notificationsToMonitors = sqliteTable( @@ -60,9 +65,10 @@ export const notificationsToMonitors = sqliteTable( sql`(strftime('%s', 'now'))`, ), }, - (t) => ({ - pk: primaryKey({ columns: [t.monitorId, t.notificationId] }), - }), + (t) => [ + primaryKey({ columns: [t.monitorId, t.notificationId] }), + index("notifications_to_monitors_notification_id_idx").on(t.notificationId), + ], ); export const notificationsToMonitorsRelation = relations( diff --git a/packages/db/src/schema/page_component_groups/page_component_groups.ts b/packages/db/src/schema/page_component_groups/page_component_groups.ts index fb94f8db..68f72f89 100644 --- a/packages/db/src/schema/page_component_groups/page_component_groups.ts +++ b/packages/db/src/schema/page_component_groups/page_component_groups.ts @@ -1,31 +1,38 @@ import { relations, sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { pageComponent } from "../page_components"; import { page } from "../pages"; import { workspace } from "../workspaces"; -export const pageComponentGroup = sqliteTable("page_component_groups", { - id: integer("id").primaryKey(), - workspaceId: integer("workspace_id") - .references(() => workspace.id, { onDelete: "cascade" }) - .notNull(), - pageId: integer("page_id") - .references(() => page.id, { onDelete: "cascade" }) - .notNull(), - name: text("name").notNull(), +export const pageComponentGroup = sqliteTable( + "page_component_groups", + { + id: integer("id").primaryKey(), + workspaceId: integer("workspace_id") + .references(() => workspace.id, { onDelete: "cascade" }) + .notNull(), + pageId: integer("page_id") + .references(() => page.id, { onDelete: "cascade" }) + .notNull(), + name: text("name").notNull(), - defaultOpen: integer("default_open", { mode: "boolean" }) - .default(false) - .notNull(), + defaultOpen: integer("default_open", { mode: "boolean" }) + .default(false) + .notNull(), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [ + index("page_component_groups_page_id_idx").on(t.pageId), + index("page_component_groups_workspace_id_idx").on(t.workspaceId), + ], +); export const pageComponentGroupRelations = relations( pageComponentGroup, diff --git a/packages/db/src/schema/page_components/page_components.ts b/packages/db/src/schema/page_components/page_components.ts index 769bf150..7b0ed6ed 100644 --- a/packages/db/src/schema/page_components/page_components.ts +++ b/packages/db/src/schema/page_components/page_components.ts @@ -1,6 +1,7 @@ import { relations, sql } from "drizzle-orm"; import { check, + index, integer, primaryKey, sqliteTable, @@ -52,6 +53,7 @@ export const pageComponent = sqliteTable( t.pageId, t.monitorId, ), + index("page_component_workspace_id_idx").on(t.workspaceId), check( "page_component_type_check", // NOTE: This check ensures that either the component is a monitor or a static component, but not both. @@ -97,9 +99,12 @@ export const maintenancesToPageComponents = sqliteTable( sql`(strftime('%s', 'now'))`, ), }, - (t) => ({ - pk: primaryKey({ columns: [t.maintenanceId, t.pageComponentId] }), - }), + (t) => [ + primaryKey({ columns: [t.maintenanceId, t.pageComponentId] }), + index("maintenance_to_page_component_page_component_id_idx").on( + t.pageComponentId, + ), + ], ); export const maintenancesToPageComponentsRelations = relations( @@ -129,9 +134,12 @@ export const statusReportsToPageComponents = sqliteTable( sql`(strftime('%s', 'now'))`, ), }, - (t) => ({ - pk: primaryKey({ columns: [t.statusReportId, t.pageComponentId] }), - }), + (t) => [ + primaryKey({ columns: [t.statusReportId, t.pageComponentId] }), + index("status_report_to_page_component_page_component_id_idx").on( + t.pageComponentId, + ), + ], ); export const statusReportsToPageComponentsRelations = relations( diff --git a/packages/db/src/schema/pages/page.ts b/packages/db/src/schema/pages/page.ts index 0c8a0d2f..774c8b86 100644 --- a/packages/db/src/schema/pages/page.ts +++ b/packages/db/src/schema/pages/page.ts @@ -1,5 +1,5 @@ import { relations, sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import type { Locale } from "@openstatus/locales"; import { maintenance } from "../maintenances"; @@ -10,65 +10,78 @@ import { statusReport } from "../status_reports"; import { workspace } from "../workspaces"; import { pageAccessTypes } from "./constants"; -export const page = sqliteTable("page", { - id: integer("id").primaryKey(), +export const page = sqliteTable( + "page", + { + id: integer("id").primaryKey(), - workspaceId: integer("workspace_id") - .notNull() - .references(() => workspace.id, { onDelete: "cascade" }), + workspaceId: integer("workspace_id") + .notNull() + .references(() => workspace.id, { onDelete: "cascade" }), - title: text("title").notNull(), // title of the page - description: text("description").notNull(), // description of the page - icon: text("icon", { length: 256 }).default(""), // icon of the page - slug: text("slug", { length: 256 }).notNull().unique(), // which is used for https://slug.openstatus.dev - customDomain: text("custom_domain", { length: 256 }).notNull(), - published: integer("published", { mode: "boolean" }).default(false), + title: text("title").notNull(), // title of the page + description: text("description").notNull(), // description of the page + icon: text("icon", { length: 256 }).default(""), // icon of the page + slug: text("slug", { length: 256 }).notNull().unique(), // which is used for https://slug.openstatus.dev + customDomain: text("custom_domain", { length: 256 }).notNull(), + published: integer("published", { mode: "boolean" }).default(false), - forceTheme: text("force_theme", { enum: ["dark", "light", "system"] }) - .notNull() - .default("system"), + forceTheme: text("force_theme", { enum: ["dark", "light", "system"] }) + .notNull() + .default("system"), - // Password protecting the status page - no specific restriction on password - password: text("password", { length: 256 }), - // @deprecated: instead, use accessType - passwordProtected: integer("password_protected", { mode: "boolean" }).default( - false, - ), - accessType: text("access_type", { enum: pageAccessTypes }).default("public"), - authEmailDomains: text("auth_email_domains", { mode: "text" }), // TODO: change to json - allowedIpRanges: text("allowed_ip_ranges", { mode: "text" }), + // Password protecting the status page - no specific restriction on password + password: text("password", { length: 256 }), + // @deprecated: instead, use accessType + passwordProtected: integer("password_protected", { + mode: "boolean", + }).default(false), + accessType: text("access_type", { enum: pageAccessTypes }).default( + "public", + ), + authEmailDomains: text("auth_email_domains", { mode: "text" }), // TODO: change to json + allowedIpRanges: text("allowed_ip_ranges", { mode: "text" }), - // links and urls - homepageUrl: text("homepage_url", { length: 256 }), - contactUrl: text("contact_url", { length: 256 }), + // links and urls + homepageUrl: text("homepage_url", { length: 256 }), + contactUrl: text("contact_url", { length: 256 }), - defaultLocale: text("default_locale").notNull().default("en").$type(), - locales: text("locales", { mode: "json" }).$type(), + defaultLocale: text("default_locale") + .notNull() + .default("en") + .$type(), + locales: text("locales", { mode: "json" }).$type(), - legacyPage: integer("legacy_page", { mode: "boolean" }) - .notNull() - .default(true), - configuration: text("configuration", { mode: "json" }), + legacyPage: integer("legacy_page", { mode: "boolean" }) + .notNull() + .default(true), + configuration: text("configuration", { mode: "json" }), - allowIndex: integer("allow_index", { mode: "boolean" }) - .notNull() - .default(true), + allowIndex: integer("allow_index", { mode: "boolean" }) + .notNull() + .default(true), - /** - * Displays the total and failed request numbers for each monitor - * TODO: remove this column - we moved into configuration - */ - showMonitorValues: integer("show_monitor_values", { - mode: "boolean", - }).default(true), + /** + * Displays the total and failed request numbers for each monitor + * TODO: remove this column - we moved into configuration + */ + showMonitorValues: integer("show_monitor_values", { + mode: "boolean", + }).default(true), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [ + index("page_lower_slug_idx").on(sql`LOWER(${t.slug})`), + index("page_lower_custom_domain_idx").on(sql`LOWER(${t.customDomain})`), + index("page_workspace_id_idx").on(t.workspaceId), + ], +); export const pageRelations = relations(page, ({ many, one }) => ({ maintenances: many(maintenance), diff --git a/packages/db/src/schema/private_locations/private_locations.ts b/packages/db/src/schema/private_locations/private_locations.ts index ae01c0be..98e1ec77 100644 --- a/packages/db/src/schema/private_locations/private_locations.ts +++ b/packages/db/src/schema/private_locations/private_locations.ts @@ -1,22 +1,26 @@ import { relations } from "drizzle-orm"; import { sql } from "drizzle-orm/sql"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { monitor } from "../monitors/monitor"; import { workspace } from "../workspaces"; -export const privateLocation = sqliteTable("private_location", { - id: integer("id").primaryKey(), - name: text("name").notNull(), - token: text("token").notNull(), - lastSeenAt: integer("last_seen_at", { mode: "timestamp" }), - workspaceId: integer("workspace_id").references(() => workspace.id), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); +export const privateLocation = sqliteTable( + "private_location", + { + id: integer("id").primaryKey(), + name: text("name").notNull(), + token: text("token").notNull(), + lastSeenAt: integer("last_seen_at", { mode: "timestamp" }), + workspaceId: integer("workspace_id").references(() => workspace.id), + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [index("private_location_workspace_id_idx").on(t.workspaceId)], +); export const privateLocationToMonitors = sqliteTable( "private_location_to_monitor", @@ -33,6 +37,12 @@ export const privateLocationToMonitors = sqliteTable( ), deletedAt: integer("deleted_at", { mode: "timestamp" }), }, + (t) => [ + index("private_location_to_monitor_private_location_id_idx").on( + t.privateLocationId, + ), + index("private_location_to_monitor_monitor_id_idx").on(t.monitorId), + ], ); export const privateLocationRelation = relations( diff --git a/packages/db/src/schema/status_reports/status_reports.ts b/packages/db/src/schema/status_reports/status_reports.ts index 5f7eaeef..20d62370 100644 --- a/packages/db/src/schema/status_reports/status_reports.ts +++ b/packages/db/src/schema/status_reports/status_reports.ts @@ -1,5 +1,5 @@ import { relations, sql } from "drizzle-orm"; -import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; import { statusReportsToPageComponents } from "../page_components"; import { page } from "../pages"; @@ -12,40 +12,55 @@ export const statusReportStatus = [ "resolved", ] as const; -export const statusReport = sqliteTable("status_report", { - id: integer("id").primaryKey(), - status: text("status", { enum: statusReportStatus }).notNull(), - title: text("title", { length: 256 }).notNull(), +export const statusReport = sqliteTable( + "status_report", + { + id: integer("id").primaryKey(), + status: text("status", { enum: statusReportStatus }).notNull(), + title: text("title", { length: 256 }).notNull(), - workspaceId: integer("workspace_id").references(() => workspace.id), + workspaceId: integer("workspace_id").references(() => workspace.id), - pageId: integer("page_id").references(() => page.id, { onDelete: "cascade" }), + pageId: integer("page_id").references(() => page.id, { + onDelete: "cascade", + }), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [ + index("status_report_workspace_created_idx").on(t.workspaceId, t.createdAt), + index("status_report_page_id_idx").on(t.pageId), + ], +); -export const statusReportUpdate = sqliteTable("status_report_update", { - id: integer("id").primaryKey(), +export const statusReportUpdate = sqliteTable( + "status_report_update", + { + id: integer("id").primaryKey(), - status: text("status", { enum: statusReportStatus }).notNull(), - date: integer("date", { mode: "timestamp" }).notNull(), - message: text("message").notNull(), + status: text("status", { enum: statusReportStatus }).notNull(), + date: integer("date", { mode: "timestamp" }).notNull(), + message: text("message").notNull(), - statusReportId: integer("status_report_id") - .references(() => statusReport.id, { onDelete: "cascade" }) - .notNull(), - createdAt: integer("created_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), - updatedAt: integer("updated_at", { mode: "timestamp" }).default( - sql`(strftime('%s', 'now'))`, - ), -}); + statusReportId: integer("status_report_id") + .references(() => statusReport.id, { onDelete: "cascade" }) + .notNull(), + createdAt: integer("created_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).default( + sql`(strftime('%s', 'now'))`, + ), + }, + (t) => [ + index("status_report_update_status_report_id_idx").on(t.statusReportId), + ], +); export const StatusReportRelations = relations( statusReport, diff --git a/packages/db/src/schema/users/user.ts b/packages/db/src/schema/users/user.ts index f539e231..29dfbcc6 100644 --- a/packages/db/src/schema/users/user.ts +++ b/packages/db/src/schema/users/user.ts @@ -1,5 +1,6 @@ import { relations, sql } from "drizzle-orm"; import { + index, integer, primaryKey, sqliteTable, @@ -50,9 +51,10 @@ export const usersToWorkspaces = sqliteTable( sql`(strftime('%s', 'now'))`, ), }, - (t) => ({ - pk: primaryKey({ columns: [t.userId, t.workspaceId] }), - }), + (t) => [ + primaryKey({ columns: [t.userId, t.workspaceId] }), + index("users_to_workspaces_workspace_id_idx").on(t.workspaceId), + ], ); export const usersToWorkspaceRelations = relations( @@ -88,11 +90,11 @@ export const account = sqliteTable( id_token: text("id_token"), session_state: text("session_state"), }, - (account) => ({ - compoundKey: primaryKey({ + (account) => [ + primaryKey({ columns: [account.provider, account.providerAccountId], }), - }), + ], ); export const session = sqliteTable("session", { @@ -110,7 +112,5 @@ export const verificationToken = sqliteTable( token: text("token").notNull(), expires: integer("expires", { mode: "timestamp_ms" }).notNull(), }, - (vt) => ({ - compoundKey: primaryKey({ columns: [vt.identifier, vt.token] }), - }), + (vt) => [primaryKey({ columns: [vt.identifier, vt.token] })], );