backend/app/models/api/files/FileBox.model.js

76 lines
1.7 KiB
JavaScript
Raw Normal View History

2021-02-04 15:19:04 +00:00
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']
}
2021-02-04 15:19:04 +00:00
static get schema() {
return {
UUID: { type: String, default: uuid },
name: String,
pageId: String,
nodeId: String,
2021-02-04 15:19:04 +00:00
parentUUID: String,
rootUUID: String,
fileIds: [String],
active: { type: Boolean, default: true },
}
}
async page() {
const Page = this.models.get('api:Page')
return Page.findOne({
UUID: this.pageId,
})
}
2021-02-04 15:19:04 +00:00
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,
})
}
2021-02-04 15:19:04 +00:00
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',
2021-02-04 15:19:04 +00:00
UUID: this.UUID,
name: this.name,
title: this.name,
2021-02-04 15:19:04 +00:00
pageId: this.pageId,
nodeId: this.nodeId,
2021-02-04 15:19:04 +00:00
parentUUID: this.parentUUID,
rootUUID: this.rootUUID,
fileIds: this.fileIds || [],
}
}
}
module.exports = exports = FileBoxModel