const { Model } = require('flitter-orm') const uuid = require('uuid').v4 const { ObjectId } = require('mongodb') class FileBoxModel extends Model { static get services() { return [...super.services, 'models'] } static get schema() { return { UUID: { type: String, default: uuid }, name: String, pageId: String, nodeId: String, parentUUID: String, rootUUID: String, fileIds: [String], active: { type: Boolean, default: true }, } } async parent() { return this.constructor.findOne({ UUID: this.parentUUID, active: true, }) } async root() { return this.constructor.findOne({ UUID: this.rootUUID, active: true, }) } async children() { return this.constructor.find({ parentUUID: this.UUID, active: true, }) } async files() { const File = this.models.get('upload::File') return await File.find({ _id: { $in: this.fileIds.map(x => ObjectId(x)), } }) } async to_api() { return { type: 'folder', UUID: this.UUID, name: this.name, title: this.name, pageId: this.pageId, nodeId: this.nodeId, parentUUID: this.parentUUID, rootUUID: this.rootUUID, fileIds: this.fileIds || [], } } } module.exports = exports = FileBoxModel