Skip to content

Commit 939bfce

Browse files
committed
Cleanup Data Access Pattern
1 parent b246862 commit 939bfce

File tree

2 files changed

+43
-36
lines changed

2 files changed

+43
-36
lines changed

src/app/f/[folderId]/page.tsx

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,13 @@
1-
import { eq } from "drizzle-orm";
21
import { z } from "zod";
32

4-
import { db } from "~/server/db";
53
import {
6-
files_table as fileSchema,
7-
folders_table as folderSchema,
8-
} from "~/server/db/schema";
4+
getAllFiles,
5+
getAllFolders,
6+
getAllParentsForFolder,
7+
} from "~/server/db/queries";
98

109
import DriveContents from "../../drive-contents";
1110

12-
async function getAllParents(folderId: number) {
13-
const parents = [];
14-
let currentId: number | null = folderId;
15-
while (currentId != null) {
16-
const folders = await db
17-
.selectDistinct()
18-
.from(folderSchema)
19-
.where(eq(folderSchema.id, currentId));
20-
21-
if (!folders[0]) throw new Error("parent folder not found");
22-
23-
parents.unshift(folders[0]);
24-
currentId = folders[0]?.parent; // parent can be null
25-
}
26-
27-
return parents;
28-
}
29-
3011
export default async function GoogleDriveClone(props: {
3112
params: Promise<{ folderId: number }>;
3213
}) {
@@ -38,21 +19,11 @@ export default async function GoogleDriveClone(props: {
3819
if (!success) return <div>Invalid Folder ID</div>;
3920

4021
const folderId = data.folderId;
41-
const parentsPromise = getAllParents(folderId);
42-
43-
const foldersPromise = db
44-
.select()
45-
.from(folderSchema)
46-
.where(eq(folderSchema.parent, folderId));
47-
const filesPromise = db
48-
.select()
49-
.from(fileSchema)
50-
.where(eq(fileSchema.parent, folderId));
5122

5223
const [folders, files, parents] = await Promise.all([
53-
foldersPromise,
54-
filesPromise,
55-
parentsPromise,
24+
getAllFolders(folderId),
25+
getAllFiles(folderId),
26+
getAllParentsForFolder(folderId),
5627
]);
5728

5829
return <DriveContents folders={folders} files={files} parents={parents} />;

src/server/db/queries.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { eq } from "drizzle-orm";
2+
3+
import { db } from "~/server/db";
4+
import {
5+
files_table as fileSchema,
6+
folders_table as folderSchema,
7+
} from "~/server/db/schema";
8+
9+
export async function getAllParentsForFolder(folderId: number) {
10+
const parents = [];
11+
let currentId: number | null = folderId;
12+
while (currentId != null) {
13+
const folders = await db
14+
.selectDistinct()
15+
.from(folderSchema)
16+
.where(eq(folderSchema.id, currentId));
17+
18+
if (!folders[0]) throw new Error("parent folder not found");
19+
20+
parents.unshift(folders[0]);
21+
currentId = folders[0]?.parent; // parent can be null
22+
}
23+
24+
return parents;
25+
}
26+
27+
export function getAllFolders(folderId: number) {
28+
return db
29+
.select()
30+
.from(folderSchema)
31+
.where(eq(folderSchema.parent, folderId));
32+
}
33+
34+
export function getAllFiles(folderId: number) {
35+
return db.select().from(fileSchema).where(eq(fileSchema.parent, folderId));
36+
}

0 commit comments

Comments
 (0)