import { db } from "@/db/postgre.js"; import { DriveFolders, DriveFiles } from "../index.js"; import { DriveFolder } from "@/models/entities/drive-folder.js"; import { awaitAll } from "@/prelude/await-all.js"; import type { Packed } from "@/misc/schema.js"; export const DriveFolderRepository = db.getRepository(DriveFolder).extend({ async pack( src: DriveFolder["id"] | DriveFolder, options?: { detail: boolean; }, ): Promise> { const opts = Object.assign( { detail: false, }, options, ); const folder = typeof src === "object" ? src : await this.findOneByOrFail({ id: src }); return await awaitAll({ id: folder.id, createdAt: folder.createdAt.toISOString(), name: folder.name, parentId: folder.parentId, ...(opts.detail ? { foldersCount: DriveFolders.countBy({ parentId: folder.id, }), filesCount: DriveFiles.countBy({ folderId: folder.id, }), ...(folder.parentId ? { parent: this.pack(folder.parentId, { detail: true, }), } : {}), } : {}), }); }, });