198 lines
5.1 KiB
TypeScript
198 lines
5.1 KiB
TypeScript
|
import Api from '../../../server/src';
|
||
|
import dotenv from 'dotenv';
|
||
|
import path from 'path';
|
||
|
import Database, { Model } from '@nocobase/database';
|
||
|
import { get } from 'lodash';
|
||
|
|
||
|
const sync = {
|
||
|
force: true,
|
||
|
alter: {
|
||
|
drop: true,
|
||
|
},
|
||
|
};
|
||
|
|
||
|
dotenv.config();
|
||
|
|
||
|
const api = Api.create({
|
||
|
database: {
|
||
|
username: process.env.DB_USER,
|
||
|
password: process.env.DB_PASSWORD,
|
||
|
database: process.env.DB_DATABASE,
|
||
|
host: process.env.DB_HOST,
|
||
|
port: process.env.DB_PORT,
|
||
|
dialect: process.env.DB_DIALECT,
|
||
|
dialectOptions: {
|
||
|
charset: 'utf8mb4',
|
||
|
collate: 'utf8mb4_unicode_ci',
|
||
|
},
|
||
|
logging: false,
|
||
|
define: {},
|
||
|
sync,
|
||
|
},
|
||
|
resourcer: {
|
||
|
prefix: '/api',
|
||
|
},
|
||
|
});
|
||
|
|
||
|
(async () => {
|
||
|
await api
|
||
|
.plugins([
|
||
|
[path.resolve(__dirname, '../../../plugin-collections'), {}],
|
||
|
[path.resolve(__dirname, '../../../plugin-pages'), {}],
|
||
|
[path.resolve(__dirname, '../../../plugin-permissions'), {}],
|
||
|
[path.resolve(__dirname, '../../../plugin-users'), {}],
|
||
|
[path.resolve(__dirname, '../../../plugin-file-manager'), {}],
|
||
|
// [require('../../plugin-collections/src/index').default, {}],
|
||
|
// [require('../../plugin-pages/src/index').default, {}],
|
||
|
]);
|
||
|
|
||
|
const database: Database = api.database;
|
||
|
|
||
|
const [Collection, View, Action, Tab] = database.getModels(['collections', 'views', 'actions', 'tabs']);
|
||
|
const tables = database.getTables([]);
|
||
|
|
||
|
for (let table of tables) {
|
||
|
const options = table.getOptions();
|
||
|
const collection = await Collection.create(options);
|
||
|
// console.log(options);
|
||
|
const associations: any = {};
|
||
|
if (options.fields) {
|
||
|
associations['fields'] = options.fields.map(item => ({
|
||
|
...item,
|
||
|
options: item,
|
||
|
}))
|
||
|
}
|
||
|
if (options.tabs) {
|
||
|
associations['tabs'] = options.tabs.map(item => ({
|
||
|
...item,
|
||
|
options: item,
|
||
|
}))
|
||
|
}
|
||
|
if (options.actions) {
|
||
|
associations['actions'] = options.actions.map(item => ({
|
||
|
...item,
|
||
|
options: item,
|
||
|
}))
|
||
|
}
|
||
|
if (options.views) {
|
||
|
associations['views'] = options.views.map(item => ({
|
||
|
...item,
|
||
|
options: item,
|
||
|
}))
|
||
|
}
|
||
|
await collection.updateAssociations(associations);
|
||
|
}
|
||
|
|
||
|
const actions = await Action.findAll();
|
||
|
|
||
|
for (const action of actions) {
|
||
|
const viewName = action.options.viewName;
|
||
|
console.log({viewName});
|
||
|
if (viewName) {
|
||
|
const view = await View.findOne({
|
||
|
where: {
|
||
|
name: viewName,
|
||
|
collection_name: action.collection_name
|
||
|
},
|
||
|
});
|
||
|
if (view) {
|
||
|
action.options.viewId = view.id;
|
||
|
console.log(action.options);
|
||
|
action.setDataValue('options', action.options);
|
||
|
action.changed('options', true);
|
||
|
await action.save();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
const tabs = await Tab.findAll();
|
||
|
|
||
|
for (const tab of tabs) {
|
||
|
const viewName = tab.options.viewName;
|
||
|
if (!viewName) {
|
||
|
continue;
|
||
|
}
|
||
|
let view: any;
|
||
|
if (tab.type === 'association') {
|
||
|
view = await View.findOne({
|
||
|
where: {
|
||
|
name: viewName,
|
||
|
collection_name: tab.options.association,
|
||
|
},
|
||
|
});
|
||
|
} else {
|
||
|
view = await View.findOne({
|
||
|
where: {
|
||
|
name: viewName,
|
||
|
collection_name: tab.collection_name,
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
if (view) {
|
||
|
tab.options.viewId = view.id;
|
||
|
tab.setDataValue('options', tab.options);
|
||
|
tab.changed('options', true);
|
||
|
await tab.save();
|
||
|
}
|
||
|
}
|
||
|
const views = await View.findAll();
|
||
|
for (const view of views) {
|
||
|
const detailsViewName = view.options.detailsViewName;
|
||
|
if (detailsViewName) {
|
||
|
const v = await View.findOne({
|
||
|
where: {
|
||
|
name: detailsViewName,
|
||
|
collection_name: view.collection_name
|
||
|
},
|
||
|
});
|
||
|
if (v) {
|
||
|
view.options.detailsViewId = v.id;
|
||
|
view.setDataValue('options', view.options);
|
||
|
view.changed('options', true);
|
||
|
await view.save();
|
||
|
}
|
||
|
}
|
||
|
const updateViewName = view.options.updateViewName;
|
||
|
if (updateViewName) {
|
||
|
const v = await View.findOne({
|
||
|
where: {
|
||
|
name: updateViewName,
|
||
|
collection_name: view.collection_name
|
||
|
},
|
||
|
});
|
||
|
if (v) {
|
||
|
view.options.updateViewId = v.id;
|
||
|
view.setDataValue('options', view.options);
|
||
|
view.changed('options', true);
|
||
|
await view.save();
|
||
|
}
|
||
|
}
|
||
|
console.log({detailsViewName, updateViewName});
|
||
|
}
|
||
|
|
||
|
// for (let table of tables) {
|
||
|
// const options = table.getOptions();
|
||
|
// const collection = await Collection.findOne({
|
||
|
// where: {
|
||
|
// name: options.name,
|
||
|
// },
|
||
|
// });
|
||
|
// const tabs = await collection.getTabs() as Model[];
|
||
|
// const actions = await collection.getActions() as Model[];
|
||
|
// const views = await collection.getViews() as Model[];
|
||
|
// for (const tab of tabs) {
|
||
|
// tab.options.viewName;
|
||
|
|
||
|
// }
|
||
|
// }
|
||
|
|
||
|
// const collections = await Collection.findAll();
|
||
|
|
||
|
// await Promise.all(collections.map(async (collection) => {
|
||
|
// return await collection.modelInit();
|
||
|
// }));
|
||
|
|
||
|
api.listen(process.env.HTTP_PORT, () => {
|
||
|
console.log(`http://localhost:${process.env.HTTP_PORT}/`);
|
||
|
});
|
||
|
})();
|