koi-cli
Version:
A simple CLI made to generate base files and migration files. Must be used with 'koa-typescript-api-v2
69 lines (56 loc) • 1.96 kB
JavaScript
const fs = require('fs')
const currentDir = process.cwd()
fs.mkdirSync(`${currentDir}/src/db/seeders`, {recursive: true});
fs.mkdirSync(`${currentDir}/src/db/migrations`, {recursive: true});
const migrationFiles = fs.readdirSync(`${currentDir}/src/db/config`, `utf-8`)
const tableProps = migrationFiles.map((jsonFile) => {
return fs.readFileSync(`${currentDir}/src/db/config/${jsonFile}`, `utf-8`, (err, buff) => {
if (err) {
console.log(err)
return err;
} else {
return buff;
}
})
})
tableProps.forEach((tableProp) => {
const properties = JSON.parse(tableProp)
const tablePropArray = [];
for (props in properties.table.attributes) {
const dataType = `DataTypes.${properties.table.attributes[props].dataType.toUpperCase()}`
delete properties.table.attributes[props].dataType
tablePropArray.push(
`${[props]}: {
type: ${dataType},
${JSON.stringify(properties.table.attributes[props]).replace(/["" {}]+/g, '').replace(/[,]+/g, `,
`)}
}
`)
}
fs.writeFileSync(`${currentDir}/src/db/migrations/create-migration-${properties.table.tableName}.js`,
`const tableConfig = {
schema: '${properties.table.schema || 'public'}',
tableName: '${properties.table.tableName}'
};
module.exports = {
up: (queryInterface, Sequelize) => {
const DataTypes = Sequelize;
const tableProps = {
${tablePropArray}
};
return queryInterface.transaction((t) => {
return queryInterface.createTable(tableConfig, tableProps,
{transaction: t});
})
},
down: (queryInterface, Sequelize) => {
return queryInterface.transaction((t) => {
return queryInterface.dropTable(tableConfig,
{transaction: t});
})
}
};
`, {recursive: true})
console.log(`Created: create-migration-${properties.table.tableName}.js`);
})