create-aphex 0.1.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.
- package/README.md +56 -0
- package/dist/index.js +160 -0
- package/package.json +40 -0
- package/templates/base/.dockerignore +44 -0
- package/templates/base/.env.example +38 -0
- package/templates/base/CHANGELOG.md +118 -0
- package/templates/base/Dockerfile +69 -0
- package/templates/base/README.md +147 -0
- package/templates/base/aphex.config.ts +45 -0
- package/templates/base/docker-compose.yml +31 -0
- package/templates/base/drizzle/0000_tiny_redwing.sql +226 -0
- package/templates/base/drizzle/meta/0000_snapshot.json +1379 -0
- package/templates/base/drizzle/meta/_journal.json +13 -0
- package/templates/base/drizzle.config.ts +17 -0
- package/templates/base/package.json +81 -0
- package/templates/base/prod.docker-compose.yml +61 -0
- package/templates/base/src/app.css +32 -0
- package/templates/base/src/app.d.ts +26 -0
- package/templates/base/src/app.html +11 -0
- package/templates/base/src/hooks.server.ts +52 -0
- package/templates/base/src/lib/assets/favicon.svg +5 -0
- package/templates/base/src/lib/auth-client.ts +19 -0
- package/templates/base/src/lib/index.ts +1 -0
- package/templates/base/src/lib/schemaTypes/index.ts +11 -0
- package/templates/base/src/lib/schemaTypes/post.ts +47 -0
- package/templates/base/src/lib/server/auth/better-auth/instance.ts +165 -0
- package/templates/base/src/lib/server/auth/index.ts +25 -0
- package/templates/base/src/lib/server/auth/instance.ts +7 -0
- package/templates/base/src/lib/server/auth/service.ts +486 -0
- package/templates/base/src/lib/server/cache/index.ts +10 -0
- package/templates/base/src/lib/server/db/auth-schema.ts +86 -0
- package/templates/base/src/lib/server/db/cms-schema.ts +23 -0
- package/templates/base/src/lib/server/db/index.ts +55 -0
- package/templates/base/src/lib/server/db/schema.ts +3 -0
- package/templates/base/src/lib/server/email/components/EmailLayout.svelte +24 -0
- package/templates/base/src/lib/server/email/components/EmailVerification.svelte +26 -0
- package/templates/base/src/lib/server/email/components/Invitation.svelte +30 -0
- package/templates/base/src/lib/server/email/components/PasswordReset.svelte +28 -0
- package/templates/base/src/lib/server/email/index.ts +28 -0
- package/templates/base/src/lib/server/email/invitation-hook.ts +56 -0
- package/templates/base/src/lib/server/email/renderer.ts +13 -0
- package/templates/base/src/lib/server/email/templates/email-verification.ts +8 -0
- package/templates/base/src/lib/server/email/templates/invitation.ts +8 -0
- package/templates/base/src/lib/server/email/templates/password-reset.ts +7 -0
- package/templates/base/src/lib/server/services/organization.ts +68 -0
- package/templates/base/src/lib/server/storage/index.ts +28 -0
- package/templates/base/src/lib/stores/activeTab.svelte.ts +14 -0
- package/templates/base/src/lib/utils/imageBuilder.ts +3 -0
- package/templates/base/src/lib/utils/slug.ts +33 -0
- package/templates/base/src/routes/(protected)/admin/+layout.server.ts +86 -0
- package/templates/base/src/routes/(protected)/admin/+layout.svelte +78 -0
- package/templates/base/src/routes/(protected)/admin/+page.server.ts +60 -0
- package/templates/base/src/routes/(protected)/admin/+page.svelte +34 -0
- package/templates/base/src/routes/(protected)/admin/organizations/+page.server.ts +39 -0
- package/templates/base/src/routes/(protected)/admin/organizations/+page.svelte +31 -0
- package/templates/base/src/routes/(protected)/admin/organizations/_components/CreateOrganization.svelte +141 -0
- package/templates/base/src/routes/(protected)/admin/organizations/_components/OrganizationsList.svelte +102 -0
- package/templates/base/src/routes/(protected)/admin/settings/+layout.server.ts +42 -0
- package/templates/base/src/routes/(protected)/admin/settings/+layout.svelte +116 -0
- package/templates/base/src/routes/(protected)/admin/settings/+page.server.ts +16 -0
- package/templates/base/src/routes/(protected)/admin/settings/+page.svelte +32 -0
- package/templates/base/src/routes/(protected)/admin/settings/_components/AccountSettings.svelte +177 -0
- package/templates/base/src/routes/(protected)/admin/settings/_components/ApiKeysSettings.svelte +472 -0
- package/templates/base/src/routes/(protected)/admin/settings/_components/OrganizationsSettings.svelte +182 -0
- package/templates/base/src/routes/(protected)/admin/settings/account/+page.server.ts +25 -0
- package/templates/base/src/routes/(protected)/admin/settings/account/+page.svelte +23 -0
- package/templates/base/src/routes/(protected)/admin/settings/api-keys/+page.server.ts +54 -0
- package/templates/base/src/routes/(protected)/admin/settings/api-keys/+page.svelte +14 -0
- package/templates/base/src/routes/(protected)/admin/settings/members/+page.server.ts +31 -0
- package/templates/base/src/routes/(protected)/admin/settings/members/+page.svelte +338 -0
- package/templates/base/src/routes/(protected)/admin/settings/roles/+page.server.ts +17 -0
- package/templates/base/src/routes/(protected)/admin/settings/roles/+page.svelte +339 -0
- package/templates/base/src/routes/+layout.svelte +12 -0
- package/templates/base/src/routes/+page.svelte +2 -0
- package/templates/base/src/routes/api/[...slug]/+server.ts +35 -0
- package/templates/base/src/routes/api/instance-settings/+server.ts +70 -0
- package/templates/base/src/routes/api/invitations/+server.ts +54 -0
- package/templates/base/src/routes/api/invitations/[id]/accept/+server.ts +54 -0
- package/templates/base/src/routes/api/invitations/[id]/reject/+server.ts +49 -0
- package/templates/base/src/routes/api/settings/api-keys/+server.ts +57 -0
- package/templates/base/src/routes/api/settings/api-keys/[id]/+server.ts +53 -0
- package/templates/base/src/routes/god-mode/+layout.server.ts +32 -0
- package/templates/base/src/routes/god-mode/+layout.svelte +155 -0
- package/templates/base/src/routes/god-mode/+page.server.ts +10 -0
- package/templates/base/src/routes/god-mode/+page.svelte +32 -0
- package/templates/base/src/routes/god-mode/_components/CreateOrganization.svelte +141 -0
- package/templates/base/src/routes/god-mode/_components/OrganizationsList.svelte +169 -0
- package/templates/base/src/routes/god-mode/organizations/+page.server.ts +43 -0
- package/templates/base/src/routes/god-mode/organizations/+page.svelte +74 -0
- package/templates/base/src/routes/invitations/+page.server.ts +48 -0
- package/templates/base/src/routes/invitations/+page.svelte +264 -0
- package/templates/base/src/routes/invite/[token]/+page.server.ts +59 -0
- package/templates/base/src/routes/invite/[token]/+page.svelte +109 -0
- package/templates/base/src/routes/login/+page.server.ts +14 -0
- package/templates/base/src/routes/login/+page.svelte +332 -0
- package/templates/base/src/routes/media/[id]/[filename]/+server.ts +3 -0
- package/templates/base/src/routes/reset-password/[token]/+page.server.ts +15 -0
- package/templates/base/src/routes/reset-password/[token]/+page.svelte +179 -0
- package/templates/base/src/routes/verify-email/+page.svelte +41 -0
- package/templates/base/static/images/aphex-darkmode.png +0 -0
- package/templates/base/static/images/aphex-lightmode.png +0 -0
- package/templates/base/static/robots.txt +3 -0
- package/templates/base/svelte.config.js +19 -0
- package/templates/base/tsconfig.json +20 -0
- package/templates/base/vite.config.ts +138 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Aphex CMS Configuration
|
|
2
|
+
// This file defines the CMS configuration for your application
|
|
3
|
+
import { createCMSConfig } from '@aphexcms/cms-core/server';
|
|
4
|
+
import { schemaTypes } from './src/lib/schemaTypes/index.js';
|
|
5
|
+
import { authProvider } from './src/lib/server/auth';
|
|
6
|
+
import { db } from './src/lib/server/db';
|
|
7
|
+
import { email } from './src/lib/server/email';
|
|
8
|
+
import { registerInvitationEmailHook } from './src/lib/server/email/invitation-hook';
|
|
9
|
+
import { storageAdapter } from './src/lib/server/storage';
|
|
10
|
+
import { cacheAdapter } from './src/lib/server/cache';
|
|
11
|
+
|
|
12
|
+
export default createCMSConfig({
|
|
13
|
+
schemaTypes,
|
|
14
|
+
|
|
15
|
+
// Provide the shared database and storage adapter instances directly.
|
|
16
|
+
// These are created once in their respective /lib/server/.. files.
|
|
17
|
+
database: db,
|
|
18
|
+
storage: storageAdapter,
|
|
19
|
+
email,
|
|
20
|
+
cache: cacheAdapter,
|
|
21
|
+
|
|
22
|
+
auth: {
|
|
23
|
+
provider: authProvider,
|
|
24
|
+
loginUrl: '/login' // Redirect here when unauthenticated
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
// GraphQL is built-in and enabled by default.
|
|
28
|
+
// Set to false to disable, or pass config: { defaultPerspective: 'draft', path: '/api/graphql' }
|
|
29
|
+
graphql: {
|
|
30
|
+
defaultPerspective: 'draft',
|
|
31
|
+
path: '/api/aphex-graphql'
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
customization: {
|
|
35
|
+
branding: {
|
|
36
|
+
title: 'Aphex'
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
// Wrap built-in handlers with side effects (e.g. send the invitation
|
|
41
|
+
// email after the invite is created). Runs BEFORE built-in routes mount.
|
|
42
|
+
api: (app) => {
|
|
43
|
+
registerInvitationEmailHook(app);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
services:
|
|
2
|
+
db:
|
|
3
|
+
image: postgres:18
|
|
4
|
+
restart: always
|
|
5
|
+
env_file:
|
|
6
|
+
- .env
|
|
7
|
+
ports:
|
|
8
|
+
- ${PG_PORT:-5432}:5432
|
|
9
|
+
environment:
|
|
10
|
+
POSTGRES_USER: ${PG_USER:-root}
|
|
11
|
+
POSTGRES_PASSWORD: ${PG_PASSWORD:-mysecretpassword}
|
|
12
|
+
POSTGRES_DB: ${PG_DATABASE:-local}
|
|
13
|
+
volumes:
|
|
14
|
+
- pgdata:/var/lib/postgresql
|
|
15
|
+
|
|
16
|
+
mailpit:
|
|
17
|
+
image: axllent/mailpit
|
|
18
|
+
ports:
|
|
19
|
+
- 8025:8025
|
|
20
|
+
- 1025:1025
|
|
21
|
+
environment:
|
|
22
|
+
MP_MAX_MESSAGES: 5000
|
|
23
|
+
MP_DATABASE: /data/mailpit.db
|
|
24
|
+
MP_SMTP_AUTH_ACCEPT_ANY: 1
|
|
25
|
+
MP_SMTP_AUTH_ALLOW_INSECURE: 1
|
|
26
|
+
volumes:
|
|
27
|
+
- mailpit_data:/data
|
|
28
|
+
|
|
29
|
+
volumes:
|
|
30
|
+
pgdata:
|
|
31
|
+
mailpit_data:
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
CREATE TYPE "public"."document_status" AS ENUM('draft', 'published', 'unpublished');--> statement-breakpoint
|
|
2
|
+
CREATE TYPE "public"."schema_type" AS ENUM('document', 'object');--> statement-breakpoint
|
|
3
|
+
CREATE TYPE "public"."version_event" AS ENUM('draft', 'publish');--> statement-breakpoint
|
|
4
|
+
CREATE TABLE "cms_assets" (
|
|
5
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
6
|
+
"organization_id" uuid NOT NULL,
|
|
7
|
+
"asset_type" varchar(20) NOT NULL,
|
|
8
|
+
"filename" varchar(255) NOT NULL,
|
|
9
|
+
"original_filename" varchar(255) NOT NULL,
|
|
10
|
+
"mime_type" varchar(100) NOT NULL,
|
|
11
|
+
"size" integer NOT NULL,
|
|
12
|
+
"url" text NOT NULL,
|
|
13
|
+
"path" text NOT NULL,
|
|
14
|
+
"storage_adapter" varchar(50) DEFAULT 'local' NOT NULL,
|
|
15
|
+
"width" integer,
|
|
16
|
+
"height" integer,
|
|
17
|
+
"metadata" jsonb,
|
|
18
|
+
"title" varchar(255),
|
|
19
|
+
"description" text,
|
|
20
|
+
"alt" text,
|
|
21
|
+
"credit_line" text,
|
|
22
|
+
"created_by" text,
|
|
23
|
+
"updated_by" text,
|
|
24
|
+
"created_at" timestamp DEFAULT now(),
|
|
25
|
+
"updated_at" timestamp DEFAULT now()
|
|
26
|
+
);
|
|
27
|
+
--> statement-breakpoint
|
|
28
|
+
ALTER TABLE "cms_assets" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
29
|
+
CREATE TABLE "cms_document_versions" (
|
|
30
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
31
|
+
"document_id" uuid NOT NULL,
|
|
32
|
+
"organization_id" uuid NOT NULL,
|
|
33
|
+
"version_number" integer NOT NULL,
|
|
34
|
+
"event_type" "version_event" NOT NULL,
|
|
35
|
+
"data" jsonb NOT NULL,
|
|
36
|
+
"created_by" text,
|
|
37
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
38
|
+
CONSTRAINT "cms_document_versions_document_id_version_number_unique" UNIQUE("document_id","version_number")
|
|
39
|
+
);
|
|
40
|
+
--> statement-breakpoint
|
|
41
|
+
ALTER TABLE "cms_document_versions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
42
|
+
CREATE TABLE "cms_documents" (
|
|
43
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
44
|
+
"organization_id" uuid NOT NULL,
|
|
45
|
+
"type" varchar(100) NOT NULL,
|
|
46
|
+
"status" "document_status" DEFAULT 'draft',
|
|
47
|
+
"draft_data" jsonb,
|
|
48
|
+
"published_data" jsonb,
|
|
49
|
+
"published_hash" varchar(20),
|
|
50
|
+
"created_by" text,
|
|
51
|
+
"updated_by" text,
|
|
52
|
+
"published_at" timestamp,
|
|
53
|
+
"created_at" timestamp DEFAULT now(),
|
|
54
|
+
"updated_at" timestamp DEFAULT now()
|
|
55
|
+
);
|
|
56
|
+
--> statement-breakpoint
|
|
57
|
+
ALTER TABLE "cms_documents" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
58
|
+
CREATE TABLE "cms_instance_settings" (
|
|
59
|
+
"id" text PRIMARY KEY DEFAULT 'default' NOT NULL,
|
|
60
|
+
"settings" jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
61
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
62
|
+
);
|
|
63
|
+
--> statement-breakpoint
|
|
64
|
+
CREATE TABLE "cms_invitations" (
|
|
65
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
66
|
+
"organization_id" uuid NOT NULL,
|
|
67
|
+
"email" varchar(255) NOT NULL,
|
|
68
|
+
"role" text NOT NULL,
|
|
69
|
+
"token" text NOT NULL,
|
|
70
|
+
"invited_by" text NOT NULL,
|
|
71
|
+
"expires_at" timestamp NOT NULL,
|
|
72
|
+
"accepted_at" timestamp,
|
|
73
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
74
|
+
CONSTRAINT "cms_invitations_token_unique" UNIQUE("token")
|
|
75
|
+
);
|
|
76
|
+
--> statement-breakpoint
|
|
77
|
+
CREATE TABLE "cms_organization_members" (
|
|
78
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
79
|
+
"organization_id" uuid NOT NULL,
|
|
80
|
+
"user_id" text NOT NULL,
|
|
81
|
+
"role" text NOT NULL,
|
|
82
|
+
"preferences" jsonb,
|
|
83
|
+
"invitation_id" uuid,
|
|
84
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
85
|
+
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
86
|
+
CONSTRAINT "cms_organization_members_organization_id_user_id_unique" UNIQUE("organization_id","user_id")
|
|
87
|
+
);
|
|
88
|
+
--> statement-breakpoint
|
|
89
|
+
CREATE TABLE "cms_organizations" (
|
|
90
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
91
|
+
"name" varchar(200) NOT NULL,
|
|
92
|
+
"slug" varchar(100) NOT NULL,
|
|
93
|
+
"parent_organization_id" uuid,
|
|
94
|
+
"metadata" jsonb,
|
|
95
|
+
"created_by" text NOT NULL,
|
|
96
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
97
|
+
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
98
|
+
CONSTRAINT "cms_organizations_slug_unique" UNIQUE("slug")
|
|
99
|
+
);
|
|
100
|
+
--> statement-breakpoint
|
|
101
|
+
CREATE TABLE "cms_roles" (
|
|
102
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
103
|
+
"organization_id" uuid NOT NULL,
|
|
104
|
+
"name" varchar(100) NOT NULL,
|
|
105
|
+
"description" text,
|
|
106
|
+
"capabilities" jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
107
|
+
"is_built_in" text DEFAULT 'false' NOT NULL,
|
|
108
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
109
|
+
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
110
|
+
CONSTRAINT "cms_roles_organization_id_name_unique" UNIQUE("organization_id","name")
|
|
111
|
+
);
|
|
112
|
+
--> statement-breakpoint
|
|
113
|
+
CREATE TABLE "cms_schema_types" (
|
|
114
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
115
|
+
"name" varchar(100) NOT NULL,
|
|
116
|
+
"title" varchar(200) NOT NULL,
|
|
117
|
+
"type" "schema_type" NOT NULL,
|
|
118
|
+
"description" text,
|
|
119
|
+
"fields" jsonb NOT NULL,
|
|
120
|
+
"created_at" timestamp DEFAULT now(),
|
|
121
|
+
"updated_at" timestamp DEFAULT now(),
|
|
122
|
+
CONSTRAINT "cms_schema_types_name_unique" UNIQUE("name")
|
|
123
|
+
);
|
|
124
|
+
--> statement-breakpoint
|
|
125
|
+
CREATE TABLE "cms_user_profiles" (
|
|
126
|
+
"user_id" text PRIMARY KEY NOT NULL,
|
|
127
|
+
"role" text DEFAULT 'editor' NOT NULL,
|
|
128
|
+
"preferences" jsonb,
|
|
129
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
130
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
131
|
+
);
|
|
132
|
+
--> statement-breakpoint
|
|
133
|
+
CREATE TABLE "cms_user_sessions" (
|
|
134
|
+
"user_id" text PRIMARY KEY NOT NULL,
|
|
135
|
+
"active_organization_id" uuid,
|
|
136
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
137
|
+
);
|
|
138
|
+
--> statement-breakpoint
|
|
139
|
+
CREATE TABLE "account" (
|
|
140
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
141
|
+
"account_id" text NOT NULL,
|
|
142
|
+
"provider_id" text NOT NULL,
|
|
143
|
+
"user_id" text NOT NULL,
|
|
144
|
+
"access_token" text,
|
|
145
|
+
"refresh_token" text,
|
|
146
|
+
"id_token" text,
|
|
147
|
+
"access_token_expires_at" timestamp,
|
|
148
|
+
"refresh_token_expires_at" timestamp,
|
|
149
|
+
"scope" text,
|
|
150
|
+
"password" text,
|
|
151
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
152
|
+
"updated_at" timestamp NOT NULL
|
|
153
|
+
);
|
|
154
|
+
--> statement-breakpoint
|
|
155
|
+
CREATE TABLE "apikey" (
|
|
156
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
157
|
+
"config_id" text DEFAULT 'default' NOT NULL,
|
|
158
|
+
"name" text,
|
|
159
|
+
"start" text,
|
|
160
|
+
"prefix" text,
|
|
161
|
+
"key" text NOT NULL,
|
|
162
|
+
"reference_id" text NOT NULL,
|
|
163
|
+
"refill_interval" integer,
|
|
164
|
+
"refill_amount" integer,
|
|
165
|
+
"last_refill_at" timestamp,
|
|
166
|
+
"enabled" boolean DEFAULT true,
|
|
167
|
+
"rate_limit_enabled" boolean DEFAULT true,
|
|
168
|
+
"rate_limit_time_window" integer DEFAULT 86400000,
|
|
169
|
+
"rate_limit_max" integer DEFAULT 10000,
|
|
170
|
+
"request_count" integer DEFAULT 0,
|
|
171
|
+
"remaining" integer,
|
|
172
|
+
"last_request" timestamp,
|
|
173
|
+
"expires_at" timestamp,
|
|
174
|
+
"created_at" timestamp NOT NULL,
|
|
175
|
+
"updated_at" timestamp NOT NULL,
|
|
176
|
+
"permissions" text,
|
|
177
|
+
"metadata" text
|
|
178
|
+
);
|
|
179
|
+
--> statement-breakpoint
|
|
180
|
+
CREATE TABLE "session" (
|
|
181
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
182
|
+
"expires_at" timestamp NOT NULL,
|
|
183
|
+
"token" text NOT NULL,
|
|
184
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
185
|
+
"updated_at" timestamp NOT NULL,
|
|
186
|
+
"ip_address" text,
|
|
187
|
+
"user_agent" text,
|
|
188
|
+
"user_id" text NOT NULL,
|
|
189
|
+
CONSTRAINT "session_token_unique" UNIQUE("token")
|
|
190
|
+
);
|
|
191
|
+
--> statement-breakpoint
|
|
192
|
+
CREATE TABLE "user" (
|
|
193
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
194
|
+
"name" text NOT NULL,
|
|
195
|
+
"email" text NOT NULL,
|
|
196
|
+
"email_verified" boolean DEFAULT false NOT NULL,
|
|
197
|
+
"image" text,
|
|
198
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
199
|
+
"updated_at" timestamp DEFAULT now() NOT NULL,
|
|
200
|
+
CONSTRAINT "user_email_unique" UNIQUE("email")
|
|
201
|
+
);
|
|
202
|
+
--> statement-breakpoint
|
|
203
|
+
CREATE TABLE "verification" (
|
|
204
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
205
|
+
"identifier" text NOT NULL,
|
|
206
|
+
"value" text NOT NULL,
|
|
207
|
+
"expires_at" timestamp NOT NULL,
|
|
208
|
+
"created_at" timestamp DEFAULT now() NOT NULL,
|
|
209
|
+
"updated_at" timestamp DEFAULT now() NOT NULL
|
|
210
|
+
);
|
|
211
|
+
--> statement-breakpoint
|
|
212
|
+
ALTER TABLE "cms_assets" ADD CONSTRAINT "cms_assets_organization_id_cms_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."cms_organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
213
|
+
ALTER TABLE "cms_document_versions" ADD CONSTRAINT "cms_document_versions_document_id_cms_documents_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."cms_documents"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
214
|
+
ALTER TABLE "cms_document_versions" ADD CONSTRAINT "cms_document_versions_organization_id_cms_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."cms_organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
215
|
+
ALTER TABLE "cms_documents" ADD CONSTRAINT "cms_documents_organization_id_cms_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."cms_organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
216
|
+
ALTER TABLE "cms_invitations" ADD CONSTRAINT "cms_invitations_organization_id_cms_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."cms_organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
217
|
+
ALTER TABLE "cms_organization_members" ADD CONSTRAINT "cms_organization_members_organization_id_cms_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."cms_organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
218
|
+
ALTER TABLE "cms_organization_members" ADD CONSTRAINT "cms_organization_members_invitation_id_cms_invitations_id_fk" FOREIGN KEY ("invitation_id") REFERENCES "public"."cms_invitations"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
219
|
+
ALTER TABLE "cms_organizations" ADD CONSTRAINT "cms_organizations_parent_organization_id_cms_organizations_id_fk" FOREIGN KEY ("parent_organization_id") REFERENCES "public"."cms_organizations"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
|
|
220
|
+
ALTER TABLE "cms_roles" ADD CONSTRAINT "cms_roles_organization_id_cms_organizations_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."cms_organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
221
|
+
ALTER TABLE "cms_user_sessions" ADD CONSTRAINT "cms_user_sessions_active_organization_id_cms_organizations_id_fk" FOREIGN KEY ("active_organization_id") REFERENCES "public"."cms_organizations"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
222
|
+
ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
223
|
+
ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
224
|
+
CREATE POLICY "assets_org_isolation" ON "cms_assets" AS PERMISSIVE FOR ALL TO public USING ((current_setting('app.override_access', true) = 'true') OR (current_setting('app.organization_id', true) <> '' AND organization_id IN (SELECT current_setting('app.organization_id', true)::uuid UNION SELECT id FROM cms_organizations WHERE parent_organization_id = current_setting('app.organization_id', true)::uuid))) WITH CHECK ((current_setting('app.override_access', true) = 'true') OR (current_setting('app.organization_id', true) <> '' AND organization_id = current_setting('app.organization_id', true)::uuid));--> statement-breakpoint
|
|
225
|
+
CREATE POLICY "document_versions_org_isolation" ON "cms_document_versions" AS PERMISSIVE FOR ALL TO public USING ((current_setting('app.override_access', true) = 'true') OR (current_setting('app.organization_id', true) <> '' AND organization_id IN (SELECT current_setting('app.organization_id', true)::uuid UNION SELECT id FROM cms_organizations WHERE parent_organization_id = current_setting('app.organization_id', true)::uuid))) WITH CHECK ((current_setting('app.override_access', true) = 'true') OR (current_setting('app.organization_id', true) <> '' AND organization_id = current_setting('app.organization_id', true)::uuid));--> statement-breakpoint
|
|
226
|
+
CREATE POLICY "documents_org_isolation" ON "cms_documents" AS PERMISSIVE FOR ALL TO public USING ((current_setting('app.override_access', true) = 'true') OR (current_setting('app.organization_id', true) <> '' AND organization_id IN (SELECT current_setting('app.organization_id', true)::uuid UNION SELECT id FROM cms_organizations WHERE parent_organization_id = current_setting('app.organization_id', true)::uuid))) WITH CHECK ((current_setting('app.override_access', true) = 'true') OR (current_setting('app.organization_id', true) <> '' AND organization_id = current_setting('app.organization_id', true)::uuid));
|