From bc80fc0d6064860cbdb9cf4d3870a474a8e2e789 Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Fri, 20 Sep 2024 16:27:36 +0100 Subject: [PATCH] Slugifying URLs.. --- bun.lockb | Bin 404583 -> 405787 bytes ..._rogers.sql => 0000_burly_katie_power.sql} | 6 +- drizzle/meta/0000_snapshot.json | 51 +++++++++++++++- drizzle/meta/_journal.json | 4 +- next.config.js | 3 + package.json | 1 + scripts/scaffold.sql | 12 ++++ src/app/(site)/(app)/image/[slug]/page.tsx | 13 +++++ src/app/(site)/{ => (app)}/upload/page.tsx | 0 src/components/pages/image/image-page.tsx | 12 ++++ src/components/widgets/user-nav-dropdown.tsx | 1 - src/lib/models/post.ts | 8 +++ src/server/api/routers/image.ts | 55 +++++++++++++++--- src/server/db/schema.ts | 48 +++++++++------ 14 files changed, 180 insertions(+), 34 deletions(-) rename drizzle/{0000_wandering_steve_rogers.sql => 0000_burly_katie_power.sql} (88%) create mode 100644 scripts/scaffold.sql create mode 100644 src/app/(site)/(app)/image/[slug]/page.tsx rename src/app/(site)/{ => (app)}/upload/page.tsx (100%) create mode 100644 src/components/pages/image/image-page.tsx create mode 100644 src/lib/models/post.ts diff --git a/bun.lockb b/bun.lockb index c1357ac632e4a843a28c9315a594db93a8cdcdc0..cb7620628f06b474ce2ecc1b44ac28865ecc4ebc 100755 GIT binary patch delta 73588 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�+$ZxRPU0FGgBKR5Q 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 CdZ9Z2 delta 73367 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�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 statement-breakpoint CREATE TABLE IF NOT EXISTS "images" ( "id" varchar(255) PRIMARY KEY NOT NULL, + "slug" varchar(255) NOT NULL, "title" varchar(256), "description" varchar, "tags" text[], "filepath" 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 + "updated_at" timestamp with time zone, + CONSTRAINT "images_slug_unique" UNIQUE("slug") ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "sessions" ( @@ -65,4 +67,6 @@ EXCEPTION END $$; --> statement-breakpoint CREATE INDEX IF NOT EXISTS "account_user_id_idx" ON "accounts" USING btree ("user_id");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "image_user_id_idx" ON "images" USING btree ("created_by");--> statement-breakpoint +CREATE INDEX IF NOT EXISTS "image_slug_idx" ON "images" USING btree ("slug");--> statement-breakpoint CREATE INDEX IF NOT EXISTS "session_user_id_idx" ON "sessions" USING btree ("user_id"); \ No newline at end of file diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json index 0be79c4..390a6e7 100644 --- a/drizzle/meta/0000_snapshot.json +++ b/drizzle/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "f7541b9a-140c-4795-a672-4d0c80b56ef1", + "id": "6010a064-33aa-404b-b933-c4ca1f1c415d", "prevId": "00000000-0000-0000-0000-000000000000", "version": "7", "dialect": "postgresql", @@ -128,6 +128,12 @@ "primaryKey": true, "notNull": true }, + "slug": { + "name": "slug", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, "title": { "name": "title", "type": "varchar(256)", @@ -172,7 +178,38 @@ "notNull": false } }, - "indexes": {}, + "indexes": { + "image_user_id_idx": { + "name": "image_user_id_idx", + "columns": [ + { + "expression": "created_by", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "image_slug_idx": { + "name": "image_slug_idx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, "foreignKeys": { "images_created_by_users_id_fk": { "name": "images_created_by_users_id_fk", @@ -189,7 +226,15 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": { + "images_slug_unique": { + "name": "images_slug_unique", + "nullsNotDistinct": false, + "columns": [ + "slug" + ] + } + } }, "public.sessions": { "name": "sessions", diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json index 80007ba..b5e9169 100644 --- a/drizzle/meta/_journal.json +++ b/drizzle/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "7", - "when": 1726662474693, - "tag": "0000_wandering_steve_rogers", + "when": 1726843311417, + "tag": "0000_burly_katie_power", "breakpoints": true } ] diff --git a/next.config.js b/next.config.js index 74f3878..c2528bd 100644 --- a/next.config.js +++ b/next.config.js @@ -14,6 +14,9 @@ const config = { { hostname: "opengifame.dev.fergl.ie", }, + { + hostname: "cloudflare-ipfs.com", + }, { hostname: "localhost", }, diff --git a/package.json b/package.json index 5ce4bd5..64be64a 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "@radix-ui/react-toggle": "^1.1.0", "@radix-ui/react-toggle-group": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.2", + "@sindresorhus/slugify": "^2.2.1", "@t3-oss/env-nextjs": "^0.11.1", "@tanstack/react-query": "^5.56.2", "@trpc/client": "^11.0.0-rc.446", diff --git a/scripts/scaffold.sql b/scripts/scaffold.sql new file mode 100644 index 0000000..c9f96f8 --- /dev/null +++ b/scripts/scaffold.sql @@ -0,0 +1,12 @@ +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('974248ec-ae31-4c1a-900d-348432e16e90', 'Frasier "directs" Niles', 'Ham Radio', '{}', '974248ec-ae31-4c1a-900d-348432e16e90.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:26:51.350362 +00:00', '2024-09-18 15:26:51.639000 +00:00', 'frasier-directs-niles'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('18fac61f-d2c4-4248-b74b-5d23e8717bbc', 'Frasier groaning.', 'Frasier & Niles in Nervosa', '{}', '18fac61f-d2c4-4248-b74b-5d23e8717bbc.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:46.438441 +00:00', '2024-09-18 15:27:46.477000 +00:00', 'frasier-groaning'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('56e89352-aa69-4a9e-92c4-5eb3e8e94703', 'Frasier tasting caviar', 'From Roe to Perdition S10E18 ', '{}', '56e89352-aa69-4a9e-92c4-5eb3e8e94703.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:28.599836 +00:00', '2024-09-18 15:27:28.632000 +00:00', 'frasier-tasting-caviar'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('38d3e400-20a3-49be-bf8f-5c4c77ab3a9f', 'Niles gets a class of champagne in the face', 'From Voyage of the Damned', '{}', '38d3e400-20a3-49be-bf8f-5c4c77ab3a9f.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:01.933852 +00:00', '2024-09-18 15:27:01.967000 +00:00', 'niles-gets-a-class-of-champagne-in-the-face'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('4aa77fab-cfe4-4f5d-ba62-c674b43b09c8', 'I miss being unapproachable', 'From Good Grief', '{}', '4aa77fab-cfe4-4f5d-ba62-c674b43b09c8.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:18.617006 +00:00', '2024-09-18 15:27:18.651000 +00:00', 'i-miss-being-unapproachable'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('062edc3f-2d3c-4d97-a569-f41804d6d352', 'I''m having one now', 'Niles has never had an unexpressed thought', '{niles,frasier}', '062edc3f-2d3c-4d97-a569-f41804d6d352.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:59.258519 +00:00', '2024-09-18 15:27:59.283000 +00:00', 'i-m-having-one-now'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('ced6dc13-10b4-43d7-8072-0db2091840d7', 'Wounded!!!', 'Frasier is wounded', '{frasier,wounded}', 'ced6dc13-10b4-43d7-8072-0db2091840d7.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:37.875584 +00:00', '2024-09-18 15:27:37.914000 +00:00', 'wounded'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('13c54e08-2fd6-4810-982f-14b701e38b5f', 'Rrrrreally.', 'Guy checks out Niles'' bottom', '{}', '13c54e08-2fd6-4810-982f-14b701e38b5f.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:13.414832 +00:00', '2024-09-18 15:27:13.442000 +00:00', 'rrrrreally'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('d23df48f-2b99-4b29-90fd-2f3cff205010', 'Successful High Five', 'Niles & Frasier successfully complete a high five (including behind the back down low).', '{}', 'd23df48f-2b99-4b29-90fd-2f3cff205010.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:51.131650 +00:00', '2024-09-18 15:27:51.152000 +00:00', 'successful-high-five'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('0ccfccd4-c24f-42a0-9864-2cb8d230bb16', 'Niles clapping', 'Niles is excited', '{}', '0ccfccd4-c24f-42a0-9864-2cb8d230bb16.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:33.156638 +00:00', '2024-09-18 15:27:33.220000 +00:00', 'niles-clapping'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('4a208725-453d-4d0c-b620-cc82b7192ea8', 'I just want to die!!', '', '{}', '4a208725-453d-4d0c-b620-cc82b7192ea8.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:07.374464 +00:00', '2024-09-18 15:27:07.396000 +00:00', 'i-just-want-to-die'); +INSERT INTO public.images (id, title, description, tags, filepath, created_by, created_at, updated_at, slug) VALUES ('4a2a52a2-85eb-417c-bdb8-a1d0101df17f', 'Some boys go to college.', 'Oh, some boys go to college, but we think they''re all wussies, cuz they get all the knowledge, and we get all the...', '{}', '4a2a52a2-85eb-417c-bdb8-a1d0101df17f.gif', '6c98e4e0-873c-4bd0-a059-93177709eddd', '2024-09-18 15:27:42.138300 +00:00', '2024-09-18 15:27:42.175000 +00:00', 'some-boys-go-to-college'); diff --git a/src/app/(site)/(app)/image/[slug]/page.tsx b/src/app/(site)/(app)/image/[slug]/page.tsx new file mode 100644 index 0000000..60316a9 --- /dev/null +++ b/src/app/(site)/(app)/image/[slug]/page.tsx @@ -0,0 +1,13 @@ +import { api } from "@/trpc/server"; + +type ImageRouteParams = { + slug: string; +}; +const ImageRoute = async ({ params }: { params: ImageRouteParams }) => { + // const ImageRoute = ({ slug }: ImageRouteParams) => { + + const image = await api.image.getBySlug(); + return
Me so imagey {params.slug}
; +}; + +export default ImageRoute; diff --git a/src/app/(site)/upload/page.tsx b/src/app/(site)/(app)/upload/page.tsx similarity index 100% rename from src/app/(site)/upload/page.tsx rename to src/app/(site)/(app)/upload/page.tsx diff --git a/src/components/pages/image/image-page.tsx b/src/components/pages/image/image-page.tsx new file mode 100644 index 0000000..66d1cfd --- /dev/null +++ b/src/components/pages/image/image-page.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import { Post } from "@/lib/models/post"; + +type ImagePageProps = { + post: Post; +}; + +const ImagePage: React.FC = ({ post }) => { + return
{post.title}
; +}; + +export default ImagePage; diff --git a/src/components/widgets/user-nav-dropdown.tsx b/src/components/widgets/user-nav-dropdown.tsx index d36a456..8e8801d 100644 --- a/src/components/widgets/user-nav-dropdown.tsx +++ b/src/components/widgets/user-nav-dropdown.tsx @@ -15,7 +15,6 @@ const UserNavDropdown: React.FC = ({ session }) => { session?.user?.image || "/images/default-profile.jpg", ); React.useEffect(() => { - logger.debug("UserNavDropdown", "session", session); setProfileImage(session?.user?.image || "/images/default-profile.jpg"); }, [session]); diff --git a/src/lib/models/post.ts b/src/lib/models/post.ts new file mode 100644 index 0000000..0593fad --- /dev/null +++ b/src/lib/models/post.ts @@ -0,0 +1,8 @@ +export type Post = { + slug: string; + title: string; + description: string; + likes: number; + dislikes: number; + datePosted: Date; +} \ No newline at end of file diff --git a/src/server/api/routers/image.ts b/src/server/api/routers/image.ts index 41af296..e386aea 100644 --- a/src/server/api/routers/image.ts +++ b/src/server/api/routers/image.ts @@ -3,17 +3,34 @@ import { protectedProcedure, publicProcedure, } from "@/server/api/trpc"; +import { slugifyWithCounter } from "@sindresorhus/slugify"; import { z } from "zod"; -import { images } from "@/server/db/schema"; +import { images, users } from "@/server/db/schema"; import { env } from "@/env"; - -const imageCreateType = { - title: z.string().min(5), - description: z.string(), - tags: z.array(z.string()), -}; +import { and, eq } from "drizzle-orm"; export const imageRouter = createTRPCRouter({ + getBySlug: publicProcedure + .input(z.object({ slug: z.string() })) + .query(async ({ ctx, input }) => { + const image = ( + await ctx.db + .select() + .from(images) + .where(and(eq(images.slug, input.slug))) + .limit(1) + )[0]; + if (!image) { + throw new Error("Image not found"); + } + return { + id: image.id, + title: image.title, + description: image.description, + tags: image.tags, + url: `${env.IMAGE_BASE_URL}/${image.filePath}`, + }; + }), getTrending: publicProcedure.query(async ({ ctx }) => { const trending = await ctx.db.query.images.findMany({ orderBy: (images, { desc }) => [desc(images.createdAt)], @@ -31,12 +48,34 @@ export const imageRouter = createTRPCRouter({ ); }), create: protectedProcedure - .input(z.object(imageCreateType)) + .input( + z.object({ + title: z.string().min(5), + description: z.string(), + tags: z.array(z.string()), + }), + ) .mutation(async ({ ctx, input }) => { + var slugify = slugifyWithCounter(); + var found = false; + var slug = ""; + do { + slug = slugify(input.title); + const existing = await ctx.db + .select() + .from(images) + .where(and(eq(images.slug, slug))) + .limit(1); + if (!existing[0]) { + found = true; + } + } while (!found); + const post = await ctx.db .insert(images) .values({ title: input.title, + slug: slug, description: input.description, tags: input.tags, createdById: ctx.session.user.id, diff --git a/src/server/db/schema.ts b/src/server/db/schema.ts index e3665c0..946eada 100644 --- a/src/server/db/schema.ts +++ b/src/server/db/schema.ts @@ -13,25 +13,35 @@ import { type AdapterAccount } from "next-auth/adapters"; export const createTable = pgTableCreator((name) => `${name}`); -export const images = createTable("images", { - id: varchar("id", { length: 255 }) - .notNull() - .primaryKey() - .$defaultFn(() => crypto.randomUUID()), - title: varchar("title", { length: 256 }), - description: varchar("description"), - tags: text("tags").array(), - filePath: varchar("filepath", { length: 256 }), - createdById: varchar("created_by", { length: 255 }) - .notNull() - .references(() => users.id), - createdAt: timestamp("created_at", { withTimezone: true }) - .default(sql`CURRENT_TIMESTAMP`) - .notNull(), - updatedAt: timestamp("updated_at", { withTimezone: true }).$onUpdate( - () => new Date(), - ), -}); +export const images = createTable( + "images", + { + id: varchar("id", { length: 255 }) + .notNull() + .primaryKey() + .$defaultFn(() => crypto.randomUUID()), + slug: varchar("slug", { length: 255 }).notNull().unique(), + title: varchar("title", { length: 256 }), + description: varchar("description"), + tags: text("tags").array(), + filePath: varchar("filepath", { length: 256 }), + createdById: varchar("created_by", { length: 255 }) + .notNull() + .references(() => users.id), + createdAt: timestamp("created_at", { withTimezone: true }) + .default(sql`CURRENT_TIMESTAMP`) + .notNull(), + updatedAt: timestamp("updated_at", { withTimezone: true }).$onUpdate( + () => new Date(), + ), + }, + (table) => { + return { + userIndex: index("image_user_id_idx").on(table.createdById), + slugIndex: index("image_slug_idx").on(table.slug), + }; + }, +); export const users = createTable("users", { id: varchar("id", { length: 255 })