nextly 0.0.1 → 0.0.2-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +122 -0
- package/dist/_dts-chunks/collections-handler.d-DjgO74Wt.d.ts +20540 -0
- package/dist/_dts-chunks/config.d-DNwsDnjs.d.ts +2589 -0
- package/dist/_dts-chunks/define-component.d-BUgTHmt3.d.ts +1149 -0
- package/dist/_dts-chunks/image-processor.d-OO1PmMrv.d.ts +335 -0
- package/dist/_dts-chunks/index.d-axCAzZ7m.d.ts +17842 -0
- package/dist/_dts-chunks/media.d-DjDOZo4B.d.ts +117 -0
- package/dist/_dts-chunks/on-error.d-CHIKWNxd.d.ts +38 -0
- package/dist/_dts-chunks/storage.d-BUhQ2we_.d.ts +404 -0
- package/dist/actions/index.d.ts +239 -0
- package/dist/actions/index.mjs +281 -0
- package/dist/api/auth-state.d.ts +5 -0
- package/dist/api/auth-state.mjs +131 -0
- package/dist/api/collections-schema-detail.d.ts +56 -0
- package/dist/api/collections-schema-detail.mjs +244 -0
- package/dist/api/collections-schema-export.d.ts +56 -0
- package/dist/api/collections-schema-export.mjs +129 -0
- package/dist/api/collections-schema.d.ts +59 -0
- package/dist/api/collections-schema.mjs +207 -0
- package/dist/api/components-detail.d.ts +50 -0
- package/dist/api/components-detail.mjs +132 -0
- package/dist/api/components.d.ts +69 -0
- package/dist/api/components.mjs +144 -0
- package/dist/api/email-providers-default.d.ts +40 -0
- package/dist/api/email-providers-default.mjs +75 -0
- package/dist/api/email-providers-detail.d.ts +81 -0
- package/dist/api/email-providers-detail.mjs +109 -0
- package/dist/api/email-providers-test.d.ts +43 -0
- package/dist/api/email-providers-test.mjs +114 -0
- package/dist/api/email-providers.d.ts +69 -0
- package/dist/api/email-providers.mjs +110 -0
- package/dist/api/email-send-template.d.ts +41 -0
- package/dist/api/email-send-template.mjs +58 -0
- package/dist/api/email-send.d.ts +42 -0
- package/dist/api/email-send.mjs +58 -0
- package/dist/api/email-templates-detail.d.ts +74 -0
- package/dist/api/email-templates-detail.mjs +112 -0
- package/dist/api/email-templates-layout.d.ts +55 -0
- package/dist/api/email-templates-layout.mjs +92 -0
- package/dist/api/email-templates-preview.d.ts +48 -0
- package/dist/api/email-templates-preview.mjs +93 -0
- package/dist/api/email-templates.d.ts +61 -0
- package/dist/api/email-templates.mjs +118 -0
- package/dist/api/health.d.ts +68 -0
- package/dist/api/health.mjs +67 -0
- package/dist/api/index.d.ts +54 -0
- package/dist/api/index.mjs +16 -0
- package/dist/api/media-bulk.d.ts +74 -0
- package/dist/api/media-bulk.mjs +196 -0
- package/dist/api/media-folders.d.ts +112 -0
- package/dist/api/media-folders.mjs +187 -0
- package/dist/api/media-handlers.d.ts +102 -0
- package/dist/api/media-handlers.mjs +437 -0
- package/dist/api/media.d.ts +117 -0
- package/dist/api/media.mjs +242 -0
- package/dist/api/singles-detail.d.ts +87 -0
- package/dist/api/singles-detail.mjs +170 -0
- package/dist/api/singles-schema-detail.d.ts +54 -0
- package/dist/api/singles-schema-detail.mjs +182 -0
- package/dist/api/singles.d.ts +34 -0
- package/dist/api/singles.mjs +94 -0
- package/dist/api/storage-upload-url.d.ts +48 -0
- package/dist/api/storage-upload-url.mjs +202 -0
- package/dist/api/uploads.d.ts +109 -0
- package/dist/api/uploads.mjs +359 -0
- package/dist/auth/index.d.ts +425 -0
- package/dist/auth/index.mjs +199 -0
- package/dist/boot-apply-PQSYLDIN.mjs +7 -0
- package/dist/chunk-2OALJTK6.mjs +489 -0
- package/dist/chunk-2Q2SX2CS.mjs +365 -0
- package/dist/chunk-2TFX4ND3.mjs +13 -0
- package/dist/chunk-2TWPDSYD.mjs +87 -0
- package/dist/chunk-2W3DVD7S.mjs +647 -0
- package/dist/chunk-2ZFKXPQM.mjs +88 -0
- package/dist/chunk-3FA7FKAV.mjs +832 -0
- package/dist/chunk-3NZ2KMBL.mjs +58 -0
- package/dist/chunk-4MJLT6PZ.mjs +0 -0
- package/dist/chunk-56WO4WX7.mjs +0 -0
- package/dist/chunk-5APFUGAD.mjs +89 -0
- package/dist/chunk-5HMZ644B.mjs +108 -0
- package/dist/chunk-67GXH6PR.mjs +32 -0
- package/dist/chunk-6JNEPWRW.mjs +14368 -0
- package/dist/chunk-6NFHQIJD.mjs +45 -0
- package/dist/chunk-7P6ASYW6.mjs +9 -0
- package/dist/chunk-A3WPLSDT.mjs +1364 -0
- package/dist/chunk-AGJ6F2T3.mjs +144 -0
- package/dist/chunk-AK6Z23OX.mjs +1464 -0
- package/dist/chunk-APKKRD2G.mjs +102 -0
- package/dist/chunk-B2GV2BWH.mjs +73 -0
- package/dist/chunk-D5HQBNUB.mjs +74 -0
- package/dist/chunk-DNNG377Z.mjs +204 -0
- package/dist/chunk-DP3G27G5.mjs +135 -0
- package/dist/chunk-DV6WVX2Q.mjs +0 -0
- package/dist/chunk-DXGGXIUZ.mjs +57 -0
- package/dist/chunk-EGXBZCGC.mjs +943 -0
- package/dist/chunk-ERCNLX3V.mjs +176 -0
- package/dist/chunk-FQULBZ53.mjs +850 -0
- package/dist/chunk-G2AA4QLC.mjs +262 -0
- package/dist/chunk-GDBJ5JCU.mjs +488 -0
- package/dist/chunk-GJNSJU4S.mjs +19 -0
- package/dist/chunk-GZ6DCQKC.mjs +69 -0
- package/dist/chunk-H26B4FYG.mjs +167 -0
- package/dist/chunk-I4JMR3UR.mjs +21 -0
- package/dist/chunk-INV7QKLG.mjs +508 -0
- package/dist/chunk-IUDOC7N7.mjs +46 -0
- package/dist/chunk-IZWPRDC3.mjs +206 -0
- package/dist/chunk-KIMNCZGV.mjs +15 -0
- package/dist/chunk-L6HW2DA7.mjs +15 -0
- package/dist/chunk-LAZXX4HR.mjs +100 -0
- package/dist/chunk-LDKCUMHK.mjs +95 -0
- package/dist/chunk-LRXMECUA.mjs +0 -0
- package/dist/chunk-M52VMPGA.mjs +119 -0
- package/dist/chunk-MGUWEEI6.mjs +160 -0
- package/dist/chunk-NRUWQ5Z7.mjs +419 -0
- package/dist/chunk-NSEFNNU4.mjs +25360 -0
- package/dist/chunk-NTHVDFGO.mjs +138 -0
- package/dist/chunk-O3QHXMOX.mjs +3166 -0
- package/dist/chunk-P7NH2OSC.mjs +2605 -0
- package/dist/chunk-PKMABBB5.mjs +184 -0
- package/dist/chunk-PWS6XGJK.mjs +76 -0
- package/dist/chunk-R6JJQHFC.mjs +20 -0
- package/dist/chunk-RJLLGGPG.mjs +0 -0
- package/dist/chunk-SBACDPNX.mjs +689 -0
- package/dist/chunk-TO5AFLVQ.mjs +124 -0
- package/dist/chunk-TS7GHTG2.mjs +5436 -0
- package/dist/chunk-UJ2IMJ4W.mjs +133 -0
- package/dist/chunk-UOP63Q54.mjs +102 -0
- package/dist/chunk-UUOFWCM6.mjs +78 -0
- package/dist/chunk-V4EQTOA4.mjs +893 -0
- package/dist/chunk-VJ66NCL4.mjs +193 -0
- package/dist/chunk-VQJQHVEV.mjs +29 -0
- package/dist/chunk-VTJADRO3.mjs +141 -0
- package/dist/chunk-VWF3JO32.mjs +0 -0
- package/dist/chunk-W4MGXIRR.mjs +27 -0
- package/dist/chunk-W5KKPZT5.mjs +1204 -0
- package/dist/chunk-WD34YQ6T.mjs +381 -0
- package/dist/chunk-WZBYMYVW.mjs +14 -0
- package/dist/chunk-X23WKS3Z.mjs +50 -0
- package/dist/chunk-X7TXCYYN.mjs +6496 -0
- package/dist/chunk-XGI4EMS3.mjs +140 -0
- package/dist/chunk-XZKLBMN6.mjs +1153 -0
- package/dist/chunk-YB7INWPY.mjs +0 -0
- package/dist/chunk-YV4Y7SDL.mjs +83 -0
- package/dist/chunk-YZNBLFIW.mjs +1688 -0
- package/dist/chunk-YZZCTONM.mjs +263 -0
- package/dist/chunk-ZE6A3FYH.mjs +289 -0
- package/dist/cli/nextly.mjs +68 -0
- package/dist/cli/utils/index.d.ts +449 -0
- package/dist/cli/utils/index.mjs +49 -0
- package/dist/component-schema-service-5577KVW6.mjs +11 -0
- package/dist/config-loader-23YEMC3Z.mjs +23 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.mjs +109 -0
- package/dist/container-ORGFGYSZ.mjs +9 -0
- package/dist/database/index.d.ts +12 -0
- package/dist/database/index.mjs +40 -0
- package/dist/database/seeders/index.d.ts +93 -0
- package/dist/database/seeders/index.mjs +47 -0
- package/dist/db-sync-demote-LJGKLB3S.mjs +117 -0
- package/dist/db-sync-promote-B26VSYQF.mjs +113 -0
- package/dist/dev-reload-broadcaster-B73IQ53V.mjs +25 -0
- package/dist/dist-M2NOU37V.mjs +19 -0
- package/dist/drizzle-kit-lazy-D2M2PXR2.mjs +13 -0
- package/dist/dynamic-collection-schema-service-IEXTPIZ7.mjs +8 -0
- package/dist/errors/index.d.ts +159 -0
- package/dist/errors/index.mjs +10 -0
- package/dist/factory-IWMBKUJM.mjs +15 -0
- package/dist/first-run-QIVKWJIF.mjs +63 -0
- package/dist/fresh-push-NR67DC3R.mjs +8 -0
- package/dist/index.d.ts +4175 -0
- package/dist/index.mjs +1336 -0
- package/dist/local-plugin-PTET4NAT.mjs +7 -0
- package/dist/logger-NU46DXNY.mjs +15 -0
- package/dist/logger-YE4TC7ZN.mjs +9 -0
- package/dist/migration-journal-EP532Y4L.mjs +139 -0
- package/dist/migrations/mysql/0000_eager_sentry.sql +174 -0
- package/dist/migrations/mysql/0001_soft_giant_girl.sql +27 -0
- package/dist/migrations/mysql/0002_media_table.sql +24 -0
- package/dist/migrations/mysql/0003_dynamic_singles.sql +37 -0
- package/dist/migrations/mysql/0004_dynamic_components.sql +35 -0
- package/dist/migrations/mysql/0005_user_management_tables.sql +92 -0
- package/dist/migrations/mysql/0006_api_keys.sql +36 -0
- package/dist/migrations/mysql/0007_general_settings.sql +20 -0
- package/dist/migrations/mysql/0008_site_settings_logo_url.sql +9 -0
- package/dist/migrations/mysql/0009_activity_log.sql +30 -0
- package/dist/migrations/mysql/0010_site_settings_sidebar.sql +13 -0
- package/dist/migrations/mysql/0011_missing_tables_and_columns.sql +54 -0
- package/dist/migrations/mysql/0012_image_sizes_and_focal_point.sql +30 -0
- package/dist/migrations/mysql/0012_media_folders.sql +43 -0
- package/dist/migrations/mysql/0013_user_brute_force_protection.sql +31 -0
- package/dist/migrations/mysql/0014_email_template_attachments.sql +12 -0
- package/dist/migrations/mysql/0015_media_uploaded_by_nullable.sql +15 -0
- package/dist/migrations/mysql/20260429_000000_000_initial_journal.sql +22 -0
- package/dist/migrations/mysql/20260501_000000_journal_batch.sql +17 -0
- package/dist/migrations/mysql/20260501_000001_audit_log.sql +24 -0
- package/dist/migrations/mysql/20260504_000000_nextly_meta.sql +21 -0
- package/dist/migrations/mysql/meta/0000_snapshot.json +1005 -0
- package/dist/migrations/mysql/meta/0001_snapshot.json +1099 -0
- package/dist/migrations/mysql/meta/_journal.json +41 -0
- package/dist/migrations/postgresql/0000_misty_king_bedlam.sql +169 -0
- package/dist/migrations/postgresql/0001_perpetual_captain_marvel.sql +8 -0
- package/dist/migrations/postgresql/0002_sad_spectrum.sql +16 -0
- package/dist/migrations/postgresql/0003_hesitant_ultron.sql +17 -0
- package/dist/migrations/postgresql/0004_media_table.sql +24 -0
- package/dist/migrations/postgresql/0005_media_folders.sql +36 -0
- package/dist/migrations/postgresql/0006_dynamic_collections_update.sql +50 -0
- package/dist/migrations/postgresql/0007_dynamic_singles.sql +38 -0
- package/dist/migrations/postgresql/0008_dynamic_components.sql +37 -0
- package/dist/migrations/postgresql/0009_user_management_tables.sql +95 -0
- package/dist/migrations/postgresql/0010_api_keys.sql +34 -0
- package/dist/migrations/postgresql/0011_general_settings.sql +20 -0
- package/dist/migrations/postgresql/0012_site_settings_logo_url.sql +9 -0
- package/dist/migrations/postgresql/0013_activity_log.sql +29 -0
- package/dist/migrations/postgresql/0014_image_sizes_and_focal_point.sql +33 -0
- package/dist/migrations/postgresql/0014_site_settings_sidebar.sql +13 -0
- package/dist/migrations/postgresql/0015_user_brute_force_protection.sql +29 -0
- package/dist/migrations/postgresql/0016_email_template_attachments.sql +12 -0
- package/dist/migrations/postgresql/0017_media_uploaded_by_nullable.sql +15 -0
- package/dist/migrations/postgresql/20260429_000000_000_initial_journal.sql +24 -0
- package/dist/migrations/postgresql/20260501_000000_journal_batch.sql +17 -0
- package/dist/migrations/postgresql/20260501_000001_audit_log.sql +24 -0
- package/dist/migrations/postgresql/20260504_000000_nextly_meta.sql +22 -0
- package/dist/migrations/postgresql/meta/0000_snapshot.json +1286 -0
- package/dist/migrations/postgresql/meta/0001_snapshot.json +1407 -0
- package/dist/migrations/postgresql/meta/0002_snapshot.json +1552 -0
- package/dist/migrations/postgresql/meta/0003_snapshot.json +1695 -0
- package/dist/migrations/postgresql/meta/0010_snapshot.json +2345 -0
- package/dist/migrations/postgresql/meta/_journal.json +90 -0
- package/dist/migrations/sqlite/0000_api_keys.sql +34 -0
- package/dist/migrations/sqlite/0001_general_settings.sql +20 -0
- package/dist/migrations/sqlite/0002_site_settings_logo_url.sql +9 -0
- package/dist/migrations/sqlite/0003_activity_log.sql +29 -0
- package/dist/migrations/sqlite/0004_image_sizes_and_focal_point.sql +29 -0
- package/dist/migrations/sqlite/0004_site_settings_sidebar.sql +11 -0
- package/dist/migrations/sqlite/0005_user_brute_force_protection.sql +29 -0
- package/dist/migrations/sqlite/0006_email_template_attachments.sql +12 -0
- package/dist/migrations/sqlite/0007_media_uploaded_by_nullable.sql +111 -0
- package/dist/migrations/sqlite/20260429_000000_000_initial_journal.sql +24 -0
- package/dist/migrations/sqlite/20260501_000000_journal_batch.sql +19 -0
- package/dist/migrations/sqlite/20260501_000001_audit_log.sql +24 -0
- package/dist/migrations/sqlite/20260504_000000_nextly_meta.sql +21 -0
- package/dist/migrations/sqlite/20260505_000000_user_management_tables.sql +77 -0
- package/dist/next.d.ts +57 -0
- package/dist/next.mjs +55 -0
- package/dist/observability/index.d.ts +87 -0
- package/dist/observability/index.mjs +57 -0
- package/dist/permissions-3DZZQZMI.mjs +39 -0
- package/dist/pipeline-YOML7SWF.mjs +29 -0
- package/dist/preview-ZZTR3QGS.mjs +9 -0
- package/dist/program-PW6UB2ZC.mjs +5934 -0
- package/dist/reconcile-single-tables-7ENVXJGB.mjs +7 -0
- package/dist/register-SF6E6FVU.mjs +49 -0
- package/dist/reload-config-HWQ4G5MM.mjs +23 -0
- package/dist/resolve-single-table-name-JSOMUB3R.mjs +7 -0
- package/dist/routeHandler-UNMMJIBM.mjs +77 -0
- package/dist/runtime-schema-generator-NRA6A6Z6.mjs +8 -0
- package/dist/runtime.d.ts +120 -0
- package/dist/runtime.mjs +73 -0
- package/dist/schema-hash-FMMG6VPJ.mjs +13 -0
- package/dist/schema-registry-EQ36FZDP.mjs +7 -0
- package/dist/scripts/load-env.mjs +42 -0
- package/dist/storage/index.d.ts +566 -0
- package/dist/storage/index.mjs +45 -0
- package/dist/super-admin-G5ZK5F4T.mjs +39 -0
- package/dist/system-table-service-WGSRVEGT.mjs +17 -0
- package/dist/users-7KELGRYJ.mjs +38 -0
- package/package.json +308 -9
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "7",
|
|
3
|
+
"dialect": "mysql",
|
|
4
|
+
"entries": [
|
|
5
|
+
{
|
|
6
|
+
"idx": 0,
|
|
7
|
+
"version": "5",
|
|
8
|
+
"when": 1763195298918,
|
|
9
|
+
"tag": "0000_eager_sentry",
|
|
10
|
+
"breakpoints": true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"idx": 1,
|
|
14
|
+
"version": "5",
|
|
15
|
+
"when": 1763206223302,
|
|
16
|
+
"tag": "0001_soft_giant_girl",
|
|
17
|
+
"breakpoints": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"idx": 2,
|
|
21
|
+
"version": "5",
|
|
22
|
+
"when": 1763298000000,
|
|
23
|
+
"tag": "0002_media_table",
|
|
24
|
+
"breakpoints": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"idx": 6,
|
|
28
|
+
"version": "7",
|
|
29
|
+
"when": 1771408301715,
|
|
30
|
+
"tag": "0006_api_keys",
|
|
31
|
+
"breakpoints": true
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"idx": 7,
|
|
35
|
+
"version": "7",
|
|
36
|
+
"when": 1741190400000,
|
|
37
|
+
"tag": "0009_activity_log",
|
|
38
|
+
"breakpoints": true
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
CREATE TABLE "accounts" (
|
|
2
|
+
"id" serial PRIMARY KEY NOT NULL,
|
|
3
|
+
"user_id" text NOT NULL,
|
|
4
|
+
"type" text NOT NULL,
|
|
5
|
+
"provider" text NOT NULL,
|
|
6
|
+
"provider_account_id" text NOT NULL,
|
|
7
|
+
"refresh_token" text,
|
|
8
|
+
"access_token" text,
|
|
9
|
+
"expires_at" integer,
|
|
10
|
+
"token_type" text,
|
|
11
|
+
"scope" text,
|
|
12
|
+
"id_token" text,
|
|
13
|
+
"session_state" text,
|
|
14
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
15
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
16
|
+
);
|
|
17
|
+
--> statement-breakpoint
|
|
18
|
+
CREATE TABLE "content_schema_events" (
|
|
19
|
+
"id" serial PRIMARY KEY NOT NULL,
|
|
20
|
+
"op" text NOT NULL,
|
|
21
|
+
"table_name" text NOT NULL,
|
|
22
|
+
"sql" text NOT NULL,
|
|
23
|
+
"meta" jsonb,
|
|
24
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
25
|
+
);
|
|
26
|
+
--> statement-breakpoint
|
|
27
|
+
CREATE TABLE "dynamic_collections" (
|
|
28
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
29
|
+
"name" varchar(255) NOT NULL,
|
|
30
|
+
"label" varchar(255) NOT NULL,
|
|
31
|
+
"table_name" varchar(255) NOT NULL,
|
|
32
|
+
"description" text,
|
|
33
|
+
"icon" varchar(50),
|
|
34
|
+
"schema_definition" jsonb NOT NULL,
|
|
35
|
+
"created_by" text,
|
|
36
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
37
|
+
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
38
|
+
CONSTRAINT "dynamic_collections_name_unique" UNIQUE("name"),
|
|
39
|
+
CONSTRAINT "dynamic_collections_table_name_unique" UNIQUE("table_name")
|
|
40
|
+
);
|
|
41
|
+
--> statement-breakpoint
|
|
42
|
+
CREATE TABLE "email_verification_tokens" (
|
|
43
|
+
"id" serial PRIMARY KEY NOT NULL,
|
|
44
|
+
"identifier" text NOT NULL,
|
|
45
|
+
"token_hash" text NOT NULL,
|
|
46
|
+
"expires" timestamp NOT NULL,
|
|
47
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
48
|
+
);
|
|
49
|
+
--> statement-breakpoint
|
|
50
|
+
CREATE TABLE "example_users" (
|
|
51
|
+
"id" serial PRIMARY KEY NOT NULL,
|
|
52
|
+
"name" text
|
|
53
|
+
);
|
|
54
|
+
--> statement-breakpoint
|
|
55
|
+
CREATE TABLE "password_reset_tokens" (
|
|
56
|
+
"id" serial PRIMARY KEY NOT NULL,
|
|
57
|
+
"identifier" text NOT NULL,
|
|
58
|
+
"token_hash" text NOT NULL,
|
|
59
|
+
"expires" timestamp NOT NULL,
|
|
60
|
+
"used_at" timestamp,
|
|
61
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
62
|
+
);
|
|
63
|
+
--> statement-breakpoint
|
|
64
|
+
CREATE TABLE "permissions" (
|
|
65
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
66
|
+
"name" varchar(100) NOT NULL,
|
|
67
|
+
"slug" varchar(100) NOT NULL,
|
|
68
|
+
"action" varchar(50) NOT NULL,
|
|
69
|
+
"resource" varchar(50) NOT NULL,
|
|
70
|
+
"description" varchar(255),
|
|
71
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
72
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
73
|
+
);
|
|
74
|
+
--> statement-breakpoint
|
|
75
|
+
CREATE TABLE "role_inherits" (
|
|
76
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
77
|
+
"parent_role_id" text NOT NULL,
|
|
78
|
+
"child_role_id" text NOT NULL
|
|
79
|
+
);
|
|
80
|
+
--> statement-breakpoint
|
|
81
|
+
CREATE TABLE "role_permissions" (
|
|
82
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
83
|
+
"role_id" text NOT NULL,
|
|
84
|
+
"permission_id" text NOT NULL,
|
|
85
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
86
|
+
);
|
|
87
|
+
--> statement-breakpoint
|
|
88
|
+
CREATE TABLE "roles" (
|
|
89
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
90
|
+
"name" varchar(50) NOT NULL,
|
|
91
|
+
"slug" varchar(50) NOT NULL,
|
|
92
|
+
"description" varchar(255),
|
|
93
|
+
"level" integer DEFAULT 0 NOT NULL,
|
|
94
|
+
"is_system" boolean DEFAULT false NOT NULL,
|
|
95
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
96
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
97
|
+
);
|
|
98
|
+
--> statement-breakpoint
|
|
99
|
+
CREATE TABLE "sessions" (
|
|
100
|
+
"session_token" text PRIMARY KEY NOT NULL,
|
|
101
|
+
"user_id" text NOT NULL,
|
|
102
|
+
"expires" timestamp NOT NULL
|
|
103
|
+
);
|
|
104
|
+
--> statement-breakpoint
|
|
105
|
+
CREATE TABLE "system_migrations" (
|
|
106
|
+
"id" serial PRIMARY KEY NOT NULL,
|
|
107
|
+
"name" text NOT NULL,
|
|
108
|
+
"run_at" timestamp DEFAULT now() NOT NULL
|
|
109
|
+
);
|
|
110
|
+
--> statement-breakpoint
|
|
111
|
+
CREATE TABLE "user_roles" (
|
|
112
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
113
|
+
"user_id" text NOT NULL,
|
|
114
|
+
"role_id" text NOT NULL,
|
|
115
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
116
|
+
"expires_at" timestamp
|
|
117
|
+
);
|
|
118
|
+
--> statement-breakpoint
|
|
119
|
+
CREATE TABLE "users" (
|
|
120
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
121
|
+
"name" text,
|
|
122
|
+
"email" text NOT NULL,
|
|
123
|
+
"email_verified" timestamp,
|
|
124
|
+
"password_updated_at" timestamp,
|
|
125
|
+
"image" text,
|
|
126
|
+
"password_hash" text NOT NULL,
|
|
127
|
+
"is_active" boolean DEFAULT false NOT NULL,
|
|
128
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
129
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
130
|
+
);
|
|
131
|
+
--> statement-breakpoint
|
|
132
|
+
CREATE TABLE "verification_tokens" (
|
|
133
|
+
"identifier" text NOT NULL,
|
|
134
|
+
"token" text NOT NULL,
|
|
135
|
+
"expires" timestamp NOT NULL
|
|
136
|
+
);
|
|
137
|
+
--> statement-breakpoint
|
|
138
|
+
ALTER TABLE "dynamic_collections" ADD CONSTRAINT "dynamic_collections_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
139
|
+
ALTER TABLE "role_inherits" ADD CONSTRAINT "role_inherits_parent_role_id_roles_id_fk" FOREIGN KEY ("parent_role_id") REFERENCES "public"."roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
140
|
+
ALTER TABLE "role_inherits" ADD CONSTRAINT "role_inherits_child_role_id_roles_id_fk" FOREIGN KEY ("child_role_id") REFERENCES "public"."roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
141
|
+
ALTER TABLE "role_permissions" ADD CONSTRAINT "role_permissions_role_id_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
142
|
+
ALTER TABLE "role_permissions" ADD CONSTRAINT "role_permissions_permission_id_permissions_id_fk" FOREIGN KEY ("permission_id") REFERENCES "public"."permissions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
143
|
+
ALTER TABLE "user_roles" ADD CONSTRAINT "user_roles_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
144
|
+
ALTER TABLE "user_roles" ADD CONSTRAINT "user_roles_role_id_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
145
|
+
CREATE UNIQUE INDEX "accounts_provider_providerAccountId_unique" ON "accounts" USING btree ("provider","provider_account_id");--> statement-breakpoint
|
|
146
|
+
CREATE INDEX "accounts_user_id_idx" ON "accounts" USING btree ("user_id");--> statement-breakpoint
|
|
147
|
+
CREATE INDEX "content_schema_events_created_at_idx" ON "content_schema_events" USING btree ("created_at");--> statement-breakpoint
|
|
148
|
+
CREATE INDEX "content_schema_events_table_name_idx" ON "content_schema_events" USING btree ("table_name");--> statement-breakpoint
|
|
149
|
+
CREATE UNIQUE INDEX "evt_identifier_token_hash_unique" ON "email_verification_tokens" USING btree ("identifier","token_hash");--> statement-breakpoint
|
|
150
|
+
CREATE INDEX "evt_expires_idx" ON "email_verification_tokens" USING btree ("expires");--> statement-breakpoint
|
|
151
|
+
CREATE UNIQUE INDEX "prt_identifier_token_hash_unique" ON "password_reset_tokens" USING btree ("identifier","token_hash");--> statement-breakpoint
|
|
152
|
+
CREATE INDEX "prt_expires_idx" ON "password_reset_tokens" USING btree ("expires");--> statement-breakpoint
|
|
153
|
+
CREATE INDEX "prt_used_at_idx" ON "password_reset_tokens" USING btree ("used_at");--> statement-breakpoint
|
|
154
|
+
CREATE UNIQUE INDEX "permissions_action_resource_unique" ON "permissions" USING btree ("action","resource");--> statement-breakpoint
|
|
155
|
+
CREATE UNIQUE INDEX "permissions_slug_unique" ON "permissions" USING btree ("slug");--> statement-breakpoint
|
|
156
|
+
CREATE INDEX "permissions_resource_idx" ON "permissions" USING btree ("resource");--> statement-breakpoint
|
|
157
|
+
CREATE UNIQUE INDEX "role_inherits_parent_child_unique" ON "role_inherits" USING btree ("parent_role_id","child_role_id");--> statement-breakpoint
|
|
158
|
+
CREATE INDEX "role_inherits_child_idx" ON "role_inherits" USING btree ("child_role_id");--> statement-breakpoint
|
|
159
|
+
CREATE UNIQUE INDEX "role_permissions_role_permission_unique" ON "role_permissions" USING btree ("role_id","permission_id");--> statement-breakpoint
|
|
160
|
+
CREATE INDEX "role_permissions_role_id_idx" ON "role_permissions" USING btree ("role_id");--> statement-breakpoint
|
|
161
|
+
CREATE UNIQUE INDEX "roles_name_unique" ON "roles" USING btree ("name");--> statement-breakpoint
|
|
162
|
+
CREATE UNIQUE INDEX "roles_slug_unique" ON "roles" USING btree ("slug");--> statement-breakpoint
|
|
163
|
+
CREATE INDEX "sessions_user_id_idx" ON "sessions" USING btree ("user_id");--> statement-breakpoint
|
|
164
|
+
CREATE UNIQUE INDEX "user_roles_user_role_unique" ON "user_roles" USING btree ("user_id","role_id");--> statement-breakpoint
|
|
165
|
+
CREATE INDEX "user_roles_user_id_idx" ON "user_roles" USING btree ("user_id");--> statement-breakpoint
|
|
166
|
+
CREATE UNIQUE INDEX "users_email_unique" ON "users" USING btree ("email");--> statement-breakpoint
|
|
167
|
+
CREATE INDEX "users_created_at_idx" ON "users" USING btree ("created_at");--> statement-breakpoint
|
|
168
|
+
CREATE UNIQUE INDEX "verification_tokens_identifier_token_pk" ON "verification_tokens" USING btree ("identifier","token");--> statement-breakpoint
|
|
169
|
+
CREATE INDEX "verification_tokens_token_idx" ON "verification_tokens" USING btree ("token");
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
CREATE INDEX "dynamic_collections_created_by_idx" ON "dynamic_collections" USING btree ("created_by");--> statement-breakpoint
|
|
2
|
+
CREATE INDEX "dynamic_collections_created_at_idx" ON "dynamic_collections" USING btree ("created_at");--> statement-breakpoint
|
|
3
|
+
CREATE INDEX "dynamic_collections_updated_at_idx" ON "dynamic_collections" USING btree ("updated_at");--> statement-breakpoint
|
|
4
|
+
CREATE INDEX "permissions_action_idx" ON "permissions" USING btree ("action");--> statement-breakpoint
|
|
5
|
+
CREATE INDEX "role_inherits_parent_idx" ON "role_inherits" USING btree ("parent_role_id");--> statement-breakpoint
|
|
6
|
+
CREATE INDEX "roles_level_idx" ON "roles" USING btree ("level");--> statement-breakpoint
|
|
7
|
+
CREATE INDEX "roles_is_system_idx" ON "roles" USING btree ("is_system");--> statement-breakpoint
|
|
8
|
+
CREATE INDEX "user_roles_expires_at_idx" ON "user_roles" USING btree ("expires_at");
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
CREATE TABLE "user_permission_cache" (
|
|
2
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"user_id" text NOT NULL,
|
|
4
|
+
"action" varchar(50) NOT NULL,
|
|
5
|
+
"resource" varchar(100) NOT NULL,
|
|
6
|
+
"has_permission" boolean NOT NULL,
|
|
7
|
+
"role_ids" jsonb NOT NULL,
|
|
8
|
+
"expires_at" timestamp NOT NULL,
|
|
9
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
10
|
+
);
|
|
11
|
+
--> statement-breakpoint
|
|
12
|
+
ALTER TABLE "user_permission_cache" ADD CONSTRAINT "user_permission_cache_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
13
|
+
CREATE INDEX "upc_user_id_idx" ON "user_permission_cache" USING btree ("user_id");--> statement-breakpoint
|
|
14
|
+
CREATE INDEX "upc_expires_at_idx" ON "user_permission_cache" USING btree ("expires_at");--> statement-breakpoint
|
|
15
|
+
CREATE INDEX "upc_user_action_resource_idx" ON "user_permission_cache" USING btree ("user_id","action","resource");--> statement-breakpoint
|
|
16
|
+
CREATE INDEX "upc_role_ids_gin_idx" ON "user_permission_cache" USING gin ("role_ids");
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
CREATE TABLE "field_permissions" (
|
|
2
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"role_id" text NOT NULL,
|
|
4
|
+
"collection_slug" varchar(100) NOT NULL,
|
|
5
|
+
"field_path" varchar(255) NOT NULL,
|
|
6
|
+
"action" varchar(10) NOT NULL,
|
|
7
|
+
"condition" jsonb,
|
|
8
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
9
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
10
|
+
);
|
|
11
|
+
--> statement-breakpoint
|
|
12
|
+
DROP INDEX IF EXISTS "upc_created_at_idx";--> statement-breakpoint
|
|
13
|
+
ALTER TABLE "field_permissions" ADD CONSTRAINT "field_permissions_role_id_roles_id_fk" FOREIGN KEY ("role_id") REFERENCES "public"."roles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
14
|
+
CREATE UNIQUE INDEX "field_permissions_role_collection_field_unique" ON "field_permissions" USING btree ("role_id","collection_slug","field_path");--> statement-breakpoint
|
|
15
|
+
CREATE INDEX "field_permissions_role_id_idx" ON "field_permissions" USING btree ("role_id");--> statement-breakpoint
|
|
16
|
+
CREATE INDEX "field_permissions_collection_idx" ON "field_permissions" USING btree ("collection_slug");--> statement-breakpoint
|
|
17
|
+
CREATE INDEX "field_permissions_lookup_idx" ON "field_permissions" USING btree ("role_id","collection_slug","field_path");
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
CREATE TABLE "media" (
|
|
2
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
3
|
+
"filename" varchar(255) NOT NULL,
|
|
4
|
+
"original_filename" varchar(255) NOT NULL,
|
|
5
|
+
"mime_type" varchar(100) NOT NULL,
|
|
6
|
+
"size" integer NOT NULL,
|
|
7
|
+
"width" integer,
|
|
8
|
+
"height" integer,
|
|
9
|
+
"duration" integer,
|
|
10
|
+
"url" text NOT NULL,
|
|
11
|
+
"thumbnail_url" text,
|
|
12
|
+
"alt_text" text,
|
|
13
|
+
"caption" text,
|
|
14
|
+
"tags" text[],
|
|
15
|
+
"uploaded_by" text NOT NULL,
|
|
16
|
+
"uploaded_at" timestamp DEFAULT now() NOT NULL,
|
|
17
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
18
|
+
);
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
ALTER TABLE "media" ADD CONSTRAINT "media_uploaded_by_users_id_fk" FOREIGN KEY ("uploaded_by") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
21
|
+
CREATE INDEX "media_uploaded_by_idx" ON "media" USING btree ("uploaded_by");--> statement-breakpoint
|
|
22
|
+
CREATE INDEX "media_mime_type_idx" ON "media" USING btree ("mime_type");--> statement-breakpoint
|
|
23
|
+
CREATE INDEX "media_uploaded_at_idx" ON "media" USING btree ("uploaded_at");--> statement-breakpoint
|
|
24
|
+
CREATE INDEX "media_tags_idx" ON "media" USING btree ("tags");
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
-- Migration: Add media folders support
|
|
2
|
+
-- Date: 2025-11-16
|
|
3
|
+
-- Description: Adds media_folders table and folder_id column to media table
|
|
4
|
+
|
|
5
|
+
-- Create media_folders table
|
|
6
|
+
CREATE TABLE "media_folders" (
|
|
7
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
8
|
+
"name" varchar(255) NOT NULL,
|
|
9
|
+
"description" text,
|
|
10
|
+
"parent_id" text,
|
|
11
|
+
"created_by" text NOT NULL,
|
|
12
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
13
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- Add foreign key constraints for media_folders
|
|
17
|
+
ALTER TABLE "media_folders" ADD CONSTRAINT "media_folders_parent_id_media_folders_id_fk"
|
|
18
|
+
FOREIGN KEY ("parent_id") REFERENCES "public"."media_folders"("id") ON DELETE cascade ON UPDATE no action;
|
|
19
|
+
|
|
20
|
+
ALTER TABLE "media_folders" ADD CONSTRAINT "media_folders_created_by_users_id_fk"
|
|
21
|
+
FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;
|
|
22
|
+
|
|
23
|
+
-- Create indexes for media_folders
|
|
24
|
+
CREATE INDEX "media_folders_parent_id_idx" ON "media_folders" USING btree ("parent_id");
|
|
25
|
+
CREATE INDEX "media_folders_created_by_idx" ON "media_folders" USING btree ("created_by");
|
|
26
|
+
CREATE INDEX "media_folders_created_at_idx" ON "media_folders" USING btree ("created_at");
|
|
27
|
+
|
|
28
|
+
-- Add folder_id column to media table
|
|
29
|
+
ALTER TABLE "media" ADD COLUMN "folder_id" text;
|
|
30
|
+
|
|
31
|
+
-- Add foreign key constraint for media.folder_id
|
|
32
|
+
ALTER TABLE "media" ADD CONSTRAINT "media_folder_id_media_folders_id_fk"
|
|
33
|
+
FOREIGN KEY ("folder_id") REFERENCES "public"."media_folders"("id") ON DELETE set null ON UPDATE no action;
|
|
34
|
+
|
|
35
|
+
-- Create index for media.folder_id
|
|
36
|
+
CREATE INDEX "media_folder_id_idx" ON "media" USING btree ("folder_id");
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
-- Migration: Update dynamic_collections table schema
|
|
2
|
+
-- This migration updates the dynamic_collections table to the new schema format
|
|
3
|
+
|
|
4
|
+
-- Step 1: Add new columns
|
|
5
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "slug" varchar(100);
|
|
6
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "labels" jsonb;
|
|
7
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "fields" jsonb;
|
|
8
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "timestamps" boolean DEFAULT true NOT NULL;
|
|
9
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "admin" jsonb;
|
|
10
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "source" varchar(20) DEFAULT 'ui' NOT NULL;
|
|
11
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "locked" boolean DEFAULT false NOT NULL;
|
|
12
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "config_path" varchar(500);
|
|
13
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "schema_hash" varchar(64);
|
|
14
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "schema_version" integer DEFAULT 1 NOT NULL;
|
|
15
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "migration_status" varchar(20) DEFAULT 'pending' NOT NULL;
|
|
16
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "last_migration_id" varchar(100);
|
|
17
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "access_rules" jsonb;
|
|
18
|
+
ALTER TABLE "dynamic_collections" ADD COLUMN IF NOT EXISTS "hooks" jsonb;
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
|
|
21
|
+
-- Step 2: Migrate data from old columns to new columns
|
|
22
|
+
UPDATE "dynamic_collections"
|
|
23
|
+
SET
|
|
24
|
+
"slug" = COALESCE("name", "id"),
|
|
25
|
+
"labels" = jsonb_build_object('singular', COALESCE("label", "name"), 'plural', COALESCE("label", "name") || 's'),
|
|
26
|
+
"fields" = COALESCE("schema_definition", '[]'::jsonb),
|
|
27
|
+
"schema_hash" = md5("schema_definition"::text)
|
|
28
|
+
WHERE "slug" IS NULL;
|
|
29
|
+
--> statement-breakpoint
|
|
30
|
+
|
|
31
|
+
-- Step 3: Make required columns NOT NULL after data migration
|
|
32
|
+
ALTER TABLE "dynamic_collections" ALTER COLUMN "slug" SET NOT NULL;
|
|
33
|
+
ALTER TABLE "dynamic_collections" ALTER COLUMN "labels" SET NOT NULL;
|
|
34
|
+
ALTER TABLE "dynamic_collections" ALTER COLUMN "fields" SET NOT NULL;
|
|
35
|
+
ALTER TABLE "dynamic_collections" ALTER COLUMN "schema_hash" SET NOT NULL;
|
|
36
|
+
--> statement-breakpoint
|
|
37
|
+
|
|
38
|
+
-- Step 4: Add unique constraint on slug
|
|
39
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "dynamic_collections_slug_unique" ON "dynamic_collections" USING btree ("slug");
|
|
40
|
+
--> statement-breakpoint
|
|
41
|
+
|
|
42
|
+
-- Step 5: Add source index
|
|
43
|
+
CREATE INDEX IF NOT EXISTS "dynamic_collections_source_idx" ON "dynamic_collections" USING btree ("source");
|
|
44
|
+
--> statement-breakpoint
|
|
45
|
+
|
|
46
|
+
-- Step 6: Drop old columns that are no longer needed
|
|
47
|
+
ALTER TABLE "dynamic_collections" DROP COLUMN IF EXISTS "name";
|
|
48
|
+
ALTER TABLE "dynamic_collections" DROP COLUMN IF EXISTS "label";
|
|
49
|
+
ALTER TABLE "dynamic_collections" DROP COLUMN IF EXISTS "icon";
|
|
50
|
+
ALTER TABLE "dynamic_collections" DROP COLUMN IF EXISTS "schema_definition";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
-- Migration: Create dynamic_singles table
|
|
2
|
+
-- This migration creates the dynamic_singles table for storing Singles (Globals) metadata
|
|
3
|
+
-- Singles are single-document entities for site-wide configuration (site settings, navigation, etc.)
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS "dynamic_singles" (
|
|
6
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
7
|
+
"slug" varchar(255) NOT NULL,
|
|
8
|
+
"label" varchar(255) NOT NULL,
|
|
9
|
+
"table_name" varchar(255) NOT NULL,
|
|
10
|
+
"description" text,
|
|
11
|
+
"fields" jsonb NOT NULL,
|
|
12
|
+
"admin" jsonb,
|
|
13
|
+
"access_rules" jsonb,
|
|
14
|
+
"source" varchar(20) DEFAULT 'ui' NOT NULL,
|
|
15
|
+
"locked" boolean DEFAULT false NOT NULL,
|
|
16
|
+
"config_path" varchar(500),
|
|
17
|
+
"schema_hash" varchar(64) NOT NULL,
|
|
18
|
+
"schema_version" integer DEFAULT 1 NOT NULL,
|
|
19
|
+
"migration_status" varchar(20) DEFAULT 'pending' NOT NULL,
|
|
20
|
+
"last_migration_id" uuid,
|
|
21
|
+
"created_by" uuid,
|
|
22
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
23
|
+
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
24
|
+
CONSTRAINT "dynamic_singles_slug_unique" UNIQUE("slug"),
|
|
25
|
+
CONSTRAINT "dynamic_singles_table_name_unique" UNIQUE("table_name")
|
|
26
|
+
);
|
|
27
|
+
--> statement-breakpoint
|
|
28
|
+
|
|
29
|
+
-- Create indexes for query performance
|
|
30
|
+
CREATE INDEX IF NOT EXISTS "dynamic_singles_source_idx" ON "dynamic_singles" USING btree ("source");
|
|
31
|
+
--> statement-breakpoint
|
|
32
|
+
CREATE INDEX IF NOT EXISTS "dynamic_singles_migration_status_idx" ON "dynamic_singles" USING btree ("migration_status");
|
|
33
|
+
--> statement-breakpoint
|
|
34
|
+
CREATE INDEX IF NOT EXISTS "dynamic_singles_created_by_idx" ON "dynamic_singles" USING btree ("created_by");
|
|
35
|
+
--> statement-breakpoint
|
|
36
|
+
CREATE INDEX IF NOT EXISTS "dynamic_singles_created_at_idx" ON "dynamic_singles" USING btree ("created_at");
|
|
37
|
+
--> statement-breakpoint
|
|
38
|
+
CREATE INDEX IF NOT EXISTS "dynamic_singles_updated_at_idx" ON "dynamic_singles" USING btree ("updated_at");
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- Migration: Create dynamic_components table
|
|
2
|
+
-- This migration creates the dynamic_components table for storing Component metadata
|
|
3
|
+
-- Components are reusable field group templates that can be embedded in Collections and Singles
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS "dynamic_components" (
|
|
6
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
7
|
+
"slug" varchar(255) NOT NULL,
|
|
8
|
+
"label" varchar(255) NOT NULL,
|
|
9
|
+
"table_name" varchar(255) NOT NULL,
|
|
10
|
+
"description" text,
|
|
11
|
+
"fields" jsonb NOT NULL,
|
|
12
|
+
"admin" jsonb,
|
|
13
|
+
"source" varchar(20) DEFAULT 'ui' NOT NULL,
|
|
14
|
+
"locked" boolean DEFAULT false NOT NULL,
|
|
15
|
+
"config_path" varchar(500),
|
|
16
|
+
"schema_hash" varchar(64) NOT NULL,
|
|
17
|
+
"schema_version" integer DEFAULT 1 NOT NULL,
|
|
18
|
+
"migration_status" varchar(20) DEFAULT 'pending' NOT NULL,
|
|
19
|
+
"last_migration_id" uuid,
|
|
20
|
+
"created_by" uuid,
|
|
21
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
22
|
+
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
23
|
+
CONSTRAINT "dynamic_components_slug_unique" UNIQUE("slug"),
|
|
24
|
+
CONSTRAINT "dynamic_components_table_name_unique" UNIQUE("table_name")
|
|
25
|
+
);
|
|
26
|
+
--> statement-breakpoint
|
|
27
|
+
|
|
28
|
+
-- Create indexes for query performance
|
|
29
|
+
CREATE INDEX IF NOT EXISTS "dynamic_components_source_idx" ON "dynamic_components" USING btree ("source");
|
|
30
|
+
--> statement-breakpoint
|
|
31
|
+
CREATE INDEX IF NOT EXISTS "dynamic_components_migration_status_idx" ON "dynamic_components" USING btree ("migration_status");
|
|
32
|
+
--> statement-breakpoint
|
|
33
|
+
CREATE INDEX IF NOT EXISTS "dynamic_components_created_by_idx" ON "dynamic_components" USING btree ("created_by");
|
|
34
|
+
--> statement-breakpoint
|
|
35
|
+
CREATE INDEX IF NOT EXISTS "dynamic_components_created_at_idx" ON "dynamic_components" USING btree ("created_at");
|
|
36
|
+
--> statement-breakpoint
|
|
37
|
+
CREATE INDEX IF NOT EXISTS "dynamic_components_updated_at_idx" ON "dynamic_components" USING btree ("updated_at");
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
-- Migration: Create Plan 12 system tables
|
|
2
|
+
-- This migration creates the user_field_definitions, email_providers, and email_templates
|
|
3
|
+
-- tables required by the User Management & Extendable User Schema feature (Plan 12).
|
|
4
|
+
|
|
5
|
+
-- ============================================================
|
|
6
|
+
-- user_field_definitions
|
|
7
|
+
-- Stores metadata for custom user fields that extend the base user model.
|
|
8
|
+
-- Fields can be sourced from defineConfig() (code) or admin Settings UI (ui).
|
|
9
|
+
-- ============================================================
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS "user_field_definitions" (
|
|
12
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
13
|
+
"name" varchar(255) NOT NULL,
|
|
14
|
+
"label" varchar(255) NOT NULL,
|
|
15
|
+
"type" varchar(50) NOT NULL,
|
|
16
|
+
"required" boolean NOT NULL DEFAULT false,
|
|
17
|
+
"default_value" varchar(255),
|
|
18
|
+
"options" jsonb,
|
|
19
|
+
"placeholder" varchar(255),
|
|
20
|
+
"description" text,
|
|
21
|
+
"sort_order" integer NOT NULL DEFAULT 0,
|
|
22
|
+
"source" varchar(10) NOT NULL DEFAULT 'ui',
|
|
23
|
+
"is_active" boolean NOT NULL DEFAULT true,
|
|
24
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
25
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
26
|
+
);
|
|
27
|
+
--> statement-breakpoint
|
|
28
|
+
|
|
29
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "user_field_defs_name_unique_idx" ON "user_field_definitions" USING btree ("name");
|
|
30
|
+
--> statement-breakpoint
|
|
31
|
+
CREATE INDEX IF NOT EXISTS "user_field_defs_source_idx" ON "user_field_definitions" USING btree ("source");
|
|
32
|
+
--> statement-breakpoint
|
|
33
|
+
CREATE INDEX IF NOT EXISTS "user_field_defs_is_active_idx" ON "user_field_definitions" USING btree ("is_active");
|
|
34
|
+
--> statement-breakpoint
|
|
35
|
+
CREATE INDEX IF NOT EXISTS "user_field_defs_sort_order_idx" ON "user_field_definitions" USING btree ("sort_order");
|
|
36
|
+
--> statement-breakpoint
|
|
37
|
+
CREATE INDEX IF NOT EXISTS "user_field_defs_created_at_idx" ON "user_field_definitions" USING btree ("created_at");
|
|
38
|
+
--> statement-breakpoint
|
|
39
|
+
|
|
40
|
+
-- ============================================================
|
|
41
|
+
-- email_providers
|
|
42
|
+
-- Stores email provider configurations (SMTP, Resend, SendLayer)
|
|
43
|
+
-- managed via the admin Settings UI.
|
|
44
|
+
-- ============================================================
|
|
45
|
+
|
|
46
|
+
CREATE TABLE IF NOT EXISTS "email_providers" (
|
|
47
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
48
|
+
"name" varchar(255) NOT NULL,
|
|
49
|
+
"type" varchar(50) NOT NULL,
|
|
50
|
+
"from_email" varchar(255) NOT NULL,
|
|
51
|
+
"from_name" varchar(255),
|
|
52
|
+
"configuration" jsonb NOT NULL,
|
|
53
|
+
"is_default" boolean NOT NULL DEFAULT false,
|
|
54
|
+
"is_active" boolean NOT NULL DEFAULT true,
|
|
55
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
56
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
57
|
+
);
|
|
58
|
+
--> statement-breakpoint
|
|
59
|
+
|
|
60
|
+
CREATE INDEX IF NOT EXISTS "email_providers_type_idx" ON "email_providers" USING btree ("type");
|
|
61
|
+
--> statement-breakpoint
|
|
62
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "email_providers_default_unique_idx" ON "email_providers" ("is_default") WHERE "is_default" = true;
|
|
63
|
+
--> statement-breakpoint
|
|
64
|
+
CREATE INDEX IF NOT EXISTS "email_providers_is_active_idx" ON "email_providers" USING btree ("is_active");
|
|
65
|
+
--> statement-breakpoint
|
|
66
|
+
CREATE INDEX IF NOT EXISTS "email_providers_created_at_idx" ON "email_providers" USING btree ("created_at");
|
|
67
|
+
--> statement-breakpoint
|
|
68
|
+
|
|
69
|
+
-- ============================================================
|
|
70
|
+
-- email_templates
|
|
71
|
+
-- Stores email templates with {{variable}} interpolation support,
|
|
72
|
+
-- managed via the admin Settings UI.
|
|
73
|
+
-- ============================================================
|
|
74
|
+
|
|
75
|
+
CREATE TABLE IF NOT EXISTS "email_templates" (
|
|
76
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
77
|
+
"name" varchar(255) NOT NULL,
|
|
78
|
+
"slug" varchar(255) NOT NULL UNIQUE,
|
|
79
|
+
"subject" text NOT NULL,
|
|
80
|
+
"html_content" text NOT NULL,
|
|
81
|
+
"plain_text_content" text,
|
|
82
|
+
"variables" jsonb,
|
|
83
|
+
"use_layout" boolean NOT NULL DEFAULT true,
|
|
84
|
+
"is_active" boolean NOT NULL DEFAULT true,
|
|
85
|
+
"provider_id" uuid,
|
|
86
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
87
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
88
|
+
);
|
|
89
|
+
--> statement-breakpoint
|
|
90
|
+
|
|
91
|
+
CREATE INDEX IF NOT EXISTS "email_templates_is_active_idx" ON "email_templates" USING btree ("is_active");
|
|
92
|
+
--> statement-breakpoint
|
|
93
|
+
CREATE INDEX IF NOT EXISTS "email_templates_provider_id_idx" ON "email_templates" USING btree ("provider_id");
|
|
94
|
+
--> statement-breakpoint
|
|
95
|
+
CREATE INDEX IF NOT EXISTS "email_templates_created_at_idx" ON "email_templates" USING btree ("created_at");
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
-- Migration: Create api_keys table for API Key Authentication (Plan 14)
|
|
2
|
+
-- This migration creates the api_keys table required for programmatic API access
|
|
3
|
+
-- using long-lived secret keys with SHA-256 hashed storage.
|
|
4
|
+
|
|
5
|
+
-- UP
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS "api_keys" (
|
|
8
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
9
|
+
"name" varchar(255) NOT NULL,
|
|
10
|
+
"description" text,
|
|
11
|
+
"key_hash" varchar(64) NOT NULL,
|
|
12
|
+
"key_prefix" varchar(16) NOT NULL,
|
|
13
|
+
"token_type" varchar(20) NOT NULL,
|
|
14
|
+
"role_id" text REFERENCES "roles"("id") ON DELETE SET NULL,
|
|
15
|
+
"user_id" text NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
|
|
16
|
+
"expires_at" timestamp,
|
|
17
|
+
"last_used_at" timestamp,
|
|
18
|
+
"is_active" boolean NOT NULL DEFAULT true,
|
|
19
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
20
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "api_keys_key_hash_unique" ON "api_keys" USING btree ("key_hash");
|
|
24
|
+
CREATE INDEX IF NOT EXISTS "api_keys_user_id_idx" ON "api_keys" USING btree ("user_id");
|
|
25
|
+
CREATE INDEX IF NOT EXISTS "api_keys_role_id_idx" ON "api_keys" USING btree ("role_id");
|
|
26
|
+
CREATE INDEX IF NOT EXISTS "api_keys_is_active_expires_at_idx" ON "api_keys" USING btree ("is_active", "expires_at");
|
|
27
|
+
|
|
28
|
+
-- DOWN
|
|
29
|
+
|
|
30
|
+
DROP INDEX IF EXISTS "api_keys_is_active_expires_at_idx";
|
|
31
|
+
DROP INDEX IF EXISTS "api_keys_role_id_idx";
|
|
32
|
+
DROP INDEX IF EXISTS "api_keys_user_id_idx";
|
|
33
|
+
DROP INDEX IF EXISTS "api_keys_key_hash_unique";
|
|
34
|
+
DROP TABLE IF EXISTS "api_keys";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-- Migration: Create site_settings table for general application settings
|
|
2
|
+
-- This migration creates the site_settings singleton table.
|
|
3
|
+
-- Only one row ever exists with id = 'default'.
|
|
4
|
+
|
|
5
|
+
-- UP
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS "site_settings" (
|
|
8
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
9
|
+
"application_name" varchar(255),
|
|
10
|
+
"site_url" varchar(2048),
|
|
11
|
+
"admin_email" varchar(255),
|
|
12
|
+
"timezone" varchar(100),
|
|
13
|
+
"date_format" varchar(50),
|
|
14
|
+
"time_format" varchar(50),
|
|
15
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
-- DOWN
|
|
19
|
+
|
|
20
|
+
DROP TABLE IF EXISTS "site_settings";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- Migration: Create activity_log table for Dashboard Activity Feed (Plan 16)
|
|
2
|
+
-- This migration creates the activity_log table that records create/update/delete
|
|
3
|
+
-- actions across all collections for the dashboard activity feed.
|
|
4
|
+
|
|
5
|
+
-- UP
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS "activity_log" (
|
|
8
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
9
|
+
"user_id" text NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
|
|
10
|
+
"user_name" text NOT NULL,
|
|
11
|
+
"user_email" text NOT NULL,
|
|
12
|
+
"action" varchar(10) NOT NULL,
|
|
13
|
+
"collection" varchar(255) NOT NULL,
|
|
14
|
+
"entry_id" text,
|
|
15
|
+
"entry_title" text,
|
|
16
|
+
"metadata" text,
|
|
17
|
+
"created_at" timestamp DEFAULT now() NOT NULL
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
CREATE INDEX IF NOT EXISTS "idx_activity_log_created_at" ON "activity_log" USING btree ("created_at");
|
|
21
|
+
CREATE INDEX IF NOT EXISTS "idx_activity_log_collection" ON "activity_log" USING btree ("collection", "created_at");
|
|
22
|
+
CREATE INDEX IF NOT EXISTS "idx_activity_log_user_id" ON "activity_log" USING btree ("user_id", "created_at");
|
|
23
|
+
|
|
24
|
+
-- DOWN
|
|
25
|
+
|
|
26
|
+
DROP INDEX IF EXISTS "idx_activity_log_user_id";
|
|
27
|
+
DROP INDEX IF EXISTS "idx_activity_log_collection";
|
|
28
|
+
DROP INDEX IF EXISTS "idx_activity_log_created_at";
|
|
29
|
+
DROP TABLE IF EXISTS "activity_log";
|