import get from 'lodash-es/get.js'
import toInteger from 'lodash-es/toInteger.js'
import genPm from 'wsemi/src/genPm.mjs'
import AutoSequelize from './auto-sequelize.js'
/**
* 由指定資料庫生成各表的models資料
*
* @class
* @param {Object} [opt={}] 輸入設定物件,預設{}
* @param {String} [opt.database=null] 輸入資料庫名稱字串,預設null
* @param {String} [opt.username=null] 輸入使用者名稱字串,預設null
* @param {String} [opt.password=null] 輸入密碼字串,預設null
* @param {String} [opt.dialect=null] 輸入資料庫種類字串,預設null,可選'mysql', 'mariadb', 'sqlite', 'postgres', 'mssql'
* @param {String} [opt.directory='./models'] 輸入models儲存的資料夾名稱字串,預設'./models'
* @param {String} [opt.host='localhost'] 輸入連線主機host位址字串,預設'localhost'
* @param {Integer} [opt.port=null] 輸入連線主機port整數,預設null
* @param {String} [opt.storage=''] 輸入sqlite檔案位置字串,預設''
* @returns {Promise} 回傳Promise,resolve回傳產生的models資料,reject回傳錯誤訊息
*/
function WAutoSequelize(opt = {}) {
let pm = genPm()
//params
let database = get(opt, 'database', null)
let username = get(opt, 'username', null)
let password = get(opt, 'password', null)
let dialect = get(opt, 'dialect', null)
let directory = get(opt, 'directory', './models')
let host = get(opt, 'host', 'localhost')
let port = toInteger(get(opt, 'port', null))
let storage = get(opt, 'storage', '')
let options = {
dialect,
directory,
host,
port,
storage,
// additional: {
// timestamps: false
// },
// lang: 'esm' //使用sequelize-auto最新版可使用lang="es5" | "es6" | "esm" | "ts", 待測試, 但其對nvarchar(MAX)無法轉回TEXT
}
//check
if (!database) {
pm.reject('need database')
return pm
}
if (!username) {
pm.reject('need username')
return pm
}
if (!password) {
pm.reject('need password')
return pm
}
if (!dialect) {
pm.reject('need dialect')
return pm
}
if (!port) {
pm.reject('need port')
return pm
}
//auto
let auto = new AutoSequelize(database, username, password, options)
//run
auto.run(function (err) {
if (err) {
pm.reject(err)
}
else {
pm.resolve({
tables: auto.tables,
foreignKeys: auto.foreignKeys,
})
}
})
return pm
}
export default WAutoSequelize