import getDbBackupAndRecover from './getDbBackupAndRecover.mjs'
import getWoItems from './getWoItems.mjs'
import getMapOrm from './getMapOrm.mjs'
import getProc from './getProc.mjs'
/**
* 產生伺服器ORM的支援物件
*
* @class
* @param {Object} ds 輸入資料表設定物件
* @param {Object} WOrm 輸入資料庫ORM物件
* @param {String} url 輸入資料庫連線位址字串
* @param {String} db 輸入資料庫名稱字串
* @param {Object} [opt={}] 輸入設定物件,預設{}
* @param {Boolean} [opt.useCheckUser=true] 輸入是否檢查使用者資訊布林值,預設true
* @param {Function} [opt.getUserById=null] 輸入當useCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null
* @param {Boolean} [opt.useExcludeWhenNotAdmin=true] 輸入使用ORM的select方法時是否自動刪除數據內isActive欄位之布林值,預設true
* @returns {Object} 回傳通訊物件,可監聽事件open、error、clientChange、execute、broadcast、deliver,可使用函數broadcast
* @example
*
* // import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM
* import WOrm from 'w-orm-lowdb/src/WOrmLowdb.mjs' //自行選擇引用ORM
* import ds from './schema/index.mjs' //先行建置schema
* import WServOrm from './src/WServOrm.mjs'
*
* // //st
* // let st = {
* // dbUsername: 'username',
* // dbPassword: 'password',
* // dbName: 'wservorm',
* // dbIP: 'localhost',
* // dbPort: 27017,
* // }
*
* //url, db
* // let url = `mongodb://${st.dbUsername}:${st.dbPassword}@${st.dbIP}:${st.dbPort}`
* // let db = st.dbName
* let url = './db.json'
* let db = 'worm'
*
* //WServOrm
* let opt = {
* getUserById: null,
* useCheckUser: false,
* useExcludeWhenNotAdmin: false,
* }
* let r = WServOrm(ds, WOrm, url, db, opt)
* console.log(r) //回傳server用orm相關函數
* // => {
* // backup: [AsyncFunction: backup],
* // recover: [AsyncFunction: recover],
* // woItems: {
* // tests: EventEmitter {
* // _events: [Object: null prototype] {},
* // _eventsCount: 0,
* // _maxListeners: undefined,
* // select: [AsyncFunction: select],
* // insert: [AsyncFunction: insert],
* // save: [AsyncFunction: save],
* // del: [AsyncFunction: del],
* // delAll: [AsyncFunction: delAll],
* // selectGfs: [AsyncFunction: selectGfs],
* // insertGfs: [AsyncFunction: insertGfs],
* // delGfs: [AsyncFunction: delGfs],
* // delAllGfs: [AsyncFunction: delAllGfs],
* // [Symbol(kCapture)]: false
* // }
* // },
* // addFunCheck: [Function: addFunCheck],
* // addFunPreProcessing: [Function: addFunPreProcessing],
* // addFunPostProcessing: [Function: addFunPostProcessing],
* // procOrm: [AsyncFunction: procOrm]
* // }
*
* // export default r
*
*/
function WServOrm(ds, WOrm, url, db, opt = {}) {
//getWoItems
let woItems = getWoItems(ds, WOrm, url, db)
// console.log('woItems', woItems)
//getMapOrm
let mapOrm = getMapOrm(ds, woItems)
// console.log('mapOrm', mapOrm)
//getProc
let proc = getProc(mapOrm, opt)
// console.log('proc', proc)
return {
...getDbBackupAndRecover,
woItems,
// mapOrm,
...proc,
}
}
export default WServOrm