@actuate-media/cms-core 0.19.0 → 0.21.0

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.
Files changed (72) hide show
  1. package/LICENSE +21 -21
  2. package/dist/__tests__/api/ai-quality.test.d.ts +2 -0
  3. package/dist/__tests__/api/ai-quality.test.d.ts.map +1 -0
  4. package/dist/__tests__/api/ai-quality.test.js +470 -0
  5. package/dist/__tests__/api/ai-quality.test.js.map +1 -0
  6. package/dist/__tests__/fields/component-block.test.d.ts +2 -0
  7. package/dist/__tests__/fields/component-block.test.d.ts.map +1 -0
  8. package/dist/__tests__/fields/component-block.test.js +129 -0
  9. package/dist/__tests__/fields/component-block.test.js.map +1 -0
  10. package/dist/__tests__/seo/config-store.test.d.ts +2 -0
  11. package/dist/__tests__/seo/config-store.test.d.ts.map +1 -0
  12. package/dist/__tests__/seo/config-store.test.js +167 -0
  13. package/dist/__tests__/seo/config-store.test.js.map +1 -0
  14. package/dist/api/handler-factory.d.ts.map +1 -1
  15. package/dist/api/handler-factory.js +4 -0
  16. package/dist/api/handler-factory.js.map +1 -1
  17. package/dist/api/handlers.d.ts.map +1 -1
  18. package/dist/api/handlers.js +566 -21
  19. package/dist/api/handlers.js.map +1 -1
  20. package/dist/config/types.d.ts +61 -1
  21. package/dist/config/types.d.ts.map +1 -1
  22. package/dist/fields/component-block.d.ts +23 -0
  23. package/dist/fields/component-block.d.ts.map +1 -0
  24. package/dist/fields/component-block.js +137 -0
  25. package/dist/fields/component-block.js.map +1 -0
  26. package/dist/fields/index.d.ts.map +1 -1
  27. package/dist/fields/index.js +2 -0
  28. package/dist/fields/index.js.map +1 -1
  29. package/dist/seo/config-store.d.ts +61 -0
  30. package/dist/seo/config-store.d.ts.map +1 -0
  31. package/dist/seo/config-store.js +158 -0
  32. package/dist/seo/config-store.js.map +1 -0
  33. package/dist/seo/index.d.ts +2 -0
  34. package/dist/seo/index.d.ts.map +1 -1
  35. package/dist/seo/index.js +1 -0
  36. package/dist/seo/index.js.map +1 -1
  37. package/package.json +1 -1
  38. package/prisma/cms-schema.prisma +306 -306
  39. package/prisma/migrations/0001_init/migration.sql +384 -384
  40. package/prisma/migrations/0002_folders/migration.sql +39 -39
  41. package/prisma/migrations/0003_search_and_webhooks/migration.sql +50 -50
  42. package/prisma/migrations/0004_script_tags/migration.sql +21 -21
  43. package/prisma/migrations/0005_password_reset_tokens/migration.sql +20 -20
  44. package/prisma/migrations/0006_page_builder/migration.sql +38 -38
  45. package/prisma/migrations/migration_lock.toml +3 -3
  46. package/prisma/schema.prisma +549 -549
  47. package/generated/browser.ts +0 -109
  48. package/generated/client.ts +0 -133
  49. package/generated/commonInputTypes.ts +0 -709
  50. package/generated/enums.ts +0 -125
  51. package/generated/internal/class.ts +0 -376
  52. package/generated/internal/prismaNamespace.ts +0 -2617
  53. package/generated/internal/prismaNamespaceBrowser.ts +0 -611
  54. package/generated/models/ApiKey.ts +0 -1550
  55. package/generated/models/AuditLog.ts +0 -1206
  56. package/generated/models/BackupRecord.ts +0 -1250
  57. package/generated/models/ContentLock.ts +0 -1472
  58. package/generated/models/ContentTemplate.ts +0 -1416
  59. package/generated/models/Document.ts +0 -3005
  60. package/generated/models/Folder.ts +0 -1904
  61. package/generated/models/FormSubmission.ts +0 -1200
  62. package/generated/models/InAppNotification.ts +0 -1457
  63. package/generated/models/Media.ts +0 -2340
  64. package/generated/models/MediaUsage.ts +0 -1472
  65. package/generated/models/OAuthAccount.ts +0 -1463
  66. package/generated/models/Redirect.ts +0 -1284
  67. package/generated/models/Session.ts +0 -1492
  68. package/generated/models/Site.ts +0 -1206
  69. package/generated/models/User.ts +0 -3513
  70. package/generated/models/Version.ts +0 -1511
  71. package/generated/models/WorkflowState.ts +0 -1514
  72. package/generated/models.ts +0 -29
@@ -1,384 +1,384 @@
1
- -- CreateSchema
2
- CREATE SCHEMA IF NOT EXISTS "public";
3
-
4
- -- CreateEnum
5
- CREATE TYPE "DocumentStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'ARCHIVED', 'SCHEDULED', 'SCHEDULED_UNPUBLISH');
6
-
7
- -- CreateEnum
8
- CREATE TYPE "UserRole" AS ENUM ('ADMIN', 'EDITOR', 'AUTHOR', 'CLIENT');
9
-
10
- -- CreateEnum
11
- CREATE TYPE "ChangeType" AS ENUM ('CREATE', 'UPDATE', 'PUBLISH', 'RESTORE');
12
-
13
- -- CreateEnum
14
- CREATE TYPE "AuditEvent" AS ENUM ('login_success', 'login_failed', 'logout', 'password_change', 'password_reset_request', 'password_reset_complete', 'totp_enabled', 'totp_disabled', 'api_key_created', 'api_key_revoked', 'document_created', 'document_updated', 'document_published', 'document_deleted', 'media_uploaded', 'media_deleted', 'user_created', 'user_updated', 'user_deactivated', 'settings_changed', 'export_requested', 'import_completed');
15
-
16
- -- CreateEnum
17
- CREATE TYPE "NotificationType" AS ENUM ('DOCUMENT_PUBLISHED', 'DOCUMENT_ASSIGNED', 'REVIEW_REQUESTED', 'REVIEW_APPROVED', 'COMMENT_ADDED', 'SYSTEM_ALERT', 'WORKFLOW_STEP');
18
-
19
- -- CreateEnum
20
- CREATE TYPE "OrderStatus" AS ENUM ('PENDING', 'CONFIRMED', 'PROCESSING', 'SHIPPED', 'DELIVERED', 'CANCELLED', 'REFUNDED');
21
-
22
- -- CreateEnum
23
- CREATE TYPE "PaymentStatus" AS ENUM ('PENDING', 'AUTHORIZED', 'CAPTURED', 'FAILED', 'REFUNDED', 'PARTIALLY_REFUNDED');
24
-
25
- -- CreateEnum
26
- CREATE TYPE "DiscountType" AS ENUM ('PERCENTAGE', 'FIXED_AMOUNT', 'FREE_SHIPPING');
27
-
28
- -- CreateEnum
29
- CREATE TYPE "ProductType" AS ENUM ('PHYSICAL', 'DIGITAL', 'SUBSCRIPTION', 'BUNDLE');
30
-
31
- -- CreateTable
32
- CREATE TABLE "actuate_users" (
33
- "id" TEXT NOT NULL,
34
- "email" TEXT NOT NULL,
35
- "name" TEXT NOT NULL,
36
- "avatarUrl" TEXT,
37
- "role" "UserRole" NOT NULL DEFAULT 'AUTHOR',
38
- "passwordHash" TEXT,
39
- "totpSecret" TEXT,
40
- "authProvider" TEXT,
41
- "isActive" BOOLEAN NOT NULL DEFAULT true,
42
- "isApproved" BOOLEAN NOT NULL DEFAULT false,
43
- "emailVerified" BOOLEAN NOT NULL DEFAULT false,
44
- "lastLoginAt" TIMESTAMP(3),
45
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
46
- "updatedAt" TIMESTAMP(3) NOT NULL,
47
-
48
- CONSTRAINT "actuate_users_pkey" PRIMARY KEY ("id")
49
- );
50
-
51
- -- CreateTable
52
- CREATE TABLE "actuate_oauth_accounts" (
53
- "id" TEXT NOT NULL,
54
- "userId" TEXT NOT NULL,
55
- "provider" TEXT NOT NULL,
56
- "providerAccountId" TEXT NOT NULL,
57
- "accessToken" TEXT,
58
- "refreshToken" TEXT,
59
- "expiresAt" TIMESTAMP(3),
60
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
61
-
62
- CONSTRAINT "actuate_oauth_accounts_pkey" PRIMARY KEY ("id")
63
- );
64
-
65
- -- CreateTable
66
- CREATE TABLE "actuate_sessions" (
67
- "id" TEXT NOT NULL,
68
- "userId" TEXT NOT NULL,
69
- "token" TEXT NOT NULL,
70
- "expiresAt" TIMESTAMP(3) NOT NULL,
71
- "revokedAt" TIMESTAMP(3),
72
- "ipAddress" TEXT,
73
- "userAgent" TEXT,
74
- "fingerprintHash" TEXT,
75
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
76
-
77
- CONSTRAINT "actuate_sessions_pkey" PRIMARY KEY ("id")
78
- );
79
-
80
- -- CreateTable
81
- CREATE TABLE "actuate_api_keys" (
82
- "id" TEXT NOT NULL,
83
- "name" TEXT NOT NULL,
84
- "keyHash" TEXT NOT NULL,
85
- "keyPrefix" TEXT NOT NULL,
86
- "userId" TEXT NOT NULL,
87
- "scopes" JSONB NOT NULL,
88
- "ipRestrictions" JSONB,
89
- "expiresAt" TIMESTAMP(3),
90
- "lastUsedAt" TIMESTAMP(3),
91
- "revokedAt" TIMESTAMP(3),
92
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
93
-
94
- CONSTRAINT "actuate_api_keys_pkey" PRIMARY KEY ("id")
95
- );
96
-
97
- -- CreateTable
98
- CREATE TABLE "actuate_audit_logs" (
99
- "id" TEXT NOT NULL,
100
- "event" TEXT NOT NULL,
101
- "userId" TEXT,
102
- "ipAddress" TEXT,
103
- "userAgent" TEXT,
104
- "details" JSONB,
105
- "timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
106
-
107
- CONSTRAINT "actuate_audit_logs_pkey" PRIMARY KEY ("id")
108
- );
109
-
110
- -- CreateTable
111
- CREATE TABLE "actuate_documents" (
112
- "id" TEXT NOT NULL,
113
- "collection" TEXT NOT NULL,
114
- "data" JSONB NOT NULL,
115
- "status" "DocumentStatus" NOT NULL DEFAULT 'DRAFT',
116
- "locale" TEXT,
117
- "localeGroupId" TEXT,
118
- "createdById" TEXT NOT NULL,
119
- "updatedById" TEXT NOT NULL,
120
- "publishedAt" TIMESTAMP(3),
121
- "scheduledAt" TIMESTAMP(3),
122
- "scheduledUnpublishAt" TIMESTAMP(3),
123
- "deletedAt" TIMESTAMP(3),
124
- "searchVector" TEXT,
125
- "plainText" TEXT,
126
- "contentHash" TEXT,
127
- "structuredData" JSONB,
128
- "contentGraph" JSONB,
129
- "siteId" TEXT,
130
- "templateId" TEXT,
131
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
132
- "updatedAt" TIMESTAMP(3) NOT NULL,
133
-
134
- CONSTRAINT "actuate_documents_pkey" PRIMARY KEY ("id")
135
- );
136
-
137
- -- CreateTable
138
- CREATE TABLE "actuate_versions" (
139
- "id" TEXT NOT NULL,
140
- "documentId" TEXT NOT NULL,
141
- "data" JSONB NOT NULL,
142
- "changedById" TEXT NOT NULL,
143
- "changeType" "ChangeType" NOT NULL,
144
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
145
-
146
- CONSTRAINT "actuate_versions_pkey" PRIMARY KEY ("id")
147
- );
148
-
149
- -- CreateTable
150
- CREATE TABLE "actuate_media" (
151
- "id" TEXT NOT NULL,
152
- "filename" TEXT NOT NULL,
153
- "storageKey" TEXT NOT NULL,
154
- "mimeType" TEXT NOT NULL,
155
- "fileSize" INTEGER NOT NULL,
156
- "width" INTEGER,
157
- "height" INTEGER,
158
- "altText" TEXT,
159
- "title" TEXT,
160
- "uploadedById" TEXT NOT NULL,
161
- "focalPointX" DOUBLE PRECISION,
162
- "focalPointY" DOUBLE PRECISION,
163
- "blurHash" TEXT,
164
- "aiAltText" TEXT,
165
- "aiTags" JSONB,
166
- "aiDescription" TEXT,
167
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
168
- "updatedAt" TIMESTAMP(3) NOT NULL,
169
-
170
- CONSTRAINT "actuate_media_pkey" PRIMARY KEY ("id")
171
- );
172
-
173
- -- CreateTable
174
- CREATE TABLE "actuate_media_usages" (
175
- "id" TEXT NOT NULL,
176
- "mediaId" TEXT NOT NULL,
177
- "documentId" TEXT NOT NULL,
178
- "fieldName" TEXT NOT NULL,
179
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
180
-
181
- CONSTRAINT "actuate_media_usages_pkey" PRIMARY KEY ("id")
182
- );
183
-
184
- -- CreateTable
185
- CREATE TABLE "actuate_content_locks" (
186
- "id" TEXT NOT NULL,
187
- "documentId" TEXT NOT NULL,
188
- "userId" TEXT NOT NULL,
189
- "lockedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
190
- "expiresAt" TIMESTAMP(3) NOT NULL,
191
-
192
- CONSTRAINT "actuate_content_locks_pkey" PRIMARY KEY ("id")
193
- );
194
-
195
- -- CreateTable
196
- CREATE TABLE "actuate_notifications" (
197
- "id" TEXT NOT NULL,
198
- "userId" TEXT NOT NULL,
199
- "type" TEXT NOT NULL,
200
- "title" TEXT NOT NULL,
201
- "message" TEXT,
202
- "link" TEXT,
203
- "read" BOOLEAN NOT NULL DEFAULT false,
204
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
205
-
206
- CONSTRAINT "actuate_notifications_pkey" PRIMARY KEY ("id")
207
- );
208
-
209
- -- CreateTable
210
- CREATE TABLE "actuate_content_templates" (
211
- "id" TEXT NOT NULL,
212
- "name" TEXT NOT NULL,
213
- "collection" TEXT NOT NULL,
214
- "templateData" JSONB NOT NULL,
215
- "createdById" TEXT NOT NULL,
216
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
217
- "updatedAt" TIMESTAMP(3) NOT NULL,
218
-
219
- CONSTRAINT "actuate_content_templates_pkey" PRIMARY KEY ("id")
220
- );
221
-
222
- -- CreateTable
223
- CREATE TABLE "actuate_sites" (
224
- "id" TEXT NOT NULL,
225
- "domain" TEXT NOT NULL,
226
- "name" TEXT NOT NULL,
227
- "configOverrides" JSONB,
228
- "isDefault" BOOLEAN NOT NULL DEFAULT false,
229
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
230
- "updatedAt" TIMESTAMP(3) NOT NULL,
231
-
232
- CONSTRAINT "actuate_sites_pkey" PRIMARY KEY ("id")
233
- );
234
-
235
- -- CreateTable
236
- CREATE TABLE "actuate_workflow_states" (
237
- "id" TEXT NOT NULL,
238
- "documentId" TEXT NOT NULL,
239
- "currentStep" INTEGER NOT NULL DEFAULT 0,
240
- "assignedToId" TEXT,
241
- "status" TEXT NOT NULL DEFAULT 'pending',
242
- "definition" JSONB NOT NULL,
243
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
244
- "updatedAt" TIMESTAMP(3) NOT NULL,
245
-
246
- CONSTRAINT "actuate_workflow_states_pkey" PRIMARY KEY ("id")
247
- );
248
-
249
- -- CreateTable
250
- CREATE TABLE "actuate_redirects" (
251
- "id" TEXT NOT NULL,
252
- "source" TEXT NOT NULL,
253
- "destination" TEXT NOT NULL,
254
- "statusCode" INTEGER NOT NULL DEFAULT 301,
255
- "isRegex" BOOLEAN NOT NULL DEFAULT false,
256
- "notes" TEXT,
257
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
258
- "updatedAt" TIMESTAMP(3) NOT NULL,
259
-
260
- CONSTRAINT "actuate_redirects_pkey" PRIMARY KEY ("id")
261
- );
262
-
263
- -- CreateTable
264
- CREATE TABLE "actuate_form_submissions" (
265
- "id" TEXT NOT NULL,
266
- "formId" TEXT NOT NULL,
267
- "data" JSONB NOT NULL,
268
- "attribution" JSONB,
269
- "status" TEXT NOT NULL DEFAULT 'new',
270
- "submittedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
271
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
272
-
273
- CONSTRAINT "actuate_form_submissions_pkey" PRIMARY KEY ("id")
274
- );
275
-
276
- -- CreateTable
277
- CREATE TABLE "actuate_backup_records" (
278
- "id" TEXT NOT NULL,
279
- "filename" TEXT NOT NULL,
280
- "storageKey" TEXT NOT NULL,
281
- "sizeBytes" INTEGER NOT NULL,
282
- "type" TEXT NOT NULL,
283
- "metadata" JSONB,
284
- "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
285
-
286
- CONSTRAINT "actuate_backup_records_pkey" PRIMARY KEY ("id")
287
- );
288
-
289
- -- CreateIndex
290
- CREATE UNIQUE INDEX "actuate_users_email_key" ON "actuate_users"("email");
291
-
292
- -- CreateIndex
293
- CREATE UNIQUE INDEX "actuate_oauth_accounts_provider_providerAccountId_key" ON "actuate_oauth_accounts"("provider", "providerAccountId");
294
-
295
- -- CreateIndex
296
- CREATE UNIQUE INDEX "actuate_sessions_token_key" ON "actuate_sessions"("token");
297
-
298
- -- CreateIndex
299
- CREATE UNIQUE INDEX "actuate_api_keys_keyHash_key" ON "actuate_api_keys"("keyHash");
300
-
301
- -- CreateIndex
302
- CREATE INDEX "actuate_audit_logs_event_idx" ON "actuate_audit_logs"("event");
303
-
304
- -- CreateIndex
305
- CREATE INDEX "actuate_audit_logs_userId_idx" ON "actuate_audit_logs"("userId");
306
-
307
- -- CreateIndex
308
- CREATE INDEX "actuate_audit_logs_timestamp_idx" ON "actuate_audit_logs"("timestamp");
309
-
310
- -- CreateIndex
311
- CREATE INDEX "actuate_documents_collection_idx" ON "actuate_documents"("collection");
312
-
313
- -- CreateIndex
314
- CREATE INDEX "actuate_documents_status_idx" ON "actuate_documents"("status");
315
-
316
- -- CreateIndex
317
- CREATE INDEX "actuate_documents_deletedAt_idx" ON "actuate_documents"("deletedAt");
318
-
319
- -- CreateIndex
320
- CREATE INDEX "actuate_documents_publishedAt_idx" ON "actuate_documents"("publishedAt");
321
-
322
- -- CreateIndex
323
- CREATE UNIQUE INDEX "actuate_media_storageKey_key" ON "actuate_media"("storageKey");
324
-
325
- -- CreateIndex
326
- CREATE UNIQUE INDEX "actuate_sites_domain_key" ON "actuate_sites"("domain");
327
-
328
- -- CreateIndex
329
- CREATE UNIQUE INDEX "actuate_workflow_states_documentId_key" ON "actuate_workflow_states"("documentId");
330
-
331
- -- CreateIndex
332
- CREATE UNIQUE INDEX "actuate_redirects_source_key" ON "actuate_redirects"("source");
333
-
334
- -- CreateIndex
335
- CREATE INDEX "actuate_form_submissions_formId_idx" ON "actuate_form_submissions"("formId");
336
-
337
- -- CreateIndex
338
- CREATE INDEX "actuate_form_submissions_status_idx" ON "actuate_form_submissions"("status");
339
-
340
- -- AddForeignKey
341
- ALTER TABLE "actuate_oauth_accounts" ADD CONSTRAINT "actuate_oauth_accounts_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
342
-
343
- -- AddForeignKey
344
- ALTER TABLE "actuate_sessions" ADD CONSTRAINT "actuate_sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
345
-
346
- -- AddForeignKey
347
- ALTER TABLE "actuate_api_keys" ADD CONSTRAINT "actuate_api_keys_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
348
-
349
- -- AddForeignKey
350
- ALTER TABLE "actuate_documents" ADD CONSTRAINT "actuate_documents_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
351
-
352
- -- AddForeignKey
353
- ALTER TABLE "actuate_documents" ADD CONSTRAINT "actuate_documents_updatedById_fkey" FOREIGN KEY ("updatedById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
354
-
355
- -- AddForeignKey
356
- ALTER TABLE "actuate_versions" ADD CONSTRAINT "actuate_versions_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "actuate_documents"("id") ON DELETE CASCADE ON UPDATE CASCADE;
357
-
358
- -- AddForeignKey
359
- ALTER TABLE "actuate_versions" ADD CONSTRAINT "actuate_versions_changedById_fkey" FOREIGN KEY ("changedById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
360
-
361
- -- AddForeignKey
362
- ALTER TABLE "actuate_media" ADD CONSTRAINT "actuate_media_uploadedById_fkey" FOREIGN KEY ("uploadedById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
363
-
364
- -- AddForeignKey
365
- ALTER TABLE "actuate_media_usages" ADD CONSTRAINT "actuate_media_usages_mediaId_fkey" FOREIGN KEY ("mediaId") REFERENCES "actuate_media"("id") ON DELETE CASCADE ON UPDATE CASCADE;
366
-
367
- -- AddForeignKey
368
- ALTER TABLE "actuate_media_usages" ADD CONSTRAINT "actuate_media_usages_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "actuate_documents"("id") ON DELETE CASCADE ON UPDATE CASCADE;
369
-
370
- -- AddForeignKey
371
- ALTER TABLE "actuate_content_locks" ADD CONSTRAINT "actuate_content_locks_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "actuate_documents"("id") ON DELETE CASCADE ON UPDATE CASCADE;
372
-
373
- -- AddForeignKey
374
- ALTER TABLE "actuate_content_locks" ADD CONSTRAINT "actuate_content_locks_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
375
-
376
- -- AddForeignKey
377
- ALTER TABLE "actuate_notifications" ADD CONSTRAINT "actuate_notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
378
-
379
- -- AddForeignKey
380
- ALTER TABLE "actuate_content_templates" ADD CONSTRAINT "actuate_content_templates_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
381
-
382
- -- AddForeignKey
383
- ALTER TABLE "actuate_workflow_states" ADD CONSTRAINT "actuate_workflow_states_assignedToId_fkey" FOREIGN KEY ("assignedToId") REFERENCES "actuate_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
384
-
1
+ -- CreateSchema
2
+ CREATE SCHEMA IF NOT EXISTS "public";
3
+
4
+ -- CreateEnum
5
+ CREATE TYPE "DocumentStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'ARCHIVED', 'SCHEDULED', 'SCHEDULED_UNPUBLISH');
6
+
7
+ -- CreateEnum
8
+ CREATE TYPE "UserRole" AS ENUM ('ADMIN', 'EDITOR', 'AUTHOR', 'CLIENT');
9
+
10
+ -- CreateEnum
11
+ CREATE TYPE "ChangeType" AS ENUM ('CREATE', 'UPDATE', 'PUBLISH', 'RESTORE');
12
+
13
+ -- CreateEnum
14
+ CREATE TYPE "AuditEvent" AS ENUM ('login_success', 'login_failed', 'logout', 'password_change', 'password_reset_request', 'password_reset_complete', 'totp_enabled', 'totp_disabled', 'api_key_created', 'api_key_revoked', 'document_created', 'document_updated', 'document_published', 'document_deleted', 'media_uploaded', 'media_deleted', 'user_created', 'user_updated', 'user_deactivated', 'settings_changed', 'export_requested', 'import_completed');
15
+
16
+ -- CreateEnum
17
+ CREATE TYPE "NotificationType" AS ENUM ('DOCUMENT_PUBLISHED', 'DOCUMENT_ASSIGNED', 'REVIEW_REQUESTED', 'REVIEW_APPROVED', 'COMMENT_ADDED', 'SYSTEM_ALERT', 'WORKFLOW_STEP');
18
+
19
+ -- CreateEnum
20
+ CREATE TYPE "OrderStatus" AS ENUM ('PENDING', 'CONFIRMED', 'PROCESSING', 'SHIPPED', 'DELIVERED', 'CANCELLED', 'REFUNDED');
21
+
22
+ -- CreateEnum
23
+ CREATE TYPE "PaymentStatus" AS ENUM ('PENDING', 'AUTHORIZED', 'CAPTURED', 'FAILED', 'REFUNDED', 'PARTIALLY_REFUNDED');
24
+
25
+ -- CreateEnum
26
+ CREATE TYPE "DiscountType" AS ENUM ('PERCENTAGE', 'FIXED_AMOUNT', 'FREE_SHIPPING');
27
+
28
+ -- CreateEnum
29
+ CREATE TYPE "ProductType" AS ENUM ('PHYSICAL', 'DIGITAL', 'SUBSCRIPTION', 'BUNDLE');
30
+
31
+ -- CreateTable
32
+ CREATE TABLE "actuate_users" (
33
+ "id" TEXT NOT NULL,
34
+ "email" TEXT NOT NULL,
35
+ "name" TEXT NOT NULL,
36
+ "avatarUrl" TEXT,
37
+ "role" "UserRole" NOT NULL DEFAULT 'AUTHOR',
38
+ "passwordHash" TEXT,
39
+ "totpSecret" TEXT,
40
+ "authProvider" TEXT,
41
+ "isActive" BOOLEAN NOT NULL DEFAULT true,
42
+ "isApproved" BOOLEAN NOT NULL DEFAULT false,
43
+ "emailVerified" BOOLEAN NOT NULL DEFAULT false,
44
+ "lastLoginAt" TIMESTAMP(3),
45
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
46
+ "updatedAt" TIMESTAMP(3) NOT NULL,
47
+
48
+ CONSTRAINT "actuate_users_pkey" PRIMARY KEY ("id")
49
+ );
50
+
51
+ -- CreateTable
52
+ CREATE TABLE "actuate_oauth_accounts" (
53
+ "id" TEXT NOT NULL,
54
+ "userId" TEXT NOT NULL,
55
+ "provider" TEXT NOT NULL,
56
+ "providerAccountId" TEXT NOT NULL,
57
+ "accessToken" TEXT,
58
+ "refreshToken" TEXT,
59
+ "expiresAt" TIMESTAMP(3),
60
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
61
+
62
+ CONSTRAINT "actuate_oauth_accounts_pkey" PRIMARY KEY ("id")
63
+ );
64
+
65
+ -- CreateTable
66
+ CREATE TABLE "actuate_sessions" (
67
+ "id" TEXT NOT NULL,
68
+ "userId" TEXT NOT NULL,
69
+ "token" TEXT NOT NULL,
70
+ "expiresAt" TIMESTAMP(3) NOT NULL,
71
+ "revokedAt" TIMESTAMP(3),
72
+ "ipAddress" TEXT,
73
+ "userAgent" TEXT,
74
+ "fingerprintHash" TEXT,
75
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
76
+
77
+ CONSTRAINT "actuate_sessions_pkey" PRIMARY KEY ("id")
78
+ );
79
+
80
+ -- CreateTable
81
+ CREATE TABLE "actuate_api_keys" (
82
+ "id" TEXT NOT NULL,
83
+ "name" TEXT NOT NULL,
84
+ "keyHash" TEXT NOT NULL,
85
+ "keyPrefix" TEXT NOT NULL,
86
+ "userId" TEXT NOT NULL,
87
+ "scopes" JSONB NOT NULL,
88
+ "ipRestrictions" JSONB,
89
+ "expiresAt" TIMESTAMP(3),
90
+ "lastUsedAt" TIMESTAMP(3),
91
+ "revokedAt" TIMESTAMP(3),
92
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
93
+
94
+ CONSTRAINT "actuate_api_keys_pkey" PRIMARY KEY ("id")
95
+ );
96
+
97
+ -- CreateTable
98
+ CREATE TABLE "actuate_audit_logs" (
99
+ "id" TEXT NOT NULL,
100
+ "event" TEXT NOT NULL,
101
+ "userId" TEXT,
102
+ "ipAddress" TEXT,
103
+ "userAgent" TEXT,
104
+ "details" JSONB,
105
+ "timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
106
+
107
+ CONSTRAINT "actuate_audit_logs_pkey" PRIMARY KEY ("id")
108
+ );
109
+
110
+ -- CreateTable
111
+ CREATE TABLE "actuate_documents" (
112
+ "id" TEXT NOT NULL,
113
+ "collection" TEXT NOT NULL,
114
+ "data" JSONB NOT NULL,
115
+ "status" "DocumentStatus" NOT NULL DEFAULT 'DRAFT',
116
+ "locale" TEXT,
117
+ "localeGroupId" TEXT,
118
+ "createdById" TEXT NOT NULL,
119
+ "updatedById" TEXT NOT NULL,
120
+ "publishedAt" TIMESTAMP(3),
121
+ "scheduledAt" TIMESTAMP(3),
122
+ "scheduledUnpublishAt" TIMESTAMP(3),
123
+ "deletedAt" TIMESTAMP(3),
124
+ "searchVector" TEXT,
125
+ "plainText" TEXT,
126
+ "contentHash" TEXT,
127
+ "structuredData" JSONB,
128
+ "contentGraph" JSONB,
129
+ "siteId" TEXT,
130
+ "templateId" TEXT,
131
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
132
+ "updatedAt" TIMESTAMP(3) NOT NULL,
133
+
134
+ CONSTRAINT "actuate_documents_pkey" PRIMARY KEY ("id")
135
+ );
136
+
137
+ -- CreateTable
138
+ CREATE TABLE "actuate_versions" (
139
+ "id" TEXT NOT NULL,
140
+ "documentId" TEXT NOT NULL,
141
+ "data" JSONB NOT NULL,
142
+ "changedById" TEXT NOT NULL,
143
+ "changeType" "ChangeType" NOT NULL,
144
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
145
+
146
+ CONSTRAINT "actuate_versions_pkey" PRIMARY KEY ("id")
147
+ );
148
+
149
+ -- CreateTable
150
+ CREATE TABLE "actuate_media" (
151
+ "id" TEXT NOT NULL,
152
+ "filename" TEXT NOT NULL,
153
+ "storageKey" TEXT NOT NULL,
154
+ "mimeType" TEXT NOT NULL,
155
+ "fileSize" INTEGER NOT NULL,
156
+ "width" INTEGER,
157
+ "height" INTEGER,
158
+ "altText" TEXT,
159
+ "title" TEXT,
160
+ "uploadedById" TEXT NOT NULL,
161
+ "focalPointX" DOUBLE PRECISION,
162
+ "focalPointY" DOUBLE PRECISION,
163
+ "blurHash" TEXT,
164
+ "aiAltText" TEXT,
165
+ "aiTags" JSONB,
166
+ "aiDescription" TEXT,
167
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
168
+ "updatedAt" TIMESTAMP(3) NOT NULL,
169
+
170
+ CONSTRAINT "actuate_media_pkey" PRIMARY KEY ("id")
171
+ );
172
+
173
+ -- CreateTable
174
+ CREATE TABLE "actuate_media_usages" (
175
+ "id" TEXT NOT NULL,
176
+ "mediaId" TEXT NOT NULL,
177
+ "documentId" TEXT NOT NULL,
178
+ "fieldName" TEXT NOT NULL,
179
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
180
+
181
+ CONSTRAINT "actuate_media_usages_pkey" PRIMARY KEY ("id")
182
+ );
183
+
184
+ -- CreateTable
185
+ CREATE TABLE "actuate_content_locks" (
186
+ "id" TEXT NOT NULL,
187
+ "documentId" TEXT NOT NULL,
188
+ "userId" TEXT NOT NULL,
189
+ "lockedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
190
+ "expiresAt" TIMESTAMP(3) NOT NULL,
191
+
192
+ CONSTRAINT "actuate_content_locks_pkey" PRIMARY KEY ("id")
193
+ );
194
+
195
+ -- CreateTable
196
+ CREATE TABLE "actuate_notifications" (
197
+ "id" TEXT NOT NULL,
198
+ "userId" TEXT NOT NULL,
199
+ "type" TEXT NOT NULL,
200
+ "title" TEXT NOT NULL,
201
+ "message" TEXT,
202
+ "link" TEXT,
203
+ "read" BOOLEAN NOT NULL DEFAULT false,
204
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
205
+
206
+ CONSTRAINT "actuate_notifications_pkey" PRIMARY KEY ("id")
207
+ );
208
+
209
+ -- CreateTable
210
+ CREATE TABLE "actuate_content_templates" (
211
+ "id" TEXT NOT NULL,
212
+ "name" TEXT NOT NULL,
213
+ "collection" TEXT NOT NULL,
214
+ "templateData" JSONB NOT NULL,
215
+ "createdById" TEXT NOT NULL,
216
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
217
+ "updatedAt" TIMESTAMP(3) NOT NULL,
218
+
219
+ CONSTRAINT "actuate_content_templates_pkey" PRIMARY KEY ("id")
220
+ );
221
+
222
+ -- CreateTable
223
+ CREATE TABLE "actuate_sites" (
224
+ "id" TEXT NOT NULL,
225
+ "domain" TEXT NOT NULL,
226
+ "name" TEXT NOT NULL,
227
+ "configOverrides" JSONB,
228
+ "isDefault" BOOLEAN NOT NULL DEFAULT false,
229
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
230
+ "updatedAt" TIMESTAMP(3) NOT NULL,
231
+
232
+ CONSTRAINT "actuate_sites_pkey" PRIMARY KEY ("id")
233
+ );
234
+
235
+ -- CreateTable
236
+ CREATE TABLE "actuate_workflow_states" (
237
+ "id" TEXT NOT NULL,
238
+ "documentId" TEXT NOT NULL,
239
+ "currentStep" INTEGER NOT NULL DEFAULT 0,
240
+ "assignedToId" TEXT,
241
+ "status" TEXT NOT NULL DEFAULT 'pending',
242
+ "definition" JSONB NOT NULL,
243
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
244
+ "updatedAt" TIMESTAMP(3) NOT NULL,
245
+
246
+ CONSTRAINT "actuate_workflow_states_pkey" PRIMARY KEY ("id")
247
+ );
248
+
249
+ -- CreateTable
250
+ CREATE TABLE "actuate_redirects" (
251
+ "id" TEXT NOT NULL,
252
+ "source" TEXT NOT NULL,
253
+ "destination" TEXT NOT NULL,
254
+ "statusCode" INTEGER NOT NULL DEFAULT 301,
255
+ "isRegex" BOOLEAN NOT NULL DEFAULT false,
256
+ "notes" TEXT,
257
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
258
+ "updatedAt" TIMESTAMP(3) NOT NULL,
259
+
260
+ CONSTRAINT "actuate_redirects_pkey" PRIMARY KEY ("id")
261
+ );
262
+
263
+ -- CreateTable
264
+ CREATE TABLE "actuate_form_submissions" (
265
+ "id" TEXT NOT NULL,
266
+ "formId" TEXT NOT NULL,
267
+ "data" JSONB NOT NULL,
268
+ "attribution" JSONB,
269
+ "status" TEXT NOT NULL DEFAULT 'new',
270
+ "submittedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
271
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
272
+
273
+ CONSTRAINT "actuate_form_submissions_pkey" PRIMARY KEY ("id")
274
+ );
275
+
276
+ -- CreateTable
277
+ CREATE TABLE "actuate_backup_records" (
278
+ "id" TEXT NOT NULL,
279
+ "filename" TEXT NOT NULL,
280
+ "storageKey" TEXT NOT NULL,
281
+ "sizeBytes" INTEGER NOT NULL,
282
+ "type" TEXT NOT NULL,
283
+ "metadata" JSONB,
284
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
285
+
286
+ CONSTRAINT "actuate_backup_records_pkey" PRIMARY KEY ("id")
287
+ );
288
+
289
+ -- CreateIndex
290
+ CREATE UNIQUE INDEX "actuate_users_email_key" ON "actuate_users"("email");
291
+
292
+ -- CreateIndex
293
+ CREATE UNIQUE INDEX "actuate_oauth_accounts_provider_providerAccountId_key" ON "actuate_oauth_accounts"("provider", "providerAccountId");
294
+
295
+ -- CreateIndex
296
+ CREATE UNIQUE INDEX "actuate_sessions_token_key" ON "actuate_sessions"("token");
297
+
298
+ -- CreateIndex
299
+ CREATE UNIQUE INDEX "actuate_api_keys_keyHash_key" ON "actuate_api_keys"("keyHash");
300
+
301
+ -- CreateIndex
302
+ CREATE INDEX "actuate_audit_logs_event_idx" ON "actuate_audit_logs"("event");
303
+
304
+ -- CreateIndex
305
+ CREATE INDEX "actuate_audit_logs_userId_idx" ON "actuate_audit_logs"("userId");
306
+
307
+ -- CreateIndex
308
+ CREATE INDEX "actuate_audit_logs_timestamp_idx" ON "actuate_audit_logs"("timestamp");
309
+
310
+ -- CreateIndex
311
+ CREATE INDEX "actuate_documents_collection_idx" ON "actuate_documents"("collection");
312
+
313
+ -- CreateIndex
314
+ CREATE INDEX "actuate_documents_status_idx" ON "actuate_documents"("status");
315
+
316
+ -- CreateIndex
317
+ CREATE INDEX "actuate_documents_deletedAt_idx" ON "actuate_documents"("deletedAt");
318
+
319
+ -- CreateIndex
320
+ CREATE INDEX "actuate_documents_publishedAt_idx" ON "actuate_documents"("publishedAt");
321
+
322
+ -- CreateIndex
323
+ CREATE UNIQUE INDEX "actuate_media_storageKey_key" ON "actuate_media"("storageKey");
324
+
325
+ -- CreateIndex
326
+ CREATE UNIQUE INDEX "actuate_sites_domain_key" ON "actuate_sites"("domain");
327
+
328
+ -- CreateIndex
329
+ CREATE UNIQUE INDEX "actuate_workflow_states_documentId_key" ON "actuate_workflow_states"("documentId");
330
+
331
+ -- CreateIndex
332
+ CREATE UNIQUE INDEX "actuate_redirects_source_key" ON "actuate_redirects"("source");
333
+
334
+ -- CreateIndex
335
+ CREATE INDEX "actuate_form_submissions_formId_idx" ON "actuate_form_submissions"("formId");
336
+
337
+ -- CreateIndex
338
+ CREATE INDEX "actuate_form_submissions_status_idx" ON "actuate_form_submissions"("status");
339
+
340
+ -- AddForeignKey
341
+ ALTER TABLE "actuate_oauth_accounts" ADD CONSTRAINT "actuate_oauth_accounts_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
342
+
343
+ -- AddForeignKey
344
+ ALTER TABLE "actuate_sessions" ADD CONSTRAINT "actuate_sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
345
+
346
+ -- AddForeignKey
347
+ ALTER TABLE "actuate_api_keys" ADD CONSTRAINT "actuate_api_keys_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
348
+
349
+ -- AddForeignKey
350
+ ALTER TABLE "actuate_documents" ADD CONSTRAINT "actuate_documents_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
351
+
352
+ -- AddForeignKey
353
+ ALTER TABLE "actuate_documents" ADD CONSTRAINT "actuate_documents_updatedById_fkey" FOREIGN KEY ("updatedById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
354
+
355
+ -- AddForeignKey
356
+ ALTER TABLE "actuate_versions" ADD CONSTRAINT "actuate_versions_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "actuate_documents"("id") ON DELETE CASCADE ON UPDATE CASCADE;
357
+
358
+ -- AddForeignKey
359
+ ALTER TABLE "actuate_versions" ADD CONSTRAINT "actuate_versions_changedById_fkey" FOREIGN KEY ("changedById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
360
+
361
+ -- AddForeignKey
362
+ ALTER TABLE "actuate_media" ADD CONSTRAINT "actuate_media_uploadedById_fkey" FOREIGN KEY ("uploadedById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
363
+
364
+ -- AddForeignKey
365
+ ALTER TABLE "actuate_media_usages" ADD CONSTRAINT "actuate_media_usages_mediaId_fkey" FOREIGN KEY ("mediaId") REFERENCES "actuate_media"("id") ON DELETE CASCADE ON UPDATE CASCADE;
366
+
367
+ -- AddForeignKey
368
+ ALTER TABLE "actuate_media_usages" ADD CONSTRAINT "actuate_media_usages_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "actuate_documents"("id") ON DELETE CASCADE ON UPDATE CASCADE;
369
+
370
+ -- AddForeignKey
371
+ ALTER TABLE "actuate_content_locks" ADD CONSTRAINT "actuate_content_locks_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "actuate_documents"("id") ON DELETE CASCADE ON UPDATE CASCADE;
372
+
373
+ -- AddForeignKey
374
+ ALTER TABLE "actuate_content_locks" ADD CONSTRAINT "actuate_content_locks_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
375
+
376
+ -- AddForeignKey
377
+ ALTER TABLE "actuate_notifications" ADD CONSTRAINT "actuate_notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "actuate_users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
378
+
379
+ -- AddForeignKey
380
+ ALTER TABLE "actuate_content_templates" ADD CONSTRAINT "actuate_content_templates_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "actuate_users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
381
+
382
+ -- AddForeignKey
383
+ ALTER TABLE "actuate_workflow_states" ADD CONSTRAINT "actuate_workflow_states_assignedToId_fkey" FOREIGN KEY ("assignedToId") REFERENCES "actuate_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
384
+