mirror of
https://github.com/nocobase/nocobase
synced 2024-11-15 13:46:45 +00:00
fix: collection schema updated but model _schema not change (#1500)
* fix: collection schema updated but model _schema not change * test: schema changed
This commit is contained in:
parent
c8aba5f139
commit
dfbdbc741d
@ -97,4 +97,24 @@ describe('postgres schema', () => {
|
|||||||
|
|
||||||
expect(newTableInfo[0].find((item) => item['table_name'] == collection.model.tableName)).toBeTruthy();
|
expect(newTableInfo[0].find((item) => item['table_name'] == collection.model.tableName)).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should update schema options', async () => {
|
||||||
|
if (!db.inDialect('postgres')) return;
|
||||||
|
|
||||||
|
await db.clean({ drop: true });
|
||||||
|
|
||||||
|
const collection = db.collection({
|
||||||
|
name: 'test',
|
||||||
|
});
|
||||||
|
|
||||||
|
await db.sync();
|
||||||
|
|
||||||
|
collection.updateOptions({
|
||||||
|
...collection.options,
|
||||||
|
schema: 'test',
|
||||||
|
});
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
expect(collection.model._schema).toEqual('test');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -351,8 +351,8 @@ export class Collection<
|
|||||||
updateOptions(options: CollectionOptions, mergeOptions?: any) {
|
updateOptions(options: CollectionOptions, mergeOptions?: any) {
|
||||||
let newOptions = lodash.cloneDeep(options);
|
let newOptions = lodash.cloneDeep(options);
|
||||||
newOptions = merge(this.options, newOptions, mergeOptions);
|
newOptions = merge(this.options, newOptions, mergeOptions);
|
||||||
this.context.database.emit('beforeUpdateCollection', this, newOptions);
|
|
||||||
|
|
||||||
|
this.context.database.emit('beforeUpdateCollection', this, newOptions);
|
||||||
this.options = newOptions;
|
this.options = newOptions;
|
||||||
|
|
||||||
this.setFields(options.fields, false);
|
this.setFields(options.fields, false);
|
||||||
|
@ -312,6 +312,12 @@ export class Database extends EventEmitter implements AsyncEmitter {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.on('afterUpdateCollection', (collection, options) => {
|
||||||
|
if (collection.options.schema) {
|
||||||
|
collection.model._schema = collection.options.schema;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.on('beforeDefineCollection', (options) => {
|
this.on('beforeDefineCollection', (options) => {
|
||||||
if (options.underscored) {
|
if (options.underscored) {
|
||||||
if (lodash.get(options, 'sortable.scopeKey')) {
|
if (lodash.get(options, 'sortable.scopeKey')) {
|
||||||
|
@ -483,7 +483,9 @@ export class Application<StateT = DefaultState, ContextT = DefaultContext> exten
|
|||||||
if (this.db.inDialect('mysql')) {
|
if (this.db.inDialect('mysql')) {
|
||||||
const result = await this.db.sequelize.query(`SHOW VARIABLES LIKE 'lower_case_table_names'`, { plain: true });
|
const result = await this.db.sequelize.query(`SHOW VARIABLES LIKE 'lower_case_table_names'`, { plain: true });
|
||||||
if (result?.Value === '1' && !this.db.options.underscored) {
|
if (result?.Value === '1' && !this.db.options.underscored) {
|
||||||
console.log(`Your database lower_case_table_names=1, please add ${chalk.yellow('DB_UNDERSCORED=true')} to the .env file`);
|
console.log(
|
||||||
|
`Your database lower_case_table_names=1, please add ${chalk.yellow('DB_UNDERSCORED=true')} to the .env file`,
|
||||||
|
);
|
||||||
if (options?.exit) {
|
if (options?.exit) {
|
||||||
process.exit();
|
process.exit();
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,11 @@ export class PluginManagerRepository extends Repository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async load() {
|
async load() {
|
||||||
const items = await this.find();
|
// sort plugins by id
|
||||||
|
const items = await this.find({
|
||||||
|
sort: 'id',
|
||||||
|
});
|
||||||
|
|
||||||
for (const item of items) {
|
for (const item of items) {
|
||||||
await this.pm.addStatic(item.get('name'), {
|
await this.pm.addStatic(item.get('name'), {
|
||||||
...item.get('options'),
|
...item.get('options'),
|
||||||
|
@ -52,6 +52,12 @@ export class CollectionRepository extends Repository {
|
|||||||
|
|
||||||
async db2cm(collectionName: string) {
|
async db2cm(collectionName: string) {
|
||||||
const collection = this.database.getCollection(collectionName);
|
const collection = this.database.getCollection(collectionName);
|
||||||
|
|
||||||
|
// skip if collection already exists
|
||||||
|
if (await this.findOne({ filter: { name: collectionName } })) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const options = collection.options;
|
const options = collection.options;
|
||||||
const fields = [];
|
const fields = [];
|
||||||
for (const [name, field] of collection.fields) {
|
for (const [name, field] of collection.fields) {
|
||||||
|
@ -18,14 +18,15 @@ export class ApplicationModel extends Model {
|
|||||||
await app.load();
|
await app.load();
|
||||||
|
|
||||||
if (!(await app.isInstalled())) {
|
if (!(await app.isInstalled())) {
|
||||||
await app.db.sync({
|
await app.db.sync();
|
||||||
force: false,
|
|
||||||
alter: {
|
|
||||||
drop: false,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await app.install();
|
await app.install();
|
||||||
|
|
||||||
|
// emit an event on mainApp
|
||||||
|
// current if you add listener on subApp through `subApp.on('afterInstall')` , it will be clear after subApp installed
|
||||||
|
await mainApp.emitAsync('afterSubAppInstalled', {
|
||||||
|
mainApp,
|
||||||
|
subApp: app,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
await app.start();
|
await app.start();
|
||||||
|
@ -83,7 +83,7 @@ export class PresetNocoBase extends Plugin {
|
|||||||
this.app.on('beforeUpgrade', async (options) => {
|
this.app.on('beforeUpgrade', async (options) => {
|
||||||
const result = await this.app.version.satisfies('<0.8.0-alpha.1');
|
const result = await this.app.version.satisfies('<0.8.0-alpha.1');
|
||||||
if (result) {
|
if (result) {
|
||||||
console.log(`Initialize all built-in plugins`);
|
console.log(`Initialize all built-in plugins beforeUpgrade`);
|
||||||
await this.addBuiltInPlugins({ method: 'upgrade' });
|
await this.addBuiltInPlugins({ method: 'upgrade' });
|
||||||
}
|
}
|
||||||
const builtInPlugins = this.getBuiltInPlugins();
|
const builtInPlugins = this.getBuiltInPlugins();
|
||||||
@ -105,8 +105,9 @@ export class PresetNocoBase extends Plugin {
|
|||||||
await this.app.reload({ method: 'upgrade' });
|
await this.app.reload({ method: 'upgrade' });
|
||||||
await this.app.db.sync();
|
await this.app.db.sync();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.app.on('beforeInstall', async (options) => {
|
this.app.on('beforeInstall', async (options) => {
|
||||||
console.log(`Initialize all built-in plugins`);
|
console.log(`Initialize all built-in plugins beforeInstall`);
|
||||||
await this.addBuiltInPlugins({ method: 'install' });
|
await this.addBuiltInPlugins({ method: 'install' });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user