@ckstack/ck-lib-sequelize
Version:
sequelize helper module
182 lines (181 loc) • 10.7 kB
TypeScript
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;