From 04cf393d92e991e6751eb385cb38fbd2268b4548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=9C=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Sat, 9 May 2026 20:13:26 +0300 Subject: [PATCH 1/5] feat: added Neon DB --- .eslintignore | 1 + .gitignore | 3 + bun.lockb | Bin 349313 -> 400411 bytes drizzle.config.ts | 12 + drizzle/0000_wooden_mercury.sql | 135 +++ drizzle/meta/0000_snapshot.json | 913 ++++++++++++++++++++ drizzle/meta/_journal.json | 13 + package.json | 12 +- src/api/core/collections/index.ts | 2 +- src/api/core/collections/template.ts | 4 +- src/api/core/collections/user.ts | 2 + src/app/(dashboard)/editor/page.tsx | 7 +- src/lib/app/actions.ts | 21 + src/lib/app/db/index.ts | 5 + src/lib/app/db/relations.ts | 75 ++ src/lib/app/db/schema.ts | 276 ++++++ src/lib/app/layout.tsx | 1 + src/lib/pages/my-templates/my-templates.tsx | 10 +- src/proxy.ts | 10 +- 19 files changed, 1492 insertions(+), 10 deletions(-) create mode 100644 .eslintignore create mode 100644 drizzle.config.ts create mode 100644 drizzle/0000_wooden_mercury.sql create mode 100644 drizzle/meta/0000_snapshot.json create mode 100644 drizzle/meta/_journal.json create mode 100644 src/lib/app/actions.ts create mode 100644 src/lib/app/db/index.ts create mode 100644 src/lib/app/db/relations.ts create mode 100644 src/lib/app/db/schema.ts diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..ccef9a4 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +/src/lib/app/db/* diff --git a/.gitignore b/.gitignore index 42208aa..f51e192 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,7 @@ next-env.d.ts # webstorm .idea +# db /src/api/schema +/drizzle/relations.ts +/drizzle/schema.ts diff --git a/bun.lockb b/bun.lockb index d78215eb5048faceade34fa386c141174054f44d..dec4fb4ed828b9229338c08ef0c085ffc6ef1cb8 100755 GIT binary patch delta 107077 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 E0ZkAqApigX diff --git a/drizzle.config.ts b/drizzle.config.ts new file mode 100644 index 0000000..db882ca --- /dev/null +++ b/drizzle.config.ts @@ -0,0 +1,12 @@ +import 'dotenv/config' +import type { Config } from 'drizzle-kit' + +export default { + schema: './app/db/schema.ts', + out: './drizzle', + dialect: 'postgresql', + schemaFilter: ['public', 'neon_auth'], + dbCredentials: { + url: process.env.NEON_DATABASE_URL! + } +} satisfies Config diff --git a/drizzle/0000_wooden_mercury.sql b/drizzle/0000_wooden_mercury.sql new file mode 100644 index 0000000..4cafc96 --- /dev/null +++ b/drizzle/0000_wooden_mercury.sql @@ -0,0 +1,135 @@ +-- Current sql file was generated after introspecting the database +-- If you want to run this migration please uncomment this code before executing migrations +/* +CREATE SCHEMA "neon_auth"; +--> statement-breakpoint +CREATE TABLE "neon_auth"."invitation" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "organizationId" uuid NOT NULL, + "email" text NOT NULL, + "role" text, + "status" text NOT NULL, + "expiresAt" timestamp with time zone NOT NULL, + "createdAt" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + "inviterId" uuid NOT NULL +); +--> statement-breakpoint +CREATE TABLE "neon_auth"."user" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "email" text NOT NULL, + "emailVerified" boolean NOT NULL, + "image" text, + "createdAt" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + "role" text, + "banned" boolean, + "banReason" text, + "banExpires" timestamp with time zone, + CONSTRAINT "user_email_key" UNIQUE("email") +); +--> statement-breakpoint +CREATE TABLE "neon_auth"."session" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "expiresAt" timestamp with time zone NOT NULL, + "token" text NOT NULL, + "createdAt" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp with time zone NOT NULL, + "ipAddress" text, + "userAgent" text, + "userId" uuid NOT NULL, + "impersonatedBy" text, + "activeOrganizationId" text, + CONSTRAINT "session_token_key" UNIQUE("token") +); +--> statement-breakpoint +CREATE TABLE "neon_auth"."organization" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "slug" text NOT NULL, + "logo" text, + "createdAt" timestamp with time zone NOT NULL, + "metadata" text, + CONSTRAINT "organization_slug_key" UNIQUE("slug") +); +--> statement-breakpoint +CREATE TABLE "neon_auth"."account" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "accountId" text NOT NULL, + "providerId" text NOT NULL, + "userId" uuid NOT NULL, + "accessToken" text, + "refreshToken" text, + "idToken" text, + "accessTokenExpiresAt" timestamp with time zone, + "refreshTokenExpiresAt" timestamp with time zone, + "scope" text, + "password" text, + "createdAt" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp with time zone NOT NULL +); +--> statement-breakpoint +CREATE TABLE "neon_auth"."verification" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "identifier" text NOT NULL, + "value" text NOT NULL, + "expiresAt" timestamp with time zone NOT NULL, + "createdAt" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updatedAt" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL +); +--> statement-breakpoint +CREATE TABLE "neon_auth"."jwks" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "publicKey" text NOT NULL, + "privateKey" text NOT NULL, + "createdAt" timestamp with time zone NOT NULL, + "expiresAt" timestamp with time zone +); +--> statement-breakpoint +CREATE TABLE "neon_auth"."member" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "organizationId" uuid NOT NULL, + "userId" uuid NOT NULL, + "role" text NOT NULL, + "createdAt" timestamp with time zone NOT NULL +); +--> statement-breakpoint +CREATE TABLE "neon_auth"."project_config" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "endpoint_id" text NOT NULL, + "created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + "updated_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + "trusted_origins" jsonb NOT NULL, + "social_providers" jsonb NOT NULL, + "email_provider" jsonb, + "email_and_password" jsonb, + "allow_localhost" boolean NOT NULL, + CONSTRAINT "project_config_endpoint_id_key" UNIQUE("endpoint_id") +); +--> statement-breakpoint +CREATE TABLE "test" ( + "id" uuid PRIMARY KEY NOT NULL, + "user_id" text NOT NULL, + "data" text, + "is_published" boolean DEFAULT false NOT NULL +); +--> statement-breakpoint +ALTER TABLE "test" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +ALTER TABLE "neon_auth"."invitation" ADD CONSTRAINT "invitation_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "neon_auth"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "neon_auth"."invitation" ADD CONSTRAINT "invitation_inviterId_fkey" FOREIGN KEY ("inviterId") REFERENCES "neon_auth"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "neon_auth"."session" ADD CONSTRAINT "session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "neon_auth"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "neon_auth"."account" ADD CONSTRAINT "account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "neon_auth"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "neon_auth"."member" ADD CONSTRAINT "member_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "neon_auth"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "neon_auth"."member" ADD CONSTRAINT "member_userId_fkey" FOREIGN KEY ("userId") REFERENCES "neon_auth"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +CREATE INDEX "invitation_email_idx" ON "neon_auth"."invitation" USING btree ("email" text_ops);--> statement-breakpoint +CREATE INDEX "invitation_organizationId_idx" ON "neon_auth"."invitation" USING btree ("organizationId" uuid_ops);--> statement-breakpoint +CREATE INDEX "session_userId_idx" ON "neon_auth"."session" USING btree ("userId" uuid_ops);--> statement-breakpoint +CREATE UNIQUE INDEX "organization_slug_uidx" ON "neon_auth"."organization" USING btree ("slug" text_ops);--> statement-breakpoint +CREATE INDEX "account_userId_idx" ON "neon_auth"."account" USING btree ("userId" uuid_ops);--> statement-breakpoint +CREATE INDEX "verification_identifier_idx" ON "neon_auth"."verification" USING btree ("identifier" text_ops);--> statement-breakpoint +CREATE INDEX "member_organizationId_idx" ON "neon_auth"."member" USING btree ("organizationId" uuid_ops);--> statement-breakpoint +CREATE INDEX "member_userId_idx" ON "neon_auth"."member" USING btree ("userId" uuid_ops);--> statement-breakpoint +CREATE POLICY "read_published" ON "test" AS PERMISSIVE FOR SELECT TO "authenticated" USING ((is_published = true));--> statement-breakpoint +CREATE POLICY "manage_own" ON "test" AS PERMISSIVE FOR ALL TO "authenticated"; +*/ \ No newline at end of file diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..e1fb3d7 --- /dev/null +++ b/drizzle/meta/0000_snapshot.json @@ -0,0 +1,913 @@ +{ + "id": "00000000-0000-0000-0000-000000000000", + "prevId": "", + "version": "7", + "dialect": "postgresql", + "tables": { + "neon_auth.invitation": { + "name": "invitation", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organizationId": { + "name": "organizationId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "inviterId": { + "name": "inviterId", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "invitation_email_idx": { + "name": "invitation_email_idx", + "columns": [ + { + "expression": "email", + "asc": true, + "nulls": "last", + "opclass": "text_ops", + "isExpression": false + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "invitation_organizationId_idx": { + "name": "invitation_organizationId_idx", + "columns": [ + { + "expression": "organizationId", + "asc": true, + "nulls": "last", + "opclass": "uuid_ops", + "isExpression": false + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "invitation_organizationId_fkey": { + "name": "invitation_organizationId_fkey", + "tableFrom": "invitation", + "tableTo": "organization", + "schemaTo": "neon_auth", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviterId_fkey": { + "name": "invitation_inviterId_fkey", + "tableFrom": "invitation", + "tableTo": "user", + "schemaTo": "neon_auth", + "columnsFrom": [ + "inviterId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "neon_auth.user": { + "name": "user", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "emailVerified": { + "name": "emailVerified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "banReason": { + "name": "banReason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banExpires": { + "name": "banExpires", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_key": { + "columns": [ + "email" + ], + "nullsNotDistinct": false, + "name": "user_email_key" + } + }, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "neon_auth.session": { + "name": "session", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "expiresAt": { + "name": "expiresAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "ipAddress": { + "name": "ipAddress", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userAgent": { + "name": "userAgent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "impersonatedBy": { + "name": "impersonatedBy", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "activeOrganizationId": { + "name": "activeOrganizationId", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "session_userId_idx": { + "name": "session_userId_idx", + "columns": [ + { + "expression": "userId", + "asc": true, + "nulls": "last", + "opclass": "uuid_ops", + "isExpression": false + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "session_userId_fkey": { + "name": "session_userId_fkey", + "tableFrom": "session", + "tableTo": "user", + "schemaTo": "neon_auth", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_key": { + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "session_token_key" + } + }, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "neon_auth.organization": { + "name": "organization", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "organization_slug_uidx": { + "name": "organization_slug_uidx", + "columns": [ + { + "expression": "slug", + "asc": true, + "nulls": "last", + "opclass": "text_ops", + "isExpression": false + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_key": { + "columns": [ + "slug" + ], + "nullsNotDistinct": false, + "name": "organization_slug_key" + } + }, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "neon_auth.account": { + "name": "account", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "accountId": { + "name": "accountId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "providerId": { + "name": "providerId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "accessToken": { + "name": "accessToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refreshToken": { + "name": "refreshToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "idToken": { + "name": "idToken", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "accessTokenExpiresAt": { + "name": "accessTokenExpiresAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "refreshTokenExpiresAt": { + "name": "refreshTokenExpiresAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "account_userId_idx": { + "name": "account_userId_idx", + "columns": [ + { + "expression": "userId", + "asc": true, + "nulls": "last", + "opclass": "uuid_ops", + "isExpression": false + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "account_userId_fkey": { + "name": "account_userId_fkey", + "tableFrom": "account", + "tableTo": "user", + "schemaTo": "neon_auth", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "neon_auth.verification": { + "name": "verification", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "updatedAt": { + "name": "updatedAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + } + }, + "indexes": { + "verification_identifier_idx": { + "name": "verification_identifier_idx", + "columns": [ + { + "expression": "identifier", + "asc": true, + "nulls": "last", + "opclass": "text_ops", + "isExpression": false + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "neon_auth.jwks": { + "name": "jwks", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "publicKey": { + "name": "publicKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "expiresAt": { + "name": "expiresAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "neon_auth.member": { + "name": "member", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "organizationId": { + "name": "organizationId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "userId": { + "name": "userId", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "member_organizationId_idx": { + "name": "member_organizationId_idx", + "columns": [ + { + "expression": "organizationId", + "asc": true, + "nulls": "last", + "opclass": "uuid_ops", + "isExpression": false + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "member_userId_idx": { + "name": "member_userId_idx", + "columns": [ + { + "expression": "userId", + "asc": true, + "nulls": "last", + "opclass": "uuid_ops", + "isExpression": false + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "member_organizationId_fkey": { + "name": "member_organizationId_fkey", + "tableFrom": "member", + "tableTo": "organization", + "schemaTo": "neon_auth", + "columnsFrom": [ + "organizationId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_userId_fkey": { + "name": "member_userId_fkey", + "tableFrom": "member", + "tableTo": "user", + "schemaTo": "neon_auth", + "columnsFrom": [ + "userId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "neon_auth.project_config": { + "name": "project_config", + "schema": "neon_auth", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "endpoint_id": { + "name": "endpoint_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "CURRENT_TIMESTAMP" + }, + "trusted_origins": { + "name": "trusted_origins", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "social_providers": { + "name": "social_providers", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "email_provider": { + "name": "email_provider", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "email_and_password": { + "name": "email_and_password", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "allow_localhost": { + "name": "allow_localhost", + "type": "boolean", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "project_config_endpoint_id_key": { + "columns": [ + "endpoint_id" + ], + "nullsNotDistinct": false, + "name": "project_config_endpoint_id_key" + } + }, + "checkConstraints": {}, + "policies": {}, + "isRLSEnabled": false + }, + "public.test": { + "name": "test", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "data": { + "name": "data", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_published": { + "name": "is_published", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {}, + "policies": { + "read_published": { + "name": "read_published", + "as": "PERMISSIVE", + "for": "SELECT", + "to": [ + "authenticated" + ], + "using": "(is_published = true)" + }, + "manage_own": { + "name": "manage_own", + "as": "PERMISSIVE", + "for": "ALL", + "to": [ + "authenticated" + ] + } + }, + "isRLSEnabled": true + } + }, + "enums": {}, + "schemas": { + "neon_auth": "neon_auth" + }, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "tables": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json new file mode 100644 index 0000000..a2e5d15 --- /dev/null +++ b/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1778338864717, + "tag": "0000_wooden_mercury", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 55d7e94..25fe9a5 100644 --- a/package.json +++ b/package.json @@ -7,15 +7,19 @@ "build": "next build", "start": "next start", "format": "prettier --write '**/*.{ts,tsx,md}'", - "lint": "eslint && next lint && tsc --noemit && prettier --check '**/*.{ts,tsx,md,scss}'" + "lint": "eslint && next lint && tsc --noemit && prettier --check '**/*.{ts,tsx,md,scss}'", + "db:pull": "drizzle-kit pull && cp ./drizzle/schema.ts ./src/lib/app/db/schema.ts && cp ./drizzle/relations.ts ./src/lib/app/db/relations.ts" }, "dependencies": { "@mantine/core": "^7.9.1", "@mantine/form": "^7.16.3", "@mantine/hooks": "^7.16.3", + "@neondatabase/auth": "latest", + "@neondatabase/auth-ui": "^0.2.0-beta", "@neondatabase/neon-js": "^0.2.0-beta.1", - "@neondatabase/serverless": "^1.0.2", + "@neondatabase/serverless": "^1.1.0", "@tabler/icons-react": "^2.47.0", + "drizzle-orm": "^0.45.2", "fauna": "^1.3.1", "next": "15.1.11", "next-client-cookies": "^2.0.1", @@ -24,11 +28,13 @@ "react-router-dom": "^7.13.0" }, "devDependencies": { - "@types/node": "^20", + "@types/node": "^25.6.2", "@types/react": "^19", "@types/react-dom": "^19", "@typescript-eslint/parser": "^6.21.0", "autoprefixer": "^10.0.1", + "dotenv": "^17.4.2", + "drizzle-kit": "^0.31.10", "eslint": "^8", "eslint-config-next": "14.1.0", "postcss": "^8", diff --git a/src/api/core/collections/index.ts b/src/api/core/collections/index.ts index bd99e33..84decf1 100644 --- a/src/api/core/collections/index.ts +++ b/src/api/core/collections/index.ts @@ -1,3 +1,3 @@ export type { Project } from './project' export type { Template } from './template' -export type { User } from './user' +export type { User, UserRef } from './user' diff --git a/src/api/core/collections/template.ts b/src/api/core/collections/template.ts index 0020122..51ae506 100644 --- a/src/api/core/collections/template.ts +++ b/src/api/core/collections/template.ts @@ -1,4 +1,4 @@ -import { User } from 'api/core/collections' +import { UserRef } from 'api/core/collections' type SchemaType = | 'loom' @@ -11,7 +11,7 @@ type SchemaType = export interface Template { id: string title: string - owner: User + owner: UserRef type: SchemaType schema: string[][] } diff --git a/src/api/core/collections/user.ts b/src/api/core/collections/user.ts index e8659d0..0d8b357 100644 --- a/src/api/core/collections/user.ts +++ b/src/api/core/collections/user.ts @@ -13,3 +13,5 @@ export interface User { banReason?: Nullable banExpires?: Nullable } + +export type UserRef = Pick diff --git a/src/app/(dashboard)/editor/page.tsx b/src/app/(dashboard)/editor/page.tsx index bafac45..be8ac08 100644 --- a/src/app/(dashboard)/editor/page.tsx +++ b/src/app/(dashboard)/editor/page.tsx @@ -1,5 +1,8 @@ import { MyTemplates } from 'pages' +import { getAllTest, getUserTest } from 'app/actions' -export default function MyTemplatesPage() { - return +export default async function MyTemplatesPage() { + const allTest = await getAllTest() + const userTest = await getUserTest() + return } diff --git a/src/lib/app/actions.ts b/src/lib/app/actions.ts new file mode 100644 index 0000000..f567478 --- /dev/null +++ b/src/lib/app/actions.ts @@ -0,0 +1,21 @@ +'use server' +import { auth } from 'api/auth' +import { db } from './db' +import { test } from './db/schema' +import { eq } from 'drizzle-orm' + +async function getAuthUser() { + const { data: session } = await auth.getSession() + if (!session?.user) throw new Error('Unauthorized') + return session.user +} + +export async function getAllTest() { + const user = await getAuthUser() + return db.select().from(test) +} + +export async function getUserTest() { + const user = await getAuthUser() + return db.select().from(test).where(eq(test.userId, user.id)) +} diff --git a/src/lib/app/db/index.ts b/src/lib/app/db/index.ts new file mode 100644 index 0000000..75a1d73 --- /dev/null +++ b/src/lib/app/db/index.ts @@ -0,0 +1,5 @@ +import { neon } from '@neondatabase/serverless' +import { drizzle } from 'drizzle-orm/neon-http' + +const sql = neon(process.env.NEON_DATABASE_URL!) +export const db = drizzle(sql) diff --git a/src/lib/app/db/relations.ts b/src/lib/app/db/relations.ts new file mode 100644 index 0000000..132c83e --- /dev/null +++ b/src/lib/app/db/relations.ts @@ -0,0 +1,75 @@ +import { relations } from 'drizzle-orm/relations' +import { + organizationInNeonAuth, + invitationInNeonAuth, + userInNeonAuth, + sessionInNeonAuth, + accountInNeonAuth, + memberInNeonAuth +} from './schema' + +export const invitationInNeonAuthRelations = relations( + invitationInNeonAuth, + ({ one }) => ({ + organizationInNeonAuth: one(organizationInNeonAuth, { + fields: [invitationInNeonAuth.organizationId], + references: [organizationInNeonAuth.id] + }), + userInNeonAuth: one(userInNeonAuth, { + fields: [invitationInNeonAuth.inviterId], + references: [userInNeonAuth.id] + }) + }) +) + +export const organizationInNeonAuthRelations = relations( + organizationInNeonAuth, + ({ many }) => ({ + invitationInNeonAuths: many(invitationInNeonAuth), + memberInNeonAuths: many(memberInNeonAuth) + }) +) + +export const userInNeonAuthRelations = relations( + userInNeonAuth, + ({ many }) => ({ + invitationInNeonAuths: many(invitationInNeonAuth), + sessionInNeonAuths: many(sessionInNeonAuth), + accountInNeonAuths: many(accountInNeonAuth), + memberInNeonAuths: many(memberInNeonAuth) + }) +) + +export const sessionInNeonAuthRelations = relations( + sessionInNeonAuth, + ({ one }) => ({ + userInNeonAuth: one(userInNeonAuth, { + fields: [sessionInNeonAuth.userId], + references: [userInNeonAuth.id] + }) + }) +) + +export const accountInNeonAuthRelations = relations( + accountInNeonAuth, + ({ one }) => ({ + userInNeonAuth: one(userInNeonAuth, { + fields: [accountInNeonAuth.userId], + references: [userInNeonAuth.id] + }) + }) +) + +export const memberInNeonAuthRelations = relations( + memberInNeonAuth, + ({ one }) => ({ + organizationInNeonAuth: one(organizationInNeonAuth, { + fields: [memberInNeonAuth.organizationId], + references: [organizationInNeonAuth.id] + }), + userInNeonAuth: one(userInNeonAuth, { + fields: [memberInNeonAuth.userId], + references: [userInNeonAuth.id] + }) + }) +) diff --git a/src/lib/app/db/schema.ts b/src/lib/app/db/schema.ts new file mode 100644 index 0000000..fe97735 --- /dev/null +++ b/src/lib/app/db/schema.ts @@ -0,0 +1,276 @@ +import { + pgTable, + pgSchema, + index, + foreignKey, + uuid, + text, + timestamp, + unique, + boolean, + uniqueIndex, + jsonb, + pgPolicy +} from 'drizzle-orm/pg-core' +import { sql } from 'drizzle-orm' + +export const neonAuth = pgSchema('neon_auth') + +export const invitationInNeonAuth = neonAuth.table( + 'invitation', + { + id: uuid().defaultRandom().primaryKey().notNull(), + organizationId: uuid().notNull(), + email: text().notNull(), + role: text(), + status: text().notNull(), + expiresAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(), + createdAt: timestamp({ withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + inviterId: uuid().notNull() + }, + table => [ + index('invitation_email_idx').using( + 'btree', + table.email.asc().nullsLast().op('text_ops') + ), + index('invitation_organizationId_idx').using( + 'btree', + table.organizationId.asc().nullsLast().op('uuid_ops') + ), + foreignKey({ + columns: [table.organizationId], + foreignColumns: [organizationInNeonAuth.id], + name: 'invitation_organizationId_fkey' + }).onDelete('cascade'), + foreignKey({ + columns: [table.inviterId], + foreignColumns: [userInNeonAuth.id], + name: 'invitation_inviterId_fkey' + }).onDelete('cascade') + ] +) + +export const userInNeonAuth = neonAuth.table( + 'user', + { + id: uuid().defaultRandom().primaryKey().notNull(), + name: text().notNull(), + email: text().notNull(), + emailVerified: boolean().notNull(), + image: text(), + createdAt: timestamp({ withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp({ withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + role: text(), + banned: boolean(), + banReason: text(), + banExpires: timestamp({ withTimezone: true, mode: 'string' }) + }, + table => [unique('user_email_key').on(table.email)] +) + +export const sessionInNeonAuth = neonAuth.table( + 'session', + { + id: uuid().defaultRandom().primaryKey().notNull(), + expiresAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(), + token: text().notNull(), + createdAt: timestamp({ withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(), + ipAddress: text(), + userAgent: text(), + userId: uuid().notNull(), + impersonatedBy: text(), + activeOrganizationId: text() + }, + table => [ + index('session_userId_idx').using( + 'btree', + table.userId.asc().nullsLast().op('uuid_ops') + ), + foreignKey({ + columns: [table.userId], + foreignColumns: [userInNeonAuth.id], + name: 'session_userId_fkey' + }).onDelete('cascade'), + unique('session_token_key').on(table.token) + ] +) + +export const organizationInNeonAuth = neonAuth.table( + 'organization', + { + id: uuid().defaultRandom().primaryKey().notNull(), + name: text().notNull(), + slug: text().notNull(), + logo: text(), + createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(), + metadata: text() + }, + table => [ + uniqueIndex('organization_slug_uidx').using( + 'btree', + table.slug.asc().nullsLast().op('text_ops') + ), + unique('organization_slug_key').on(table.slug) + ] +) + +export const accountInNeonAuth = neonAuth.table( + 'account', + { + id: uuid().defaultRandom().primaryKey().notNull(), + accountId: text().notNull(), + providerId: text().notNull(), + userId: uuid().notNull(), + accessToken: text(), + refreshToken: text(), + idToken: text(), + accessTokenExpiresAt: timestamp({ withTimezone: true, mode: 'string' }), + refreshTokenExpiresAt: timestamp({ withTimezone: true, mode: 'string' }), + scope: text(), + password: text(), + createdAt: timestamp({ withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp({ withTimezone: true, mode: 'string' }).notNull() + }, + table => [ + index('account_userId_idx').using( + 'btree', + table.userId.asc().nullsLast().op('uuid_ops') + ), + foreignKey({ + columns: [table.userId], + foreignColumns: [userInNeonAuth.id], + name: 'account_userId_fkey' + }).onDelete('cascade') + ] +) + +export const verificationInNeonAuth = neonAuth.table( + 'verification', + { + id: uuid().defaultRandom().primaryKey().notNull(), + identifier: text().notNull(), + value: text().notNull(), + expiresAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(), + createdAt: timestamp({ withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp({ withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull() + }, + table => [ + index('verification_identifier_idx').using( + 'btree', + table.identifier.asc().nullsLast().op('text_ops') + ) + ] +) + +export const jwksInNeonAuth = neonAuth.table('jwks', { + id: uuid().defaultRandom().primaryKey().notNull(), + publicKey: text().notNull(), + privateKey: text().notNull(), + createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull(), + expiresAt: timestamp({ withTimezone: true, mode: 'string' }) +}) + +export const memberInNeonAuth = neonAuth.table( + 'member', + { + id: uuid().defaultRandom().primaryKey().notNull(), + organizationId: uuid().notNull(), + userId: uuid().notNull(), + role: text().notNull(), + createdAt: timestamp({ withTimezone: true, mode: 'string' }).notNull() + }, + table => [ + index('member_organizationId_idx').using( + 'btree', + table.organizationId.asc().nullsLast().op('uuid_ops') + ), + index('member_userId_idx').using( + 'btree', + table.userId.asc().nullsLast().op('uuid_ops') + ), + foreignKey({ + columns: [table.organizationId], + foreignColumns: [organizationInNeonAuth.id], + name: 'member_organizationId_fkey' + }).onDelete('cascade'), + foreignKey({ + columns: [table.userId], + foreignColumns: [userInNeonAuth.id], + name: 'member_userId_fkey' + }).onDelete('cascade') + ] +) + +export const projectConfigInNeonAuth = neonAuth.table( + 'project_config', + { + id: uuid().defaultRandom().primaryKey().notNull(), + name: text().notNull(), + endpointId: text('endpoint_id').notNull(), + createdAt: timestamp('created_at', { withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true, mode: 'string' }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + trustedOrigins: jsonb('trusted_origins').notNull(), + socialProviders: jsonb('social_providers').notNull(), + emailProvider: jsonb('email_provider'), + emailAndPassword: jsonb('email_and_password'), + allowLocalhost: boolean('allow_localhost').notNull() + }, + table => [unique('project_config_endpoint_id_key').on(table.endpointId)] +) + +export const test = pgTable( + 'test', + { + id: uuid().defaultRandom().primaryKey().notNull(), + userId: text('user_id').notNull(), + data: text(), + isPublished: boolean('is_published').default(false).notNull() + }, + table => [ + pgPolicy('select_published', { + as: 'permissive', + for: 'select', + to: ['authenticated'], + using: sql`(is_published = true)` + }), + pgPolicy('select_own', { + as: 'permissive', + for: 'select', + to: ['authenticated'] + }), + pgPolicy('policy_2', { + as: 'restrictive', + for: 'select', + to: ['authenticated'] + }), + pgPolicy('read_published', { + as: 'permissive', + for: 'select', + to: ['authenticated'] + }), + pgPolicy('manage_own', { + as: 'permissive', + for: 'all', + to: ['authenticated'] + }) + ] +) diff --git a/src/lib/app/layout.tsx b/src/lib/app/layout.tsx index 11aefcb..6d5a140 100644 --- a/src/lib/app/layout.tsx +++ b/src/lib/app/layout.tsx @@ -34,6 +34,7 @@ export const Layout = ({ children }: PropsWithChildren) => { colorSchemeManager={colorSchemeManager} > { +export const MyTemplates = ({ + allTest, + userTest +}: { + allTest: any + userTest: any +}) => { const { user } = useUser() return (

MyTemplates

User info: {JSON.stringify(user)}

+

allTest: {JSON.stringify(allTest)}

+

userTest: {JSON.stringify(userTest)}

) } diff --git a/src/proxy.ts b/src/proxy.ts index 488b340..07e3c3a 100644 --- a/src/proxy.ts +++ b/src/proxy.ts @@ -1,9 +1,17 @@ import { auth } from 'api/auth' +import { NextRequest } from 'next/server' -export default auth.middleware({ +const authMiddleware = auth.middleware({ loginUrl: '/auth/sign-in' }) +export default function middleware(request: NextRequest) { + if (request.headers.has('Next-Action')) { + return + } + return authMiddleware(request) +} + export const config = { matcher: ['/account'] } From 0e6754c28cbb034ebb987f10b47af81f3c5455db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=9C=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Sun, 10 May 2026 17:24:17 +0300 Subject: [PATCH 2/5] feat: added get actions for templates --- bun.lockb | Bin 400411 -> 400073 bytes package.json | 4 +- src/api/_actions/index.ts | 45 +++++ src/api/_actions/middleware.ts | 22 +++ src/api/_actions/project/create.ts | 39 ++++ src/api/_actions/project/delete.ts | 24 +++ src/api/_actions/project/get.ts | 24 +++ src/api/_actions/project/index.ts | 4 + src/api/_actions/project/update.ts | 25 +++ src/api/_actions/projects/delete.ts | 24 +++ src/api/_actions/projects/get/by-user.ts | 22 +++ src/api/_actions/projects/index.ts | 2 + src/api/_actions/template/create.ts | 26 +++ src/api/_actions/template/delete.ts | 24 +++ src/api/_actions/template/get.ts | 24 +++ src/api/_actions/template/index.ts | 4 + src/api/_actions/template/update.ts | 27 +++ src/api/_actions/templates/delete.ts | 24 +++ src/api/_actions/templates/get/by-user.ts | 26 +++ src/api/_actions/templates/index.ts | 2 + src/api/_core/db.ts | 13 ++ src/api/_core/managers/index.ts | 3 + src/api/_core/managers/manager.ts | 13 ++ src/api/_core/managers/project.ts | 78 ++++++++ src/api/_core/managers/template.ts | 71 ++++++++ src/api/actions/index.ts | 46 +---- src/api/actions/middleware.ts | 10 +- src/api/actions/project/create.ts | 39 ---- src/api/actions/project/delete.ts | 24 --- src/api/actions/project/get.ts | 24 --- src/api/actions/project/index.ts | 4 - src/api/actions/project/update.ts | 25 --- src/api/actions/projects/delete.ts | 24 --- src/api/actions/projects/get/by-user.ts | 22 --- src/api/actions/projects/index.ts | 2 - src/api/actions/template/create.ts | 26 --- src/api/actions/template/delete.ts | 24 --- src/api/actions/template/get.ts | 24 --- src/api/actions/template/index.ts | 4 - src/api/actions/template/update.ts | 27 --- src/api/actions/templates/create.ts | 0 src/api/actions/templates/delete.ts | 24 --- src/api/actions/templates/get/by-id.ts | 19 ++ src/api/actions/templates/get/by-user.ts | 21 +-- src/api/actions/templates/get/feed.ts | 17 ++ src/api/actions/templates/index.ts | 2 - src/api/actions/templates/update.ts | 0 src/api/core/collections/project.ts | 4 +- src/api/core/collections/template.ts | 10 +- src/api/core/db.ts | 13 -- src/api/core/managers/index.ts | 3 - src/api/core/managers/manager.ts | 13 -- src/api/core/managers/project.ts | 78 -------- src/api/core/managers/template.ts | 117 ++++++------ src/{lib/app => api}/db/index.ts | 5 + src/{lib/app => api}/db/relations.ts | 0 src/{lib/app => api}/db/schema.ts | 58 +++--- src/api/db/types.ts | 187 ++++++++++++++++++++ src/app/(dashboard)/editor/page.tsx | 7 +- src/lib/app/actions.ts | 21 --- src/lib/features/user/user-context.ts | 2 +- src/lib/pages/my-templates/my-templates.tsx | 9 +- 62 files changed, 908 insertions(+), 597 deletions(-) create mode 100644 src/api/_actions/index.ts create mode 100644 src/api/_actions/middleware.ts create mode 100644 src/api/_actions/project/create.ts create mode 100644 src/api/_actions/project/delete.ts create mode 100644 src/api/_actions/project/get.ts create mode 100644 src/api/_actions/project/index.ts create mode 100644 src/api/_actions/project/update.ts create mode 100644 src/api/_actions/projects/delete.ts create mode 100644 src/api/_actions/projects/get/by-user.ts create mode 100644 src/api/_actions/projects/index.ts create mode 100644 src/api/_actions/template/create.ts create mode 100644 src/api/_actions/template/delete.ts create mode 100644 src/api/_actions/template/get.ts create mode 100644 src/api/_actions/template/index.ts create mode 100644 src/api/_actions/template/update.ts create mode 100644 src/api/_actions/templates/delete.ts create mode 100644 src/api/_actions/templates/get/by-user.ts create mode 100644 src/api/_actions/templates/index.ts create mode 100644 src/api/_core/db.ts create mode 100644 src/api/_core/managers/index.ts create mode 100644 src/api/_core/managers/manager.ts create mode 100644 src/api/_core/managers/project.ts create mode 100644 src/api/_core/managers/template.ts delete mode 100644 src/api/actions/project/create.ts delete mode 100644 src/api/actions/project/delete.ts delete mode 100644 src/api/actions/project/get.ts delete mode 100644 src/api/actions/project/index.ts delete mode 100644 src/api/actions/project/update.ts delete mode 100644 src/api/actions/projects/delete.ts delete mode 100644 src/api/actions/projects/get/by-user.ts delete mode 100644 src/api/actions/projects/index.ts delete mode 100644 src/api/actions/template/create.ts delete mode 100644 src/api/actions/template/delete.ts delete mode 100644 src/api/actions/template/get.ts delete mode 100644 src/api/actions/template/index.ts delete mode 100644 src/api/actions/template/update.ts create mode 100644 src/api/actions/templates/create.ts create mode 100644 src/api/actions/templates/get/by-id.ts create mode 100644 src/api/actions/templates/get/feed.ts delete mode 100644 src/api/actions/templates/index.ts create mode 100644 src/api/actions/templates/update.ts delete mode 100644 src/api/core/db.ts delete mode 100644 src/api/core/managers/index.ts delete mode 100644 src/api/core/managers/manager.ts delete mode 100644 src/api/core/managers/project.ts rename src/{lib/app => api}/db/index.ts (54%) rename src/{lib/app => api}/db/relations.ts (100%) rename src/{lib/app => api}/db/schema.ts (89%) create mode 100644 src/api/db/types.ts delete mode 100644 src/lib/app/actions.ts diff --git a/bun.lockb b/bun.lockb index dec4fb4ed828b9229338c08ef0c085ffc6ef1cb8..4f8bbc8a85ce87621e90d1d5b190999f21374fa0 100755 GIT binary patch delta 76783 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 a+ZP_Vwb)O_%D{1{-Kn>xcBjb^`2PT-#}Z2b delta 75706 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%0Ad;lgb~0hRo0m`;cI$#lvhe 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 diff --git a/package.json b/package.json index 25fe9a5..1cbb97d 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "start": "next start", "format": "prettier --write '**/*.{ts,tsx,md}'", "lint": "eslint && next lint && tsc --noemit && prettier --check '**/*.{ts,tsx,md,scss}'", - "db:pull": "drizzle-kit pull && cp ./drizzle/schema.ts ./src/lib/app/db/schema.ts && cp ./drizzle/relations.ts ./src/lib/app/db/relations.ts" + "db:pull": "drizzle-kit pull && cp ./drizzle/schema.ts ./src/api/db/schema.ts && cp ./drizzle/relations.ts ./src/api/db/relations.ts", + "db:generate-types": "npx @neondatabase/neon-js gen-types --db-url \"$NEON_DATABASE_URL\" --output src/api/db/types.ts" }, "dependencies": { "@mantine/core": "^7.9.1", @@ -20,7 +21,6 @@ "@neondatabase/serverless": "^1.1.0", "@tabler/icons-react": "^2.47.0", "drizzle-orm": "^0.45.2", - "fauna": "^1.3.1", "next": "15.1.11", "next-client-cookies": "^2.0.1", "react": "^19.0.0", diff --git a/src/api/_actions/index.ts b/src/api/_actions/index.ts new file mode 100644 index 0000000..3a2c4f5 --- /dev/null +++ b/src/api/_actions/index.ts @@ -0,0 +1,45 @@ +// import { +// get as getTemplate, +// create as createTemplate, +// update as updateTemplate, +// deleteTemplate +// } from './template' +// import { getByUser as getTemplatesByUser, deleteTemplates } from './templates' +// import { +// get as getProject, +// create as createProject, +// update as updateProject, +// deleteProject +// } from './project' +// import { getByUser as getProjectsByUser, deleteProjects } from './projects' +// +// export const actions = { +// template: { +// get: { +// byId: getTemplate +// }, +// add: createTemplate, +// update: updateTemplate, +// delete: deleteTemplate +// }, +// templates: { +// get: { +// byUser: getTemplatesByUser +// }, +// delete: deleteTemplates +// }, +// project: { +// get: { +// byId: getProject +// }, +// add: createProject, +// update: updateProject, +// delete: deleteProject +// }, +// projects: { +// get: { +// byUser: getProjectsByUser +// }, +// delete: deleteProjects +// } +// } diff --git a/src/api/_actions/middleware.ts b/src/api/_actions/middleware.ts new file mode 100644 index 0000000..efd5e96 --- /dev/null +++ b/src/api/_actions/middleware.ts @@ -0,0 +1,22 @@ +// 'use server' +// import { cookies } from 'next/headers' +// +// export async function getToken() { +// const cookieStore = await cookies() +// const token = cookieStore.get('token')?.value +// return token +// } +// +// export const executor = async ( +// callbackPath: string, +// callback: (args: Req) => Res, +// args: Req +// ): Promise => { +// try { +// console.debug(`Entered ${callbackPath}`) +// return await callback.call(undefined, args) +// } catch (error) { +// console.error(error) +// throw error +// } +// } diff --git a/src/api/_actions/project/create.ts b/src/api/_actions/project/create.ts new file mode 100644 index 0000000..a30760e --- /dev/null +++ b/src/api/_actions/project/create.ts @@ -0,0 +1,39 @@ +// 'use server' +// import { Project, Template } from 'api/core/collections' +// import { ProjectManager, TemplateManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// import { getMaterials } from 'api/utils' +// +// type Req = { +// templateId: Template['id'] +// } +// type Res = Promise +// +// async function handler({ templateId }: Req) { +// const token = await getToken() +// if (!token) return [] +// const templates = new TemplateManager(token) +// +// const template = await templates.getById(templateId) +// const { title, type } = template +// +// const schema = template.schema.map(row => +// row.map(color => ({ color, isBeaded: false })) +// ) +// const materials = getMaterials(schema) +// +// const projects = new ProjectManager(token) +// const userProjects = await projects.addProject({ +// title, +// type, +// schema, +// materials +// }) +// if (!userProjects) throw new Error(`Projects not found`) +// +// return userProjects +// } +// +// export async function create(args: Req) { +// return await executor('actions/project/create', handler, args) +// } diff --git a/src/api/_actions/project/delete.ts b/src/api/_actions/project/delete.ts new file mode 100644 index 0000000..bedbb30 --- /dev/null +++ b/src/api/_actions/project/delete.ts @@ -0,0 +1,24 @@ +// 'use server' +// import { Project } from 'api/core/collections' +// import { ProjectManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// +// type Req = { +// id: Project['id'] +// } +// type Res = Promise +// +// async function handler({ id }: Req) { +// const token = await getToken() +// if (!token) return [] +// const projects = new ProjectManager(token) +// +// const userProjects = projects.deleteProject(id) +// if (!userProjects) throw new Error(`Projects not found`) +// +// return userProjects +// } +// +// export async function deleteProject(args: Req) { +// return await executor('actions/project/delete', handler, args) +// } diff --git a/src/api/_actions/project/get.ts b/src/api/_actions/project/get.ts new file mode 100644 index 0000000..50fc7c0 --- /dev/null +++ b/src/api/_actions/project/get.ts @@ -0,0 +1,24 @@ +// 'use server' +// import { Project } from 'api/core/collections' +// import { ProjectManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// +// type Req = { +// id: Project['id'] +// } +// type Res = Promise +// +// async function handler({ id }: Req) { +// const token = await getToken() +// if (!token) return null +// const projects = new ProjectManager(token) +// +// const project = projects.getById(id) +// if (!project) throw new Error(`Project with id ${id} not found`) +// +// return project +// } +// +// export async function get(args: Req) { +// return await executor('actions/project/get', handler, args) +// } diff --git a/src/api/_actions/project/index.ts b/src/api/_actions/project/index.ts new file mode 100644 index 0000000..bf05799 --- /dev/null +++ b/src/api/_actions/project/index.ts @@ -0,0 +1,4 @@ +// export { create } from './create' +// export { deleteProject } from './delete' +// export { get } from './get' +// export { update } from './update' diff --git a/src/api/_actions/project/update.ts b/src/api/_actions/project/update.ts new file mode 100644 index 0000000..6d3ce55 --- /dev/null +++ b/src/api/_actions/project/update.ts @@ -0,0 +1,25 @@ +// 'use server' +// import { Project } from 'api/core/collections' +// import { ProjectManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// import { getProgress } from 'api/utils' +// +// type Req = Omit +// type Res = Promise +// +// async function handler(data: Req) { +// const token = await getToken() +// if (!token) return [] +// const projects = new ProjectManager(token) +// +// const progress = getProgress(data.schema) +// +// const userProjects = projects.updateProject({ progress, ...data }) +// if (!userProjects) throw new Error(`Projects not found`) +// +// return userProjects +// } +// +// export async function update(args: Req) { +// return await executor('actions/project/update', handler, args) +// } diff --git a/src/api/_actions/projects/delete.ts b/src/api/_actions/projects/delete.ts new file mode 100644 index 0000000..ab407ff --- /dev/null +++ b/src/api/_actions/projects/delete.ts @@ -0,0 +1,24 @@ +// 'use server' +// import { Project } from 'api/core/collections' +// import { ProjectManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// +// type Req = { +// idList: Project['id'][] +// } +// type Res = Promise +// +// async function handler({ idList }: Req) { +// const token = await getToken() +// if (!token) return [] +// const projects = new ProjectManager(token) +// +// const userProjects = projects.deleteProjects(idList) +// if (!userProjects) throw new Error(`Projects not found`) +// +// return userProjects +// } +// +// export async function deleteProjects(args: Req) { +// return await executor('actions/projects/delete', handler, args) +// } diff --git a/src/api/_actions/projects/get/by-user.ts b/src/api/_actions/projects/get/by-user.ts new file mode 100644 index 0000000..a89e6be --- /dev/null +++ b/src/api/_actions/projects/get/by-user.ts @@ -0,0 +1,22 @@ +// 'use server' +// import { Project } from 'api/core/collections' +// import { ProjectManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// +// type Req = void +// type Res = Promise +// +// async function handler() { +// const token = await getToken() +// if (!token) return [] +// const projects = new ProjectManager(token) +// +// const userProjects = projects.getUserProjects() +// if (!userProjects) throw new Error(`Projects not found`) +// +// return userProjects +// } +// +// export async function getByUser(args: Req) { +// return await executor('actions/projects/get/by-user', handler, args) +// } diff --git a/src/api/_actions/projects/index.ts b/src/api/_actions/projects/index.ts new file mode 100644 index 0000000..76e765e --- /dev/null +++ b/src/api/_actions/projects/index.ts @@ -0,0 +1,2 @@ +// export { getByUser } from './get/by-user' +// export { deleteProjects } from './delete' diff --git a/src/api/_actions/template/create.ts b/src/api/_actions/template/create.ts new file mode 100644 index 0000000..8fd78ac --- /dev/null +++ b/src/api/_actions/template/create.ts @@ -0,0 +1,26 @@ +// 'use server' +// import { Template } from 'api/core/collections' +// import { TemplateManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// +// type Req = { +// title: Template['title'] +// type: Template['type'] +// schema: Template['schema'] +// } +// type Res = Promise +// +// async function handler(args: Req) { +// const token = await getToken() +// if (!token) return [] +// const templates = new TemplateManager(token) +// +// const userTemplates = templates.addTemplate(args) +// if (!userTemplates) throw new Error(`Templates not found`) +// +// return userTemplates +// } +// +// export async function create(args: Req) { +// return await executor('actions/template/create', handler, args) +// } diff --git a/src/api/_actions/template/delete.ts b/src/api/_actions/template/delete.ts new file mode 100644 index 0000000..214b18c --- /dev/null +++ b/src/api/_actions/template/delete.ts @@ -0,0 +1,24 @@ +// 'use server' +// import { Template } from 'api/core/collections' +// import { TemplateManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// +// type Req = { +// id: Template['id'] +// } +// type Res = Promise +// +// async function handler({ id }: Req) { +// const token = await getToken() +// if (!token) return [] +// const templates = new TemplateManager(token) +// +// const userTemplates = templates.deleteTemplate(id) +// if (!userTemplates) throw new Error(`Templates not found`) +// +// return userTemplates +// } +// +// export async function deleteTemplate(args: Req) { +// return await executor('actions/template/delete', handler, args) +// } diff --git a/src/api/_actions/template/get.ts b/src/api/_actions/template/get.ts new file mode 100644 index 0000000..3f7abc3 --- /dev/null +++ b/src/api/_actions/template/get.ts @@ -0,0 +1,24 @@ +// 'use server' +// import { Template } from 'api/core/collections' +// import { TemplateManager } from 'api/_core/managers' +// import { executor, getToken } from 'middleware' +// +// type Req = { +// id: Template['id'] +// } +// type Res = Promise