Spaces:
Sleeping
Sleeping
| import { safeHasOwnProperty } from '../lib/objectfn.js'; | |
| import BaseOperation from './BaseOperation.js'; | |
| export default class extends BaseOperation { | |
| static requiredForCreate = [ | |
| 'uuid', | |
| 'parent_uid', | |
| ]; | |
| static allowedForCreate = [ | |
| ...this.requiredForCreate, | |
| 'name', | |
| 'user_id', | |
| 'is_dir', | |
| 'created', | |
| 'modified', | |
| 'immutable', | |
| 'shortcut_to', | |
| 'is_shortcut', | |
| 'metadata', | |
| 'bucket', | |
| 'bucket_region', | |
| 'thumbnail', | |
| 'accessed', | |
| 'size', | |
| 'symlink_path', | |
| 'is_symlink', | |
| 'associated_app_id', | |
| 'path', | |
| ]; | |
| constructor (entry) { | |
| super(); | |
| const requiredForCreate = this.constructor.requiredForCreate; | |
| const allowedForCreate = this.constructor.allowedForCreate; | |
| { | |
| const sanitized_entry = {}; | |
| for ( const k of allowedForCreate ) { | |
| if ( safeHasOwnProperty(entry, k) ) { | |
| sanitized_entry[k] = entry[k]; | |
| } | |
| } | |
| entry = sanitized_entry; | |
| } | |
| for ( const k of requiredForCreate ) { | |
| if ( ! safeHasOwnProperty(entry, k) ) { | |
| throw new Error(`Missing required property: ${k}`); | |
| } | |
| } | |
| this.entry = entry; | |
| } | |
| getStatement () { | |
| const fields = Object.keys(this.entry); | |
| const statement = 'INSERT INTO fsentries ' + | |
| `(${fields.join(', ')}) ` + | |
| `VALUES (${fields.map(() => '?').join(', ')})`; | |
| const values = fields.map(k => this.entry[k]); | |
| return { statement, values }; | |
| } | |
| apply (answer) { | |
| answer.entry = { ...this.entry }; | |
| } | |
| get uuid () { | |
| return this.entry.uuid; | |
| } | |
| }; | |