From cf33e483f7e6f40e8cbbbc0118a7df70bdaf651f Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 29 Mar 2018 20:32:18 +0900 Subject: 整理した MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/drive-folder.ts | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/models/drive-folder.ts (limited to 'src/models/drive-folder.ts') diff --git a/src/models/drive-folder.ts b/src/models/drive-folder.ts new file mode 100644 index 0000000000..ad27b151b1 --- /dev/null +++ b/src/models/drive-folder.ts @@ -0,0 +1,77 @@ +import * as mongo from 'mongodb'; +import deepcopy = require('deepcopy'); +import db from '../db/mongodb'; +import DriveFile from './drive-file'; + +const DriveFolder = db.get('drive_folders'); +export default DriveFolder; + +export type IDriveFolder = { + _id: mongo.ObjectID; + createdAt: Date; + name: string; + userId: mongo.ObjectID; + parentId: mongo.ObjectID; +}; + +export function isValidFolderName(name: string): boolean { + return ( + (name.trim().length > 0) && + (name.length <= 200) + ); +} + +/** + * Pack a drive folder for API response + * + * @param {any} folder + * @param {any} options? + * @return {Promise} + */ +export const pack = ( + folder: any, + options?: { + detail: boolean + } +) => new Promise(async (resolve, reject) => { + const opts = Object.assign({ + detail: false + }, options); + + let _folder: any; + + // Populate the folder if 'folder' is ID + if (mongo.ObjectID.prototype.isPrototypeOf(folder)) { + _folder = await DriveFolder.findOne({ _id: folder }); + } else if (typeof folder === 'string') { + _folder = await DriveFolder.findOne({ _id: new mongo.ObjectID(folder) }); + } else { + _folder = deepcopy(folder); + } + + // Rename _id to id + _folder.id = _folder._id; + delete _folder._id; + + if (opts.detail) { + const childFoldersCount = await DriveFolder.count({ + parentId: _folder.id + }); + + const childFilesCount = await DriveFile.count({ + 'metadata.folderId': _folder.id + }); + + _folder.foldersCount = childFoldersCount; + _folder.filesCount = childFilesCount; + } + + if (opts.detail && _folder.parentId) { + // Populate parent folder + _folder.parent = await pack(_folder.parentId, { + detail: true + }); + } + + resolve(_folder); +}); -- cgit v1.2.3-freya