From 63ce33c559e2b1ac5458ce9077377e979350fe5e Mon Sep 17 00:00:00 2001 From: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:49:34 +0300 Subject: [PATCH 1/4] update some queries --- apps/web/actions/organizations/add-videos.ts | 9 ++- apps/web/actions/spaces/get-user-videos.ts | 71 ++++++++++--------- apps/web/app/(org)/dashboard/caps/page.tsx | 2 + .../(org)/dashboard/spaces/[spaceId]/page.tsx | 7 +- apps/web/lib/folder.ts | 16 +++-- 5 files changed, 61 insertions(+), 44 deletions(-) diff --git a/apps/web/actions/organizations/add-videos.ts b/apps/web/actions/organizations/add-videos.ts index a811dcd623..1146bb6e31 100644 --- a/apps/web/actions/organizations/add-videos.ts +++ b/apps/web/actions/organizations/add-videos.ts @@ -10,7 +10,7 @@ import { videos, } from "@cap/database/schema"; import type { Organisation, Video } from "@cap/web-domain"; -import { and, eq, inArray } from "drizzle-orm"; +import { and, eq, inArray, isNull } from "drizzle-orm"; import { revalidatePath } from "next/cache"; export async function addVideosToOrganization( @@ -31,7 +31,12 @@ export async function addVideosToOrganization( const [organization] = await db() .select() .from(organizations) - .where(eq(organizations.id, organizationId)); + .where( + and( + eq(organizations.id, organizationId), + isNull(organizations.tombstoneAt), + ), + ); if (!organization) { throw new Error("Organization not found"); diff --git a/apps/web/actions/spaces/get-user-videos.ts b/apps/web/actions/spaces/get-user-videos.ts index 201eb8647a..6c23899166 100644 --- a/apps/web/actions/spaces/get-user-videos.ts +++ b/apps/web/actions/spaces/get-user-videos.ts @@ -5,6 +5,7 @@ import { getCurrentUser } from "@cap/database/auth/session"; import { comments, folders, + organizations, sharedVideos, spaces, spaceVideos, @@ -13,7 +14,7 @@ import { videoUploads, } from "@cap/database/schema"; import type { Space } from "@cap/web-domain"; -import { and, desc, eq, sql } from "drizzle-orm"; +import { and, desc, eq, isNull, sql } from "drizzle-orm"; export async function getUserVideos(spaceId: Space.SpaceIdOrOrganisationId) { try { @@ -48,23 +49,24 @@ export async function getUserVideos(spaceId: Space.SpaceIdOrOrganisationId) { ), }; - const videoData = isAllSpacesEntry - ? await db() - .select(selectFields) - .from(videos) - .leftJoin(comments, eq(videos.id, comments.videoId)) - .leftJoin(users, eq(videos.ownerId, users.id)) - .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) - .leftJoin( - sharedVideos, - and( - eq(videos.id, sharedVideos.videoId), - eq(sharedVideos.organizationId, spaceId), - ), - ) - .leftJoin(folders, eq(sharedVideos.folderId, folders.id)) - .leftJoin(spaces, eq(folders.spaceId, spaces.id)) - .where(eq(videos.ownerId, userId)) + const videoData = isAllSpacesEntry + ? await db() + .select(selectFields) + .from(videos) + .leftJoin(comments, eq(videos.id, comments.videoId)) + .leftJoin(users, eq(videos.ownerId, users.id)) + .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) + .leftJoin( + sharedVideos, + and( + eq(videos.id, sharedVideos.videoId), + eq(sharedVideos.organizationId, spaceId), + ), + ) + .leftJoin(folders, eq(sharedVideos.folderId, folders.id)) + .leftJoin(spaces, eq(folders.spaceId, spaces.id)) + .leftJoin(organizations, eq(videos.orgId, organizations.id)) + .where(and(eq(videos.ownerId, userId), isNull(organizations.tombstoneAt))) .groupBy( videos.id, videos.ownerId, @@ -83,22 +85,23 @@ export async function getUserVideos(spaceId: Space.SpaceIdOrOrganisationId) { ${videos.createdAt} )`), ) - : await db() - .select(selectFields) - .from(videos) - .leftJoin(comments, eq(videos.id, comments.videoId)) - .leftJoin(users, eq(videos.ownerId, users.id)) - .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) - .leftJoin( - spaceVideos, - and( - eq(videos.id, spaceVideos.videoId), - eq(spaceVideos.spaceId, spaceId), - ), - ) - .leftJoin(folders, eq(spaceVideos.folderId, folders.id)) - .leftJoin(spaces, eq(folders.spaceId, spaces.id)) - .where(eq(videos.ownerId, userId)) + : await db() + .select(selectFields) + .from(videos) + .leftJoin(comments, eq(videos.id, comments.videoId)) + .leftJoin(users, eq(videos.ownerId, users.id)) + .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) + .leftJoin( + spaceVideos, + and( + eq(videos.id, spaceVideos.videoId), + eq(spaceVideos.spaceId, spaceId), + ), + ) + .leftJoin(folders, eq(spaceVideos.folderId, folders.id)) + .leftJoin(spaces, eq(folders.spaceId, spaces.id)) + .leftJoin(organizations, eq(videos.orgId, organizations.id)) + .where(and(eq(videos.ownerId, userId), isNull(organizations.tombstoneAt))) .groupBy( videos.id, videos.ownerId, diff --git a/apps/web/app/(org)/dashboard/caps/page.tsx b/apps/web/app/(org)/dashboard/caps/page.tsx index a4da232f39..f31fb1e2d8 100644 --- a/apps/web/app/(org)/dashboard/caps/page.tsx +++ b/apps/web/app/(org)/dashboard/caps/page.tsx @@ -128,6 +128,7 @@ export default async function CapsPage(props: PageProps<"/dashboard/caps">) { and( eq(videos.ownerId, userId), eq(organizations.id, user.activeOrganizationId), + isNull(organizations.tombstoneAt), ), ); @@ -185,6 +186,7 @@ export default async function CapsPage(props: PageProps<"/dashboard/caps">) { eq(videos.ownerId, userId), eq(videos.orgId, user.activeOrganizationId), isNull(videos.folderId), + isNull(organizations.tombstoneAt), ), ) .groupBy( diff --git a/apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx b/apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx index f90bd86501..b230709324 100644 --- a/apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx +++ b/apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx @@ -201,8 +201,13 @@ export default async function SharedCapsPage(props: { .leftJoin(comments, eq(videos.id, comments.videoId)) .leftJoin(users, eq(videos.ownerId, users.id)) .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) + .leftJoin(organizations, eq(videos.orgId, organizations.id)) .where( - and(eq(spaceVideos.spaceId, spaceId), isNull(spaceVideos.folderId)), + and( + eq(spaceVideos.spaceId, spaceId), + isNull(spaceVideos.folderId), + isNull(organizations.tombstoneAt), + ), ) .groupBy( videos.id, diff --git a/apps/web/lib/folder.ts b/apps/web/lib/folder.ts index f7222e4468..5559c6fb5b 100644 --- a/apps/web/lib/folder.ts +++ b/apps/web/lib/folder.ts @@ -14,10 +14,9 @@ import { import { Database, ImageUploads } from "@cap/web-backend"; import type { ImageUpload, Organisation, Space, Video } from "@cap/web-domain"; import { CurrentUser, Folder } from "@cap/web-domain"; -import { and, desc, eq } from "drizzle-orm"; +import { and, desc, eq, isNull } from "drizzle-orm"; import { sql } from "drizzle-orm/sql"; import { Effect } from "effect"; -import { runPromise } from "./server"; export const getFolderById = Effect.fn(function* (folderId: string) { if (!folderId) throw new Error("Folder ID is required"); @@ -220,11 +219,14 @@ export const getVideosByFolderId = Effect.fn(function* ( .leftJoin(users, eq(videos.ownerId, users.id)) .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) .where( - root.variant === "space" - ? eq(spaceVideos.folderId, folderId) - : root.variant === "org" - ? eq(sharedVideos.folderId, folderId) - : eq(videos.folderId, folderId), + and( + root.variant === "space" + ? eq(spaceVideos.folderId, folderId) + : root.variant === "org" + ? eq(sharedVideos.folderId, folderId) + : eq(videos.folderId, folderId), + isNull(organizations.tombstoneAt), + ), ) .groupBy( videos.id, From 61549b21c7f1e24f1c051559586265962779b4ef Mon Sep 17 00:00:00 2001 From: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:52:57 +0300 Subject: [PATCH 2/4] formatting --- apps/web/actions/spaces/get-user-videos.ts | 74 ++++++++++++---------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/apps/web/actions/spaces/get-user-videos.ts b/apps/web/actions/spaces/get-user-videos.ts index 6c23899166..937d19d74d 100644 --- a/apps/web/actions/spaces/get-user-videos.ts +++ b/apps/web/actions/spaces/get-user-videos.ts @@ -49,24 +49,26 @@ export async function getUserVideos(spaceId: Space.SpaceIdOrOrganisationId) { ), }; - const videoData = isAllSpacesEntry - ? await db() - .select(selectFields) - .from(videos) - .leftJoin(comments, eq(videos.id, comments.videoId)) - .leftJoin(users, eq(videos.ownerId, users.id)) - .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) - .leftJoin( - sharedVideos, - and( - eq(videos.id, sharedVideos.videoId), - eq(sharedVideos.organizationId, spaceId), - ), - ) - .leftJoin(folders, eq(sharedVideos.folderId, folders.id)) - .leftJoin(spaces, eq(folders.spaceId, spaces.id)) - .leftJoin(organizations, eq(videos.orgId, organizations.id)) - .where(and(eq(videos.ownerId, userId), isNull(organizations.tombstoneAt))) + const videoData = isAllSpacesEntry + ? await db() + .select(selectFields) + .from(videos) + .leftJoin(comments, eq(videos.id, comments.videoId)) + .leftJoin(users, eq(videos.ownerId, users.id)) + .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) + .leftJoin( + sharedVideos, + and( + eq(videos.id, sharedVideos.videoId), + eq(sharedVideos.organizationId, spaceId), + ), + ) + .leftJoin(folders, eq(sharedVideos.folderId, folders.id)) + .leftJoin(spaces, eq(folders.spaceId, spaces.id)) + .leftJoin(organizations, eq(videos.orgId, organizations.id)) + .where( + and(eq(videos.ownerId, userId), isNull(organizations.tombstoneAt)), + ) .groupBy( videos.id, videos.ownerId, @@ -85,23 +87,25 @@ export async function getUserVideos(spaceId: Space.SpaceIdOrOrganisationId) { ${videos.createdAt} )`), ) - : await db() - .select(selectFields) - .from(videos) - .leftJoin(comments, eq(videos.id, comments.videoId)) - .leftJoin(users, eq(videos.ownerId, users.id)) - .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) - .leftJoin( - spaceVideos, - and( - eq(videos.id, spaceVideos.videoId), - eq(spaceVideos.spaceId, spaceId), - ), - ) - .leftJoin(folders, eq(spaceVideos.folderId, folders.id)) - .leftJoin(spaces, eq(folders.spaceId, spaces.id)) - .leftJoin(organizations, eq(videos.orgId, organizations.id)) - .where(and(eq(videos.ownerId, userId), isNull(organizations.tombstoneAt))) + : await db() + .select(selectFields) + .from(videos) + .leftJoin(comments, eq(videos.id, comments.videoId)) + .leftJoin(users, eq(videos.ownerId, users.id)) + .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) + .leftJoin( + spaceVideos, + and( + eq(videos.id, spaceVideos.videoId), + eq(spaceVideos.spaceId, spaceId), + ), + ) + .leftJoin(folders, eq(spaceVideos.folderId, folders.id)) + .leftJoin(spaces, eq(folders.spaceId, spaces.id)) + .leftJoin(organizations, eq(videos.orgId, organizations.id)) + .where( + and(eq(videos.ownerId, userId), isNull(organizations.tombstoneAt)), + ) .groupBy( videos.id, videos.ownerId, From 08a0aabbd8ccdf84f090907f01620cd3bb577ab2 Mon Sep 17 00:00:00 2001 From: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Mon, 3 Nov 2025 18:56:16 +0300 Subject: [PATCH 3/4] Update page.tsx --- apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx b/apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx index b230709324..079ce13d8a 100644 --- a/apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx +++ b/apps/web/app/(org)/dashboard/spaces/[spaceId]/page.tsx @@ -4,6 +4,7 @@ import { comments, folders, organizationMembers, + organizations, sharedVideos, spaceMembers, spaceVideos, From a43b187c78d91699477aa7c3ebaff332f0f0d206 Mon Sep 17 00:00:00 2001 From: ameer2468 <33054370+ameer2468@users.noreply.github.com> Date: Mon, 3 Nov 2025 19:02:48 +0300 Subject: [PATCH 4/4] Update folder.ts --- apps/web/lib/folder.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/apps/web/lib/folder.ts b/apps/web/lib/folder.ts index 5559c6fb5b..18e8a44c6f 100644 --- a/apps/web/lib/folder.ts +++ b/apps/web/lib/folder.ts @@ -219,14 +219,17 @@ export const getVideosByFolderId = Effect.fn(function* ( .leftJoin(users, eq(videos.ownerId, users.id)) .leftJoin(videoUploads, eq(videos.id, videoUploads.videoId)) .where( - and( - root.variant === "space" - ? eq(spaceVideos.folderId, folderId) - : root.variant === "org" - ? eq(sharedVideos.folderId, folderId) - : eq(videos.folderId, folderId), - isNull(organizations.tombstoneAt), - ), + root.variant === "space" + ? and( + eq(spaceVideos.folderId, folderId), + isNull(organizations.tombstoneAt), + ) + : root.variant === "org" + ? and( + eq(sharedVideos.folderId, folderId), + isNull(organizations.tombstoneAt), + ) + : eq(videos.folderId, folderId), ) .groupBy( videos.id,