From 15adfa9d33775fce68877851d7babb07cf3279c9 Mon Sep 17 00:00:00 2001 From: Noah Solomon Date: Tue, 14 May 2024 14:21:14 -0400 Subject: [PATCH] watch --- src/app/page.tsx | 70 +++---- src/app/watch/page.tsx | 265 ++++++++++++++++++++++++++ src/components/ui/carousel.tsx | 6 +- src/middleware.ts | 2 + src/server/api/routers/users.ts | 18 +- src/server/db/schemas/users/schema.ts | 38 ++++ 6 files changed, 350 insertions(+), 49 deletions(-) create mode 100644 src/app/watch/page.tsx diff --git a/src/app/page.tsx b/src/app/page.tsx index df71832..8b88970 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -10,11 +10,13 @@ import { toast } from "sonner"; import { Coins, Crown, + Eye, Folder, Gem, Github, HeartCrack, Loader2, + Skull, Star, StarIcon, Wand, @@ -155,58 +157,21 @@ export default function Home({ alt="brainrot" className="cursor-pointer rounded-full border-[10px] border-card shadow-lg transition-all hover:scale-[101%] active:scale-[99%] dark:border-primary" /> -
- - - {userDB?.user?.subscribed ? ( - <> - PRO - - ) : ( - <> - Free Mode - - )} - - +

BRAINROT.JS - - - {userDB?.user?.subscribed ? ( - <> - PRO - - ) : ( - <> - Free Mode - - )} - - +

+ 5,000+ videos generated 💀 +

+

- now open source! -

+
star on github{" "} @@ -300,7 +265,22 @@ export default function Home({ > Create Video - {userDB?.user?.id && !userDB?.user?.subscribed ? ( + + Watch + + NEW + + + {/* {userDB?.user?.id && !userDB?.user?.subscribed ? ( - ) : null} + ) : null} */} {pendingVideo ? ( ); @@ -234,7 +234,7 @@ const CarouselNext = React.forwardRef< onClick={scrollNext} {...props} > - + Next slide ); diff --git a/src/middleware.ts b/src/middleware.ts index ba5a911..44a3cee 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -6,11 +6,13 @@ export default authMiddleware({ "/", "/api/create", "/api/trpc/user.videoStatus", + "/api/trpc/user.getVideos", "/api/trpc/user.user", "/api/trpc/user.videoStatus,user.user", "/renders/((?!_next|static|favicon.ico).*)", "/api/webhooks/stripe", "/api/((?!_next|static|favicon.ico).*)", + "/watch", ], ignoredRoutes: ["/api/webhooks/stripe"], }); diff --git a/src/server/api/routers/users.ts b/src/server/api/routers/users.ts index 4d02bf2..1dd3f7f 100644 --- a/src/server/api/routers/users.ts +++ b/src/server/api/routers/users.ts @@ -8,7 +8,7 @@ import { pendingVideos, videos, } from "@/server/db/schemas/users/schema"; -import { eq, or } from "drizzle-orm"; +import { eq, or, sql } from "drizzle-orm"; import { currentUser } from "@clerk/nextjs"; import { z } from "zod"; import OpenAI from "openai"; @@ -179,6 +179,17 @@ export const userRouter = createTRPCRouter({ return { videos: userVideosDb }; }), + getVideos: publicProcedure + .input(z.object({ page: z.number().optional() })) + .query(async ({ ctx, input }) => { + const userVideosDb = await ctx.db.query.videos.findMany({ + limit: 5, + orderBy: sql`rand()`, + }); + + return { videos: userVideosDb }; + }), + newUserVideo: protectedProcedure.query(async ({ ctx }) => { const userVideosDb = await ctx.db.query.videos.findMany({ where: eq(videos.user_id, ctx.user_id), @@ -319,6 +330,11 @@ export const userRouter = createTRPCRouter({ metadata: { userId: ctx.user_id, }, + subscription_data: { + metadata: { + userId: ctx.user_id, + }, + }, }); console.log("created session!"); diff --git a/src/server/db/schemas/users/schema.ts b/src/server/db/schemas/users/schema.ts index 146d98c..4a33ed2 100644 --- a/src/server/db/schemas/users/schema.ts +++ b/src/server/db/schemas/users/schema.ts @@ -91,3 +91,41 @@ export const pendingVideos = mysqlTable( userIdxVideoIdx: uniqueIndex("user_idx_video_idx").on(t.user_id, t.videoId), }), ); + +export const deepaiVideos = mysqlTable( + "deepai_videos", + { + id: int("id").primaryKey().autoincrement(), + agent1: varchar("agent1", { length: 100 }).notNull(), + agent2: varchar("agent2", { length: 100 }).notNull(), + title: varchar("title", { length: 1000 }).notNull().default(""), + url: varchar("url", { length: 1000 }).notNull(), + videoId: varchar("video_id", { length: 100 }).unique().notNull(), + }, + (t) => ({ + videoIdx: uniqueIndex("video_idx").on(t.videoId), + }), +); + +export const pendingDeepaiVideos = mysqlTable( + "pending_deepai_videos", + { + id: int("id").primaryKey().autoincrement(), + agent1: varchar("agent1", { length: 100 }).notNull(), + agent2: varchar("agent2", { length: 100 }).notNull(), + title: varchar("title", { length: 1000 }).notNull().default(""), + videoId: varchar("video_id", { length: 100 }).unique().notNull(), + url: varchar("url", { length: 1000 }).default(""), + timestamp: datetime("timestamp", { mode: "date" }), + fps: int("fps").notNull(), + aiGeneratedImages: boolean("ai_generated_images").notNull(), + background: varchar("background", { length: 100 }).notNull(), + music: varchar("music", { length: 100 }).notNull(), + processId: int("process_id").notNull().default(-1), + status: varchar("status", { length: 500 }).notNull(), + progress: int("progress").notNull().default(0), + }, + (t) => ({ + videoIdx: uniqueIndex("video_idx").on(t.videoId), + }), +);