You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.5 KiB

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,
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,
parentUUID: this.parentUUID,
rootUUID: this.rootUUID,
fileIds: this.fileIds || [],
}
}
}
module.exports = exports = FileBoxModel