tachybase_todo/packages/plugin-collection-manager/src/models/field.ts

35 lines
1.0 KiB
TypeScript
Raw Normal View History

import { SyncOptions, Transactionable } from 'sequelize';
import Database, { MagicAttributeModel } from '@nocobase/database';
interface LoadOptions extends Transactionable {
// TODO
skipExist?: boolean;
}
export class FieldModel extends MagicAttributeModel {
get db(): Database {
return (<any>this.constructor).database;
}
async load(loadOptions?: LoadOptions) {
const { skipExist = false } = loadOptions || {};
const collectionName = this.get('collectionName');
if (!this.db.hasCollection(collectionName)) {
throw new Error(`${collectionName} collection does not exist.`);
}
const collection = this.db.getCollection(collectionName);
const name = this.get('name');
if (skipExist && collection.hasField(name)) {
return collection.getField(name);
}
return collection.setField(name, this.get());
}
async migrate(options?: SyncOptions & Transactionable) {
const field = await this.load({
transaction: options.transaction,
});
await field.sync(options);
}
}