From dc936e411414eb644094f80a27eea2b73941601c Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Mon, 16 Sep 2024 20:28:59 +0100 Subject: [PATCH] Jiggle the envs --- .env.development | 14 - .gitignore | 4 +- bun.lockb | Bin 282915 -> 282439 bytes drizzle/0000_dazzling_cerebro.sql | 67 ----- drizzle/0001_wooden_ink.sql | 15 - drizzle/meta/0000_snapshot.json | 357 ---------------------- drizzle/meta/0001_snapshot.json | 418 -------------------------- drizzle/meta/_journal.json | 20 -- next.config.js | 4 +- package.json | 26 +- scripts/reset.sh | 21 ++ src/app/api/upload/post/route.ts | 43 ++- src/components/pages/landing-page.tsx | 8 +- src/components/pages/upload-page.tsx | 28 +- src/components/trending-images.tsx | 1 - src/middleware.ts | 5 + src/server/api/routers/post.ts | 2 +- src/server/db/index.ts | 1 - 18 files changed, 106 insertions(+), 928 deletions(-) delete mode 100644 .env.development delete mode 100644 drizzle/0000_dazzling_cerebro.sql delete mode 100644 drizzle/0001_wooden_ink.sql delete mode 100644 drizzle/meta/0000_snapshot.json delete mode 100644 drizzle/meta/0001_snapshot.json delete mode 100644 drizzle/meta/_journal.json create mode 100755 scripts/reset.sh create mode 100644 src/middleware.ts diff --git a/.env.development b/.env.development deleted file mode 100644 index 0ab01ef..0000000 --- a/.env.development +++ /dev/null @@ -1,14 +0,0 @@ -DATABASE_URL="postgresql://postgres:hackme@localhost:5432/opengifame" - - -UPLOAD_PATH=/srv/dev/opengifame/working/uploads -NEXTAUTH_SECRET="tAOVgxpY1U0BsnPCr6Gf8WVkmRMkp06ztUfwMhBKMQ4=" -NEXTAUTH_URL="https://opengifame.dev.fergl.ie:3000" - -NEXT_PUBLIC_DEBUG_MODE=1 -NEXT_PUBLIC_SITE_NAME=Open Gifame -NEXT_PUBLIC_SITE_DESCRIPTION=Robot powered giffage -NEXT_PUBLIC_SITE_URL=https://opengifame.dev.fergl.ie:3000 -NEXT_PUBLIC_SITE_OG_IMAGE=https://opengifame.dev.fergl.ie:3000/icon.png -NEXT_PUBLIC_SITE_TWITTER=https://twitter.com/opengifame -NEXT_PUBLIC_SITE_GITHUB=https://github.com/fergalmoran/opengifame diff --git a/.gitignore b/.gitignore index b15ed6a..0a29f41 100644 --- a/.gitignore +++ b/.gitignore @@ -34,8 +34,8 @@ yarn-error.log* # local env files # do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables .env -.env*.local - +.env* +.notenv* # vercel .vercel diff --git a/bun.lockb b/bun.lockb index 19ad3193da1c6ff9d91923dd7c8fcfbc6d0fc952..f2e884b868a799180cc8012c2da3b16c058ed143 100755 GIT binary patch delta 34459 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 delta 34516 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 statement-breakpoint -CREATE TABLE IF NOT EXISTS "post" ( - "id" serial PRIMARY KEY NOT NULL, - "name" varchar(256), - "created_by" varchar(255) NOT NULL, - "created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, - "updated_at" timestamp with time zone -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "session" ( - "session_token" varchar(255) PRIMARY KEY NOT NULL, - "user_id" varchar(255) NOT NULL, - "expires" timestamp with time zone NOT NULL -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "user" ( - "id" varchar(255) PRIMARY KEY NOT NULL, - "name" varchar(255), - "email" varchar(255) NOT NULL, - "email_verified" timestamp with time zone DEFAULT CURRENT_TIMESTAMP, - "image" varchar(255), - "password" text -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "verification_token" ( - "identifier" varchar(255) NOT NULL, - "token" varchar(255) NOT NULL, - "expires" timestamp with time zone NOT NULL, - CONSTRAINT "verification_token_identifier_token_pk" PRIMARY KEY("identifier","token") -); ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE no action ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "post" ADD CONSTRAINT "post_created_by_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."user"("id") ON DELETE no action ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "session" ADD CONSTRAINT "session_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE no action ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -CREATE INDEX IF NOT EXISTS "account_user_id_idx" ON "account" USING btree ("user_id");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "created_by_idx" ON "post" USING btree ("created_by");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "name_idx" ON "post" USING btree ("name");--> statement-breakpoint -CREATE INDEX IF NOT EXISTS "session_user_id_idx" ON "session" USING btree ("user_id"); \ No newline at end of file diff --git a/drizzle/0001_wooden_ink.sql b/drizzle/0001_wooden_ink.sql deleted file mode 100644 index 53988e9..0000000 --- a/drizzle/0001_wooden_ink.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE IF NOT EXISTS "image" ( - "id" varchar(255) PRIMARY KEY NOT NULL, - "name" varchar, - "tags" text[], - "created_by" varchar(255) NOT NULL, - "created_at" timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, - "updated_at" timestamp with time zone -); ---> statement-breakpoint -ALTER TABLE "post" ALTER COLUMN "id" SET DATA TYPE varchar(255);--> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "image" ADD CONSTRAINT "image_created_by_user_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."user"("id") ON DELETE no action ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json deleted file mode 100644 index d2763f0..0000000 --- a/drizzle/meta/0000_snapshot.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "id": "3cde7a7b-e714-4d18-a93a-9e07c9e48f5a", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "user_id": { - "name": "user_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "provider_account_id": { - "name": "provider_account_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "token_type": { - "name": "token_type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "session_state": { - "name": "session_state", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "account_user_id_idx": { - "name": "account_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "account_user_id_user_id_fk": { - "name": "account_user_id_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "account_provider_provider_account_id_pk": { - "name": "account_provider_provider_account_id_pk", - "columns": [ - "provider", - "provider_account_id" - ] - } - }, - "uniqueConstraints": {} - }, - "public.post": { - "name": "post", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(255)", - "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": false - } - }, - "indexes": { - "created_by_idx": { - "name": "created_by_idx", - "columns": [ - { - "expression": "created_by", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "name_idx": { - "name": "name_idx", - "columns": [ - { - "expression": "name", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "post_created_by_user_id_fk": { - "name": "post_created_by_user_id_fk", - "tableFrom": "post", - "tableTo": "user", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "session_token": { - "name": "session_token", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "session_user_id_idx": { - "name": "session_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "session_user_id_user_id_fk": { - "name": "session_user_id_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false, - "default": "CURRENT_TIMESTAMP" - }, - "image": { - "name": "image", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.verification_token": { - "name": "verification_token", - "schema": "", - "columns": { - "identifier": { - "name": "identifier", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "verification_token_identifier_token_pk": { - "name": "verification_token_identifier_token_pk", - "columns": [ - "identifier", - "token" - ] - } - }, - "uniqueConstraints": {} - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/drizzle/meta/0001_snapshot.json b/drizzle/meta/0001_snapshot.json deleted file mode 100644 index dc4bec6..0000000 --- a/drizzle/meta/0001_snapshot.json +++ /dev/null @@ -1,418 +0,0 @@ -{ - "id": "01ae1334-57ff-4e93-8599-bdc2689aea71", - "prevId": "3cde7a7b-e714-4d18-a93a-9e07c9e48f5a", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "user_id": { - "name": "user_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "provider_account_id": { - "name": "provider_account_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "token_type": { - "name": "token_type", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "session_state": { - "name": "session_state", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "account_user_id_idx": { - "name": "account_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "account_user_id_user_id_fk": { - "name": "account_user_id_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "account_provider_provider_account_id_pk": { - "name": "account_provider_provider_account_id_pk", - "columns": [ - "provider", - "provider_account_id" - ] - } - }, - "uniqueConstraints": {} - }, - "public.image": { - "name": "image", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "tags": { - "name": "tags", - "type": "text[]", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(255)", - "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": false - } - }, - "indexes": {}, - "foreignKeys": { - "image_created_by_user_id_fk": { - "name": "image_created_by_user_id_fk", - "tableFrom": "image", - "tableTo": "user", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.post": { - "name": "post", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(256)", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "varchar(255)", - "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": false - } - }, - "indexes": { - "created_by_idx": { - "name": "created_by_idx", - "columns": [ - { - "expression": "created_by", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "name_idx": { - "name": "name_idx", - "columns": [ - { - "expression": "name", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "post_created_by_user_id_fk": { - "name": "post_created_by_user_id_fk", - "tableFrom": "post", - "tableTo": "user", - "columnsFrom": [ - "created_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "session_token": { - "name": "session_token", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "session_user_id_idx": { - "name": "session_user_id_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "session_user_id_user_id_fk": { - "name": "session_user_id_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "varchar(255)", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": false, - "default": "CURRENT_TIMESTAMP" - }, - "image": { - "name": "image", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.verification_token": { - "name": "verification_token", - "schema": "", - "columns": { - "identifier": { - "name": "identifier", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "expires": { - "name": "expires", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": { - "verification_token_identifier_token_pk": { - "name": "verification_token_identifier_token_pk", - "columns": [ - "identifier", - "token" - ] - } - }, - "uniqueConstraints": {} - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json deleted file mode 100644 index 7d3cb47..0000000 --- a/drizzle/meta/_journal.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "entries": [ - { - "idx": 0, - "version": "7", - "when": 1725454391060, - "tag": "0000_dazzling_cerebro", - "breakpoints": true - }, - { - "idx": 1, - "version": "7", - "when": 1726068700784, - "tag": "0001_wooden_ink", - "breakpoints": true - } - ] -} \ No newline at end of file diff --git a/next.config.js b/next.config.js index 5fa34bd..e0a7c57 100644 --- a/next.config.js +++ b/next.config.js @@ -7,11 +7,13 @@ await import("./src/env.js"); /** @type {import("next").NextConfig} */ const config = { images: { - domains: ["localhost"], remotePatterns: [ { hostname: "avatars.githubusercontent.com", }, + { + hostname: "localhost", + }, ], }, }; diff --git a/package.json b/package.json index a95e969..4476248 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "start": "next start" }, "dependencies": { - "@auth/drizzle-adapter": "^1.4.2", + "@auth/drizzle-adapter": "^1.5.0", "@headlessui/react": "^2.1.8", "@hookform/resolvers": "^3.9.0", "@radix-ui/react-accordion": "^1.2.0", @@ -61,7 +61,7 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "1.0.0", - "date-fns": "^3.6.0", + "date-fns": "^4.0.0", "drizzle-orm": "^0.33.0", "embla-carousel-react": "^8.3.0", "geist": "^1.3.1", @@ -81,29 +81,29 @@ "react-dom": "^18.3.1", "react-hook-form": "^7.53.0", "react-icons": "^5.3.0", - "react-resizable-panels": "^2.1.2", + "react-resizable-panels": "^2.1.3", "recharts": "^2.12.7", "server-only": "^0.0.1", "sonner": "^1.5.0", "superjson": "^2.2.1", "tailwind-merge": "^2.5.2", "tailwindcss-animate": "^1.0.7", - "vaul": "^0.9.2", + "vaul": "^0.9.3", "zod": "^3.23.8" }, "devDependencies": { - "@faker-js/faker": "^9.0.0", - "@types/eslint": "^8.56.10", - "@types/node": "^22.5.4", - "@types/react": "^18.3.5", + "@faker-js/faker": "^9.0.1", + "@types/eslint": "^9.6.1", + "@types/node": "^22.5.5", + "@types/react": "^18.3.6", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^8.1.0", - "@typescript-eslint/parser": "^8.1.0", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "@typescript-eslint/parser": "^8.5.0", "drizzle-kit": "^0.24.2", - "eslint": "^8.57.0", - "eslint-config-next": "^14.2.4", + "eslint": "^9.10.0", + "eslint-config-next": "^14.2.11", "eslint-plugin-drizzle": "^0.2.3", - "postcss": "^8.4.45", + "postcss": "^8.4.47", "prettier": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.6", "tailwindcss": "^3.4.11", diff --git a/scripts/reset.sh b/scripts/reset.sh new file mode 100755 index 0000000..86657ac --- /dev/null +++ b/scripts/reset.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +export PGUSER=postgres +export PGPASSWORD=hackme +export PGHOST=localhost + +echo Removing migrations +rm -rf drizzle +echo "Dropping db" + +dropdb -f --if-exists opengifame +echo "Creating db" +createdb opengifame + +source .env.development +bun run db:generate +bun run db:push + +rm /srv/dev/opengifame/working/uploads/* -rfv +# # bun run src/db/migrate.ts +# bun run ./src/server/db/scripts/seed.ts +# bun run ./src/server/db/scripts/auth.ts diff --git a/src/app/api/upload/post/route.ts b/src/app/api/upload/post/route.ts index 7ecced6..817f7bc 100644 --- a/src/app/api/upload/post/route.ts +++ b/src/app/api/upload/post/route.ts @@ -2,6 +2,13 @@ import { getServerSession } from "next-auth"; import { StatusCodes } from "http-status-codes"; import { env } from "@/env"; import { type NextRequest, NextResponse } from "next/server"; +import fs from "fs"; +import { pipeline } from "stream"; +import { promisify } from "util"; +import path from "path"; +import { FilePen } from "lucide-react"; +import { fileURLToPath } from "url"; +const pump = promisify(pipeline); export async function POST(request: NextRequest) { const session = await getServerSession(); @@ -12,15 +19,31 @@ export async function POST(request: NextRequest) { status: StatusCodes.UNAUTHORIZED, }); } - const searchParams = request.nextUrl.searchParams; - const id = searchParams.get("id"); + const id = request.nextUrl.searchParams.get("id"); - const uploadDir = env.UPLOAD_PATH; - return Response.json( - { - id, - session, - uploadDir, - } - ); + if (!id) { + return NextResponse.json({ + error: "No post id in query", + status: StatusCodes.BAD_REQUEST, + }); + } + const formData = await request.formData(); + const body = Object.fromEntries(formData); + const file = (body.image as Blob) || null; + + if (file) { + const buffer = Buffer.from(await file.arrayBuffer()); + const extension = path.extname((body.image as File).name); + const filePath = `${id}${extension}`; + + fs.writeFileSync(path.resolve(env.UPLOAD_PATH, filePath), buffer); + return NextResponse.json({ + success: true, + url: env.NEXT_PUBLIC_SITE_URL + `/i/${filePath}`, + }); + } + return NextResponse.json({ + error: "Cannot find file in form data", + status: StatusCodes.BAD_REQUEST, + }); } diff --git a/src/components/pages/landing-page.tsx b/src/components/pages/landing-page.tsx index b58d3cb..2115222 100644 --- a/src/components/pages/landing-page.tsx +++ b/src/components/pages/landing-page.tsx @@ -3,10 +3,10 @@ import React from "react"; const LandingPage: React.FC = () => { return (
-
-

- Warning contains{" "} - Gifs +
+

+ Contains + Gifs

diff --git a/src/components/pages/upload-page.tsx b/src/components/pages/upload-page.tsx index 8b0b4ed..4430676 100644 --- a/src/components/pages/upload-page.tsx +++ b/src/components/pages/upload-page.tsx @@ -19,6 +19,8 @@ import { env } from "@/env"; import { logger } from "@/lib/logger"; import { api } from "@/trpc/react"; import { STATUS_CODES } from "http"; +import { StatusCodes } from "http-status-codes"; +import { z } from "zod"; type FormValues = { title: string; @@ -38,6 +40,21 @@ const UploadPage: React.FC = () => { image: undefined, }, }); + + // const imageSchema = z.object({ + // image: z + // .any() + // .refine((file) => { + // if (file.size === 0 || file.name === undefined) return false; + // else return true; + // }, "Please update or add new image.") + + // .refine( + // (file) => ACCEPTED_IMAGE_TYPES.includes(file?.type), + // ".jpg, .jpeg, .png and .webp files are accepted.", + // ) + // .refine((file) => file.size <= MAX_FILE_SIZE, `Max file size is 5MB.`), + // }); const createImage = api.image.create.useMutation({ onSuccess: async (e) => { console.log("upload-page", "onSuccess", e); @@ -45,13 +62,16 @@ const UploadPage: React.FC = () => { if (e.id && file) { const body = new FormData(); body.set("image", file); - const response = await fetch(`/api/upload/profile-image?${e.id}`, { + const response = await fetch(`/api/upload/post?id=${e.id}`, { method: "POST", body, }); - - await utils.image.invalidate(); - router.replace("/"); + if (response.status === StatusCodes.CREATED) { + await utils.image.invalidate(); + router.replace("/"); + } + logger.error("upload-page", "createImage", response.statusText); + throw new Error(response.statusText); } else { //TODO: Probably need to delete the image from the database logger.error("upload-page", "onSuccess", "Error uploading image"); diff --git a/src/components/trending-images.tsx b/src/components/trending-images.tsx index a552404..3470e1c 100644 --- a/src/components/trending-images.tsx +++ b/src/components/trending-images.tsx @@ -3,7 +3,6 @@ import { useState } from "react"; import { api } from "@/trpc/react"; -import ImageUpload from "./widgets/image-upload"; export function TrendingImages() { const [latestPost] = api.post.getLatest.useSuspenseQuery(); diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 0000000..1cc5c34 --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,5 @@ +export { default } from "next-auth/middleware"; + +export const config = { + matcher: ["/upload(.*)"], +}; diff --git a/src/server/api/routers/post.ts b/src/server/api/routers/post.ts index 011a10c..a398eaa 100644 --- a/src/server/api/routers/post.ts +++ b/src/server/api/routers/post.ts @@ -27,7 +27,7 @@ export const postRouter = createTRPCRouter({ }), getLatest: publicProcedure.query(async ({ ctx }) => { - const post = await ctx.db.query.posts.findFirst({ + const post = await ctx.db.query.images.findMany({ orderBy: (posts, { desc }) => [desc(posts.createdAt)], }); diff --git a/src/server/db/index.ts b/src/server/db/index.ts index 8cc0d71..7620318 100644 --- a/src/server/db/index.ts +++ b/src/server/db/index.ts @@ -11,7 +11,6 @@ import * as schema from "./schema"; const globalForDb = globalThis as unknown as { conn: postgres.Sql | undefined; }; - export const connection = globalForDb.conn ?? postgres(env.DATABASE_URL); if (env.NODE_ENV !== "production") globalForDb.conn = connection;