Spaces:
Running
Running
| /** | |
| * Copyright (c) 2017~2022, OBCon Inc. | |
| * All rights reserved. | |
| */ | |
| /** | |
| * @file | |
| * @copyright 2017~2022, OBCon Inc. | |
| * @author gye hyun james kim [pnuskgh@gmail.com] | |
| */ | |
| //--- SQL문을 사용하여 Sequelize 라이브러리를 대체하는 class | |
| //--- 사용하지 않음 | |
| class ModelForSql { | |
| constructor() { | |
| this._use = true; //--- true. 사용하는 모듈 | |
| this._title = '정류기 데이터'; //--- 테이블 한글명 | |
| this._tableName = 'devicedata1s'; //--- 테이블 영문명 | |
| this._type = 'mariadb'; //--- Database type | |
| this._conn = null; //--- Database connection | |
| } | |
| get tableName() { | |
| return this._tableName; | |
| } | |
| get conn() { | |
| return this._conn; | |
| } | |
| set conn(newValue) { | |
| this._conn = newValue; | |
| } | |
| get table() { | |
| return { | |
| findOne: this.findOne.bind(this), | |
| findAll: this.findAll.bind(this), | |
| create: this.create.bind(this), | |
| update: this.update.bind(this), | |
| destroy: this.destroy.bind(this), | |
| }; | |
| } | |
| get fieldDesc() { | |
| return { | |
| // name: { | |
| // type: 'string', len: 72, | |
| // allowNull: false, | |
| // defaultValue: '', | |
| // validate: {}, | |
| // title: '이름', | |
| // strType: 'string' | |
| // }, | |
| // description: { | |
| // type: 'text', | |
| // allowNull: true, | |
| // defaultValue: '', | |
| // validate: {}, | |
| // title: '상세 설명', | |
| // strType: 'text' | |
| // }, | |
| // assignedUserId: { | |
| // type: 'integer', len: 11, | |
| // allowNull: false, | |
| // defaultValue: 1, | |
| // validate: { | |
| // min: 1 | |
| // }, | |
| // title: '담당자 ID', | |
| // strType: 'integer' | |
| // }, | |
| // assignedUserName: { | |
| // type: 'string', len: 72, | |
| // allowNull: true, | |
| // defaultValue: '', | |
| // validate: {}, | |
| // title: '담당자', | |
| // strType: 'string' | |
| // }, | |
| // createdBy: { | |
| // type: 'integer', len: 11, | |
| // allowNull: false, | |
| // defaultValue: 1, | |
| // validate: { | |
| // min: 1 | |
| // }, | |
| // title: '생성자', | |
| // strType: 'integer' | |
| // }, | |
| // updatedBy: { | |
| // type: 'integer', len: 11, | |
| // allowNull: false, | |
| // defaultValue: 1, | |
| // validate: { | |
| // min: 1 | |
| // }, | |
| // title: '수정자', | |
| // strType: 'integer' | |
| // }, | |
| // deleted: { | |
| // type: 'boolean', | |
| // allowNull: false, | |
| // defaultValue: false, | |
| // validate: {}, | |
| // title: '삭제', | |
| // strType: 'boolean' | |
| // } | |
| }; | |
| } | |
| get fieldNames() { | |
| return Object.getOwnPropertyNames(this.fieldDesc); | |
| } | |
| async findOne(sql, strQuery = null) { | |
| //--- To-Do : 아래 코드를 수정하여 동작하도록 작성할 것 | |
| // let results = await this.findAll(sql, strQuery); | |
| // if (0 < results.count) { | |
| // if ((strQuery != null) && (-1 < strQuery.indexOf('NEXTVAL'))) { | |
| // return results[0]['NEXTVAL']; | |
| // } else { | |
| // return results[0]; | |
| // } | |
| // } else { | |
| // return null; | |
| // } | |
| } | |
| async findAll(sql, strQuery = null) { | |
| //--- To-Do : 아래 코드를 수정하여 동작하도록 작성할 것 | |
| // let query = []; | |
| // if (strQuery == null) { | |
| // query.push('SELECT *'); | |
| // query.push(` FROM ${this._tableName}`); | |
| // //--- WHERE 문 처리 | |
| // if (typeof(sql.where) != 'undefined') { | |
| // query.push(' WHERE'); | |
| // query.push(this._set(sql.where, 'AND')); | |
| // } | |
| // //--- ORDER BY 문 처리 | |
| // if (typeof(sql.order) != 'undefined') { | |
| // query.push(' ORDER BY'); | |
| // let data = []; | |
| // for (let idx = 0; idx < sql.order.length; idx++) { | |
| // let item = sql.order[idx]; | |
| // switch(item[0]) { | |
| // case 'site': break; | |
| // default: | |
| // data.push(`${item[0]} ${item[1]}`); | |
| // break; | |
| // } | |
| // } | |
| // query.push(data.join(', ')); | |
| // } | |
| // //--- LIMIT 문 처리 | |
| // if (typeof(sql.limit) != 'undefined') { | |
| // query.push(` LIMIT ${sql.limit}`); | |
| // } | |
| // query = query.join(' '); | |
| // } else { | |
| // query = strQuery; | |
| // } | |
| // logger.info(query); | |
| // let results = await db.conn.query(query); | |
| // if (config.databases.obcon.type == 'Tibero') { | |
| // for (let idx = 0; idx < results.length; idx++) { | |
| // for (let pos = 0; pos < this._fieldNames.length; pos++) { | |
| // let fieldName = this._fieldNames[pos]; | |
| // if (typeof(results[idx][fieldName.toUpperCase()]) != 'undefined') { | |
| // results[idx][fieldName] = results[idx][fieldName.toUpperCase()]; | |
| // } | |
| // } | |
| // } | |
| // } | |
| // return results; | |
| } | |
| _set(item, delimiter, isIn=false) { | |
| //--- To-Do : 아래 코드를 수정하여 동작하도록 작성할 것 | |
| // let data = []; | |
| // for (const [key, value] of Object.entries(item)) { | |
| // if (isIn) { | |
| // // let key1 = (config.databases.obcon.type == 'Tibero') ? key.toUpperCase():key; | |
| // if (this._fieldNames.includes(key) == false) { | |
| // continue; | |
| // } | |
| // } | |
| // switch(key) { | |
| // case 'site': break; | |
| // default: | |
| // switch(typeof(value)) { | |
| // case 'string': | |
| // data.push(`${key} = '${value}'`); | |
| // break; | |
| // case 'number': | |
| // case 'boolean': | |
| // default: | |
| // data.push(`${key} = ${value}`); | |
| // break; | |
| // } | |
| // break; | |
| // } | |
| // } | |
| // return data.join(` ${delimiter} `); | |
| } | |
| async create(item, strQuery = null) { | |
| //--- To-Do : 아래 코드를 수정하여 동작하도록 작성할 것 | |
| // let query = `SELECT seq_${this._tableName}.NEXTVAL FROM DUAL`.replace('OBICON.', ''); | |
| // let id = await this.findOne(null, query); | |
| // item['id'] = id; | |
| // query = []; | |
| // if (strQuery == null) { | |
| // query.push(`INSERT INTO ${this._tableName} (`); | |
| // let data = []; | |
| // for (const [key, value] of Object.entries(item)) { | |
| // // let key1 = (config.databases.obcon.type == 'Tibero') ? key.toUpperCase():key; | |
| // if (this._fieldNames.includes(key)) { | |
| // data.push(key); | |
| // } | |
| // } | |
| // query.push(data.join(', ')); | |
| // query.push(') VALUES ('); | |
| // data = []; | |
| // for (const [key, value] of Object.entries(item)) { | |
| // // let key1 = (config.databases.obcon.type == 'Tibero') ? key.toUpperCase():key; | |
| // if (this._fieldNames.includes(key)) { | |
| // switch(key) { | |
| // case 'site': break; | |
| // default: | |
| // switch(typeof(value)) { | |
| // case 'string': | |
| // data.push(`'${value}'`); | |
| // break; | |
| // case 'number': | |
| // case 'boolean': | |
| // default: | |
| // data.push(`${value}`); | |
| // break; | |
| // } | |
| // break; | |
| // } | |
| // } | |
| // } | |
| // query.push(data.join(', ')); | |
| // query.push(')'); | |
| // query = query.join(' '); | |
| // } else { | |
| // query = strQuery; | |
| // } | |
| // logger.info(`SQL Create : ${query}`); | |
| // let results = await db.conn.query(query); | |
| // results[0] = results.count; | |
| // return results; | |
| } | |
| async update(item, sql = null, strQuery = null) { | |
| //--- To-Do : 아래 코드를 수정하여 동작하도록 작성할 것 | |
| // let query = []; | |
| // if (strQuery == null) { | |
| // query.push(`UPDATE ${this._tableName}`); | |
| // query.push(' SET'); | |
| // query.push(this._set(item, ',', true)); | |
| // //--- WHERE 문 처리 | |
| // if (typeof(sql.where) != 'undefined') { | |
| // query.push(' WHERE'); | |
| // query.push(this._set(sql.where, 'AND')); | |
| // } | |
| // query = query.join(' '); | |
| // } else { | |
| // query = strQuery; | |
| // } | |
| // logger.info(`SQL Update : ${query}`); | |
| // let results = await db.conn.query(query); | |
| // results[0] = results.count; | |
| // return results; | |
| } | |
| async destroy(sql, strQuery = null) { | |
| //--- To-Do : 아래 코드를 수정하여 동작하도록 작성할 것 | |
| // let query = []; | |
| // if (strQuery == null) { | |
| // query.push(`DELETE FROM ${this._tableName}`); | |
| // //--- WHERE 문 처리 | |
| // if (typeof(sql.where) != 'undefined') { | |
| // query.push(' WHERE'); | |
| // query.push(this._set(sql.where, 'AND')); | |
| // } | |
| // query = query.join(' '); | |
| // } else { | |
| // query = strQuery; | |
| // } | |
| // //--- To-Do : ppp, 테스트 필요 | |
| // logger.info(`SQL delete : ${query}`); | |
| // if (-1 < query.indexOf('id = ')) { | |
| // let results = await db.conn.query(query); | |
| // results[0] = results.count; | |
| // return results; | |
| // } | |
| // return 0; | |
| } | |
| //--- 데이터 초기화 | |
| init() { | |
| } | |
| } | |
| module.exports = ModelForSql; | |