UNPKG

@ckstack/ck-lib-sequelize

Version:

sequelize helper module

182 lines (181 loc) 10.7 kB
import { Sequelize } from 'sequelize-typescript'; import { Order, WhereOptions, Transaction, TransactionOptions } from 'sequelize'; import { Literal } from 'sequelize/types/utils'; import express from 'express'; import Tunnel from 'tunnel-ssh'; import { CkType } from '@dkpkg/dk-lib'; declare class CkSequelize { private static DB_INFO; private static TUNNEL_DB_INFO; /** * tunnel 로 rdbms 에 접근 한다. * * @param config 터널링 환경 * @returns {void} 리턴 값 없음. Promise<void>를 리턴 한다. */ static __connectByTunnel(config: Tunnel.Config): Promise<void>; /** * DB 에 연결 한다. * proxy 를 사용하지 않는 db 가 우선 연결 되며 그 다음 순서로 proxy 를 사용하는 db 가 연결 된다. * * @param dbInfo {CkType.IDatabaseConfig[] | undefined} 연결될 DB 환경 * @param tunnelDbInfo {CkType.ITunnelDatabaseConfig[] | undefined} ssh tunneling 으로 연결한다면 ssh tunneling 으로 연결될 DB 환경 * @returns {void} 리턴 값 없음. Promise<void>를 리턴 한다. * @throws {CkError} 에러를 throw 한다. */ static connect(dbInfo?: Array<CkType.IDatabaseConfig>, tunnelDbInfo?: Array<CkType.ITunnelDatabaseConfig>): Promise<void>; /** * DB close 한다. * * @returns {void} 리턴 값 없음. Promise<void>를 리턴 한다. */ static close(): Promise<void>; /** * DB 연결 테스트를 한다. connect 이후에 반듯이 진행햐여 연결 결과를 확인 하도록 하자. * * @returns {boolean} DB 가 연결 되어 있다면 true, 아니면 false 를 리턴 한다. Promise<boolean> 을 리턴 한다. */ static connectTest(): Promise<boolean>; /** * Sequelzie order condition * * @param order * @param sort * @deprecated grpc 연동하여 DB 연결을 하지 않기 때문에, 더 이상 사용 하지 않는다. */ static getOrder(order: Order, sort: Array<CkType.ISqlSort>): Order; /** * Sequelize text where condition - parsing * @param reqIpAndLhdAndHttpInfo * @param where * @param dbOrigColumnName * @param sequelizeColumnName * @param columnValue * @param isAndCond 검색시 and 로 엮을지, or 로 엮을지 구분. true 라면 and 로 엮음 * @deprecated grpc 연동하여 DB 연결을 하지 않기 때문에, 더 이상 사용 하지 않는다. */ static parseSearchText(reqIpAndLhdAndHttpInfo: string, where: WhereOptions | undefined, dbOrigColumnName: string, // database column name sequelizeColumnName: string, // sequelize column name columnValue: CkType.ISqlSearch, isAndCond?: boolean): WhereOptions; /** * Sequelize text where condition - parsing * DB 테이블의 칼럼명과 seqelize 의 칼럼명을 동일하게 사용했을때 해당 함수를 사용 한다. * @param reqIpAndLhdAndHttpInfo * @param where * @param colName * @param columnValue * @param isAndCond 검색시 and 로 엮을지, or 로 엮을지 구분. true 라면 and 로 엮음 * @deprecated grpc 연동하여 DB 연결을 하지 않기 때문에, 더 이상 사용 하지 않는다. */ static parseSearchText2(reqIpAndLhdAndHttpInfo: string, where: WhereOptions | undefined, colName: string, // database column name columnValue: CkType.ISqlSearch, isAndCond?: boolean): WhereOptions; /** * Sequelize number where condition * @param reqIpAndLhdAndHttpInfo * @param where * @param sequelizeColumnName * @param columnValue * @param isAndCond 검색시 and 로 엮을지, or 로 엮을지 구분. true 라면 and 로 엮음 * @deprecated grpc 연동하여 DB 연결을 하지 않기 때문에, 더 이상 사용 하지 않는다. */ static parseSearchNumber(reqIpAndLhdAndHttpInfo: string, where: WhereOptions | undefined, sequelizeColumnName: string, columnValue: CkType.ISqlSearch, isAndCond?: boolean): WhereOptions; /** * 테이블에서 지정한 칼럼만 select 하기 위한 요청을 분석해서 sequelize attribute 에 들어갈 칼럼명 목록을 만든다. * 사용 예제는 ck-ms-core 의 AppService 에서 App 가져오는 부분을 확인 하자. * @param fields * @param definedCol * @deprecated grpc 연동하여 DB 연결을 하지 않기 때문에, 더 이상 사용 하지 않는다. */ static getSelectedAttributes<T, K>(fields: Array<T>, definedCol: K): Array<string> | undefined; /** * sequelize object 를 구한다. transaction 등에 사용 될 것임. * @param dbNumber * @param op * @param lk * @param tid * @param from * @deprecated 더 이상 사용 하지 않는다. getSequelize2 를 사용 하도록 한다. */ static getSequelize(dbNumber: number, op?: string, lk?: string, tid?: string, from?: string): Sequelize | undefined; /** * sequelize object 를 구한다. transaction 등에 사용 될 것임. * * @param reqIpAndLhdAndHttpInfo {string} 로그키 * @param dbNumber {number} 연결된 DB 의 index * @returns {Sequelize | undefined} sequelize typescript object 를 리턴 하거나, DB 연결이 되어 있지 않으면 undefined 를 리턴 한다. */ static getSequelize2(reqIpAndLhdAndHttpInfo: string, dbNumber: number): Sequelize | undefined; /** * DB 를 가져오고, transaction 을 가져 온다. undefined 가 리턴 되면 transaction 가져 오기 실패. * * @param res {express.Response} express 의 response object * @param dbNumber {number} 연결된 DB 의 index * @param opt {TransactionOptions | undefined} transaction option * @returns {Transaction | undefined} transaction object 를 리턴 한다. transaction 을 구하지 못하면 undefined 를 리턴 한다. * @returns {Transaction | undefined} Promise<Transaction|undefined> 를 리턴 하며, express js 에서 주로 사용한다. sequelize typescript object 를 리턴 하거나, DB 연결이 되어 있지 않으면 undefined 를 리턴 한다. */ static getTransactionForWeb(res: express.Response, dbNumber: number, opt?: TransactionOptions): Promise<Transaction | undefined>; /** * DB 를 가져오고, transaction 을 가져 온다. undefined 가 리턴 되면 transaction 가져 오기 실패. * raw query 로 사용 할 때는 db object 가 필요하므로, db object 도 같이 포함해서 리턴 한다. * raw query 를 사용 하지 않는 경우는 getTransactionForWeb 함수를 사용 한다. * * @param res {express.Response} express 의 response object * @param dbNumber {number} 연결된 DB 의 index * @param opt {TransactionOptions | undefined} transaction option * @returns {{ transaction: Transaction|undefined, rdb: Sequelize | undefined }[]} transaction object 와 sequelize object 를 동시에 리턴 한다. express js 에서 주로 사용 한다. */ static getTransactionForWebWithDB(res: express.Response, dbNumber: number, opt?: TransactionOptions): Promise<{ transaction: Transaction | undefined; rdb: Sequelize | undefined; }>; /** * transaction 을 rollback 한다. * * @param res {express.Response} express 의 response object * @returns {void} 리턴값 없음. Promise<void> 를 리턴 한다. */ static rollback(res: express.Response): Promise<void>; /** * transaction 을 commit 한다. * * @param res {express.Response} express 의 response object * @returns {void} 리턴값 없음. Promise<void> 를 리턴 한다. */ static commit(res: express.Response): Promise<void>; /** * mysql 에서 full text 검색을 위한 where 에서 사용될 match 조건 스트링을 만든다. * getFullTextConditionByRep 는 sequelize raw query 의 replace 기능을 이용 하고, * 본 함수는 값을 직접 주어서 검색 조건을 만든다. 본 함수를 사용 하면 sql injection 이슈가 있음을 인지 해야 한다. * * @param colName {string} full text search 하려는 DB 칼럼명 * @param searchValue {string} full text search 하는 검색값 * @returns {string} full text 검색 조건을 리턴 한다. 호출 하는 곳에서 Sequelize.literal 함수의 파라미터로 리턴값을 사용해야 한다. * @deprecated getFullTextCondition2 를 사용 하도록 하자. 2023.09.01 변경됨. */ static getFullTextCondition(colName: string, searchValue: string): string; /** * mysql 에서 full text 검색을 위한 where 에서 사용될 match 조건을 만든다. 내부에서 Sequelize.literal 함수를 실행해서 리턴 한다. * getFullTextConditionByRep 는 sequelize raw query 의 replace 기능을 이용 하고, * 본 함수는 값을 직접 주어서 검색 조건을 만든다. 본 함수를 사용 하면 sql injection 이슈가 있음을 인지 해야 한다. * getFullTextCondition 비교해서, 조금 더 유저 친화적인 fulltext 검색 이다. * * @param colName {string} full text search 하려는 DB 칼럼명 * @param searchValue {string} full text search 하는 검색값 * @param isRetString {boolean | undefined} 리턴값이 string 인지, Sequelize Literal 인지 여부. true 일 경우 string 으로 리턴 된다. * @returns {Literal | string} full text 검색 조건을 가지는 sequelize literal 을 리턴 한다. */ static getFullTextCondition2(colName: string, searchValue: string, isRetString?: boolean): Literal | string; /** * mysql 에서 full text 검색을 위한 where 에서 사용될 match 조건 스트링을 만든다. * sql injection 이슈를 피하기 위해서, sequelize raw query 의 replace 기능을 이용 한다. * 이 함수는 raw query 를 사용 할때 주로 사용 한다. * * @param colName {string} full text search 하려는 DB 칼럼명 * @param searchKey {string} sequelize raw query 에서 replace 되는 키. 가령 ':search_value' 와 같은 값을 주고, sequelize raw query replace 에서 search_value 를 변경 하도록 한다. * @returns {string} full text 검색 조건을 리턴 한다. 호출 하는 곳에서 Sequelize.literal 함수의 파라미터로 리턴값을 사용해야 한다. * @deprecated 2023.09.07 부터 deprecated 되었고, sql injection 문제는 있지만, 조금 더 세련된 fulltext 검색 할 수 있는 getFullTextCondition2 을 사용 하도록 한다. */ static getFullTextConditionByRep(colName: string, searchKey: string): string; } export default CkSequelize;