@ckstack/ck-lib-sequelize
Version:
sequelize helper module
509 lines (508 loc) • 34.8 kB
TypeScript
import express from 'express';
import Sequelize, { Transaction } from 'sequelize';
import { Sequelize as SequelizeTS } from 'sequelize-typescript';
/**
* AOP 기능을 지원 하기 위해서 별도로 정의된 데이터베이스 처리 함수.
* 주로 express router 가 timeout 으로 종료 되었을 때, 더 이상 실행 되지 않게 하기 위해서 사용 된다.
* AOP 기능을 지원 하는 함수는 함수 이름의 제일 뒤에 '_AOP' 를 붙여야 한다. 함수명 제일 뒤에 붙는 '_AOP' 값으로 AOP 지원이 설정 된다.
* AOP 함수는 파라미터로 첫번째는 req: express.Request, 두번째는 res: express.Response 를 받아야 한다.
*/
declare class DatabaseWebService {
/**
* redis cache 를 활성화 시킨다.
* @param dbCacheRedisIndex {number} redis cache 로 사용할 redis 연결의 index. 음수 이면, redis cache 를 사용 하지 않는다.
* @param dbCacheAliveSec {number} cache 로 저장된 데이터의 alive 시간. cache 데이터 생성 이후, 설정 시간이 지나면 자동 삭제 된다. 초 단위. 0 보다 큰 값이어야 한다.
* @param dbCacheRedisCluster {boolean | undefined} db 캐시로 사용하는 redis 가 cluster 구성된 redis 인지 여부. true 일 때 cluster 로 구성된 redis 임.
* @param svcName {string | undefined} 개발기에서 하나의 redis 를 사용하기 위한 서비스 구별명
* @returns {void} 리턴 되는 값 없음
*/
static setActiveRedisCache(dbCacheRedisIndex: number, dbCacheAliveSec: number, dbCacheRedisCluster?: boolean, svcName?: string): void;
/**
* DB 테이블에서 row 하나를 읽어서 redis 에 저장하여, 캐시를 만든다. 저장된 캐시는 setActiveRedisCache 에서 설정된 시간 동안 유지 된다.
* T 는 DB table model, U 는 리턴 받은 데이터 구조 이다.
* 만일 redis 에서 캐시가 없는 상태에서 DB 에서 데이터를 조회 하지 못한다면 null 을 리턴 한다.
* transaction 값이 undefined 가 아니라면, 함수를 호출 하는 곳에서 rollback, commit 을 해야 한다.
*
* cacheName 으로 캐시 구분 가능 하다.
*
* 다음과 같이 호출 될 것임
* DatabaseWebService.getCacheSingleDbRow_AOP<TbApp, TblType.ITbApp>(lhd, ...
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param cacheName {string} 캐시를 구분 할 수 있는 캐시명
* @param TCreator {{ new() : T; }} Sequelize DB 테이블 model
* @param dbFilter {{ [key: string]: any; }} DB 테이블 검색 조건
* @param transaction {Transaction | undefined} Sequelize transaction object
* @param order {Sequelize.Order | undefined} 테이블 select 시의 order
* @returns {Promise<U | null>} DB 에서 값을 조회 할 수 없으면 null 을 리턴 하고, 값을 찾으면 U 타입의 값을 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getCacheSingleDbRow_AOP<T, U>(req: express.Request, res: express.Response, cacheName: string, TCreator: {
new (): T;
}, dbFilter: {
[key: string]: any;
}, transaction?: Transaction, order?: Sequelize.Order): Promise<U | null>;
/**
* DB 테이블에서 row 여러 개를 읽어서 redis 에 저장하여, 캐시를 만든다. 저장된 캐시는 설정된(cacheAliveSec) 시간 동안 유지 된다.
* T 는 DB table model, U 는 리턴 받은 데이터 구조 이다.
* 만일 redis 에서 캐시가 없는 상태에서 DB 에서 데이터를 조회 하지 못한다면 empty array 를 리턴 한다.
* transaction 값이 undefined 가 아니라면, 함수를 호출 하는 곳에서 rollback, commit 을 해야 한다.
* 리턴 값은 Array<U> 형태 이다.
*
* cacheName 으로 캐시 구분 가능 하다.
*
* 다음과 같이 호출 될 것임
* DatabaseWebService.getCacheMultiDbRow_AOP<TbApp, TblType.ITbApp>(lhd, ...
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param cacheName {string} 캐시를 구분 할 수 있는 캐시명
* @param TCreator {{ new() : T; }} Sequelize DB 테이블 model
* @param dbFilter {{ [key: string]: any; }} DB 테이블 검색 조건
* @param transaction {Transaction | undefined} Sequelize transaction object
* @param order {Sequelize.Order | undefined} 테이블 select 시의 order
* @returns {Promise<Array<U>>} DB 에서 값을 조회 할 수 없으면 empty array 를 리턴 하고, 값을 찾으면 값이 들어 있는 array 를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getCacheMultiDbRow_AOP<T, U>(req: express.Request, res: express.Response, cacheName: string, TCreator: {
new (): T;
}, dbFilter: {
[key: string]: any;
}, transaction?: Transaction, order?: Sequelize.Order): Promise<Array<U>>;
/**
* DB 테이블을 join 하여 데이터를 읽어서 redis 에 저장하여 캐시를 만든다. 저장된 캐시는 설정된(cacheAliveSec) 시간 동안 유지 된다.
* U 는 리턴 받은 데이터 구조 이다.
* 만일 redis 에서 캐시가 없는 상태에서 DB 에서 데이터를 조회 하지 못한다면 empty array 를 리턴 한다.
* transaction 값이 undefined 가 아니라면, 함수를 호출 하는 곳에서 rollback, commit 을 해야 한다.
* 리턴 값은 Array<U> 형태 이다.
*
* cacheKeyPrefix, cacheName 으로 캐시 구분 가능 하다.
*
* 다음과 같이 호출 될 것임(IFilterAppVersion 는 참고용 코드 실제는 이렇게 사용 되지 않는다.)
* DatabaseWebService.getCacheJoinDbRow_AOP<IFilterAppVersion>(lhd, ...
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param cacheKeyPrefix {string} 캐시 종류 구분
* @param cacheName {string} 캐시를 구분 할 수 있는 캐시명. custom 캐시명 일때만 의미 있음
* @param rdb {SequelizeTS | number} CkSequelize.getSequelize2(lhd, rdb) 로 sequelize object 를 구할 수 있는 값 이나, 연결된 db index. db index 라면 알아서 sequelize object 를 가져 온다.
* @param rawQuery {string} join 을 하는 sql query
* @param replacements {{ [col: string]: any; } | string} join 시에 사용되는 replace 값. join 시에 replace 할 값이 없다면 string 값을 주어서, 캐시 종류를 구분 할 수 있도록 해야 한다.
* @param transaction {Transaction | undefined} DB transaction object
* @returns {Promise<Array<U>>} DB 에서 값을 조회 할 수 없으면 empty array 를 리턴 하고, 값을 찾으면 값이 들어 있는 array 를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getCacheJoinDbRow_AOP<U>(req: express.Request, res: express.Response, cacheKeyPrefix: string, cacheName: string, rdb: SequelizeTS | number, rawQuery: string, replacements: {
[col: string]: any;
} | string, transaction?: Transaction): Promise<Array<U>>;
/**
* 자동으로 생성된 DB 테이블 캐시를 삭제 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} Sequelize DB 테이블 model
* @param ids {Array<number> | number} 삭제할 데이터의 id 목록. 테이블의 row id 목록. 하나의 데이터를 삭제 하려면 row id 값을 주면 된다.
* @returns {Promise<number>} 삭제된 데이터 캐시 갯수
* @throws {CkError} 에러를 throw 한다.
*/
static removeCacheAutoDbRow_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, ids: Array<number> | number): Promise<number>;
/**
* DB 테이블 캐시 데이터를 삭제 한다. single row, multi row 캐시를 모두 지원 한다. getCacheSingleDbRow, getCacheSingleDbRow 으로 생성된 캐시 삭제.
* 캐시 존재 유무 체크 하지 않고, 무조건 삭제 시도 하고, 삭제된 캐시 카운트를 리턴 한다.
* 자동으로 생성된 테이블 캐시는 removeCacheAutoDbRow_AOP 를 사용해서 삭제 하도록 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param cacheName {string} 캐시를 구분 할 수 있는 캐시명. custom 캐시명 일때만 의미 있음
* @param TCreator {{ new() : T; }} Sequelize DB 테이블 model
* @param dbFilter {{ [key: string]: any; }} 캐시를 생성 할때 사용된 dbFilter 와 동일한 값
* @param isMulti {boolean | undefined} true 일 때, 멀티 row 캐시를 삭제 한다. undefined 라면 single row 로 처리 한다.
* @returns {Promise<number>} 삭제된 캐시 카운트를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static removeCacheDbRow_AOP<T>(req: express.Request, res: express.Response, cacheName: string, TCreator: {
new (): T;
}, dbFilter: {
[key: string]: any;
}, isMulti?: boolean): Promise<number>;
/**
* DB 테이블 join 으로 생성된 캐시 데이터를 삭제 한다. getCacheJoinDbRow 으로 생성된 캐시 삭제.
* 캐시 존재 유무 체크 하지 않고, 무조건 삭제 시도 하고, 삭제된 캐시 카운트를 리턴 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param cacheKeyPrefix {string} 캐시 종류 구분
* @param cacheName {string} 캐시를 구분 할 수 있는 캐시명. custom 캐시명 일때만 의미 있음
* @param replacements {{ [col: string]: any; } | string} join 시에 사용되는 replace 값. join 시에 replace 할 값이 없다면 string 값을 주어서, 캐시 종류를 구분 할 수 있도록 해야 한다.
* @returns {Promise<number>} 삭제된 캐시 카운트를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static removeCacheJoinDbRow_AOP(req: express.Request, res: express.Response, cacheKeyPrefix: string, cacheName: string, replacements: {
[col: string]: any;
} | string): Promise<number>;
/**
* id 로 테이블에서 데이터를 가져 온다.
* return 값이 null 이면 데이터를 발견 하지 못한 것이고, string 이면 에러임(에러 코드 리턴)
* null, string(DB 에러) 이 아니면 데이터를 발견해서 데이터를 리턴 한 것임.
*
* 캐시 기능을 지원 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param id {number} row 의 id 값
* @param attributes {Array<string> | undefined} 조회할 테이블의 칼럼명 목록. undefined 라면 모든 칼럼을 select 한다.
* @param transaction {Transaction | undefined} Sequelize transaction object
* @param isUsingCache {boolean | undefined} cache 기능을 사용 할지 여부. setActiveRedisCache 로 캐시 사용이 설정 되고, 이 값이 true 인 경우만 cache 기능을 사용 할 수 있다.
* @returns {Promise<T | null>} 조회한 테이블 row 데이터나, 데이터가 없으면 null 을 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getDataOneById_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, id: number | undefined, attributes?: Array<string>, transaction?: Transaction, isUsingCache?: boolean): Promise<T | null>;
/**
* id(srl) 목록으로 테이블에서 데이터를 가져 온다.
* return 값이 empty array 이면 데이터를 발견 하지 못한 것이고, string 이면 에러임(에러 코드 리턴)
* empty array, string(DB 에러) 이 아니면 데이터를 발견해서 데이터를 리턴 한 것임.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param ids {Array<number>} row 의 id 목록
* @param attributes {Array<string>} 조회할 테이블의 칼럼명 목록. undefined 라면 모든 칼럼을 select 한다.
* @param transaction {Transaction | undefined} Sequelize transaction object
* @param order {Sequelize.Order | undefined} 정렬 방법
* @returns {Promise<Array<T>>} 조회한 테이블 row 데이터 목록을 리턴 한다. 데이터가 없으면 empty array 를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getDatasByIds_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, ids: Array<number>, attributes?: Array<string>, transaction?: Transaction, order?: Sequelize.Order): Promise<Array<T>>;
/**
* getDatasByIds 와 같은 역할을 하지만, 데이터가 아니라 데이터의 카운트를 구한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param ids {Array<number>} row 의 id 목록
* @param transaction {Transaction | undefined} Sequelize transaction object
* @returns {Promise<number>} 데이터 카운트를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static countDatasByIds_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, ids: Array<number>, transaction?: Transaction): Promise<number>;
/**
* rid 로 테이블에서 데이터를 가져 온다.
* return 값이 null 이면 데이터를 발견 하지 못한 것이고, string 이면 에러임(에러 코드 리턴)
* null, string(DB 에러) 이 아니면 데이터를 발견해서 데이터를 리턴 한 것임.
*
* 캐시 기능을 지원 한다. 캐시 기능을 사용하려면, 테이블에 id 칼럼이 반듯이 존재 해야 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param rid {string} row 의 rid
* @param attributes {Array<string>} 조회할 테이블의 칼럼명 목록. undefined 라면 모든 칼럼을 select 한다.
* @param transaction {Transaction | undefined} Sequelize transaction object
* @param isUsingCache {boolean | undefined} cache 기능을 사용 할지 여부. setActiveRedisCache 로 캐시 사용이 설정 되고, 이 값이 true 인 경우만 cache 기능을 사용 할 수 있다.
* @returns {Promise<T | null>} 조회한 테이블 row 데이터나, 데이터가 없으면 null 을 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getDataOneByRid_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, rid: string | undefined, attributes?: Array<string>, transaction?: Transaction, isUsingCache?: boolean): Promise<T | null>;
/**
* rid 목록으로 테이블에서 데이터를 가져 온다.
* return 값이 empty array 이면 데이터를 발견 하지 못한 것이고, string 이면 에러임(에러 코드 리턴)
* empty array, string(DB 에러) 이 아니면 데이터를 발견해서 데이터를 리턴 한 것임.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param rids {Array<string>} row 의 rid 목록
* @param attributes {Array<string>} 조회할 테이블의 칼럼명 목록. undefined 라면 모든 칼럼을 select 한다.
* @param transaction {Transaction | undefined} Sequelize transaction object
* @param order {Sequelize.Order | undefined} 정렬 방법
* @returns {Promise<Array<T>>} 조회한 테이블 row 데이터 목록을 리턴 한다. 데이터가 없으면 empty array 를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getDatasByRids_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, rids: Array<string>, attributes?: Array<string>, transaction?: Transaction, order?: Sequelize.Order): Promise<Array<T>>;
/**
* getDatasByRids 와 같은 역할을 하지만 데이터가 아니라, 데이터의 카운트를 구한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param rids {Array<string>} row 의 rid 목록
* @param transaction {Transaction | undefined} Sequelize transaction object
* @returns {Promise<number>} 데이터 카운트를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static countDatasByRids_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, rids: Array<string>, transaction?: Transaction): Promise<number>;
/**
* 필터 조건으로 테이블에서 데이터를 가져 온다.
* return 값이 null 이면 데이터를 발견 하지 못한 것이고, string 이면 에러임(에러 코드 리턴)
* null, string(DB 에러) 이 아니면 데이터를 발견해서 데이터를 리턴 한 것임.
*
* 캐시 기능을 지원 한다. 캐시 기능을 사용하려면, 테이블에 id 칼럼이 반듯이 존재 해야 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param filter {{ [key: string]: any; }} 검색 조건
* @param attributes {Array<string>} 조회할 테이블의 칼럼명 목록. undefined 라면 모든 칼럼을 select 한다.
* @param transaction {Transaction | undefined} Sequelize transaction object
* @param order {Sequelize.Order | undefined} 정렬 방법
* @param offset {number | undefined} select offset
* @param isUsingCache {boolean | undefined} cache 기능을 사용 할지 여부. setActiveRedisCache 로 캐시 사용이 설정 되고, 이 값이 true 인 경우만 cache 기능을 사용 할 수 있다.
* @returns {Promise<T | null>} 조회한 테이블 row 데이터를 리턴 한다. 데이터를 발견하지 못하면 null 을 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getDataOneByFilter_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, filter: {
[key: string]: any;
}, attributes?: Array<string>, transaction?: Transaction, order?: Sequelize.Order, offset?: number, isUsingCache?: boolean): Promise<T | null>;
/**
* 필터 조건으로 테이블에서 데이터를 가져 온다.
* return 값이 null 이면 데이터를 발견 하지 못한 것이고, string 이면 에러임(에러 코드 리턴)
* null, string(DB 에러) 이 아니면 데이터를 발견해서 데이터를 리턴 한 것임.
*
* order 는 다음과 같이 사용 한다.
* - [['name', 'DESC']] : name 칼럼으로 desc 정렬
* - [['name', 'DESC'], ['id', 'ASC']] : name 칼럼으로 desc 정렬하고, 두번째로 id 로 ASC 정렬
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param filter {{ [key: string]: any; }} 검색 조건
* @param attributes {Array<string>} 조회할 테이블의 칼럼명 목록. undefined 라면 모든 칼럼을 select 한다.
* @param transaction {Transaction | undefined} Sequelize transaction object
* @param order {Sequelize.Order | undefined} 정렬 방법
* @param offset {number | undefined} select offset
* @param limit {number | undefined} seledct limit
* @returns {Promise<Array<T>>} 조회한 테이블 row 데이터 목록을 리턴 한다. 데이터가 없으면 empty array 를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getDatasByFilter_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, filter: {
[key: string]: any;
} | undefined, attributes?: Array<string>, transaction?: Transaction, order?: Sequelize.Order, offset?: number, limit?: number): Promise<Array<T>>;
/**
* getDatasByFilter 와 동일한 역할을 하지만, 데이터가 아니라 데이터의 카운트를 구한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블의 Sequelize 모델
* @param filter {{ [key: string]: any; }} 검색 조건
* @param transaction {Transaction | undefined} Sequelize transaction object
* @returns {Promise<number>} 데이터 카운트를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static countDatasByFilter_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, filter: {
[key: string]: any;
} | undefined, transaction?: Transaction): Promise<number>;
/**
* key array 로 데이터 목록을 구한다. 가령 file_id array 로 파일 데이터를 map 형태로 구 할 때 사용 한다.
*
* 다음과 같이 사용 한다면, <number, TbFile> 은 fids 가 number array 이고 리턴되는 map 에 할당되는 값이 TbFile 이기 때문임.
* getDataMapByKeyArray<number, TbFile>(req, res, fids, TbFile, 'rid', 'id', ['id', rid', 'description']);
*
* 기본 검색 조건은 colName 이 rid 이고, 검색 값이 fids 로 select 한다.
* { rid: { $in: fids } } 가 select 조건이 된다.
* 또한 테이블에서 select 되는 칼럼은 ['rid', 'description'] 이다.
* 그리고, select 로 선택된 값을 mapKey 인 id 로 map 을 만들어서 return 한다.
* 즉, CkUtils.arrayToMaps<VCreator>(selectedRows, 'id'); 의 결과값을 리턴 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param keys Array<T> select 조건 key array
* @param VCreator {{ new() : V; }} select 할 테이블
* @param colName {string} 테이블에서 select 할 칼럼명
* @param mapKey {string} map 으로 만들때 키가되는 칼럼명(k_칼럼값 형태로 키가 생성된다.)
* @param cols {Array<string> | undefined} 테이블에서 특정 칼럼만 가져오고 싶을때 지정 칼럼 목록
* @param toCond {{[key: string]: any; } | undefined} 검색할 테이블 select 시에 추가할 조건
* @param transaction {Transaction | undefined} transaction object
* @returns {Promise<{ [k_mapKey: string]: T }>} mapKey 기준으로 만들어진 object 를 리턴 한다. 에러가 발생하거나, 데이터가 없으면 empty object 를 리턴 한다.
*/
static getDataMapByKeyArray_AOP<T, V>(req: express.Request, res: express.Response, keys: Array<T>, VCreator: {
new (): V;
}, colName: string, mapKey: string, cols?: Array<string>, toCond?: {
[key: string]: any;
}, transaction?: Transaction): Promise<{
[key: string]: any;
}>;
/**
* list_order 순서를 변경 한다.
* raw query 는 함수 내에서 추가 조건이 들어가고, 이에 따라 replacement 도 추가 조건이 들어 간다.
* list_order 변경 관련 값은 함수 내부에서 처리 되고, 파라미터로 주는 raw query 는 데이터 검색 조건만 들어 가도록 해야 한다.
* 움직이는 위치에 따라 list_order + 1, list_order -1 을 해야 하기 때문에 파라미터로 넘겨주는 rawQuery 내에 <list_order> 스트링으로
* 값을 설정 한다.
*
* 순수하게 list_order 만 변경 하고, list_order 변경 가능한지 데이터 비교 하지 않는다는 것이 changeListOrderV2 와 다른점 이다.
* 사용 예제는 한국문화교육의 ContentCategoryAdmRouter.ts 의 카테고리 위치 변경을 참고 하자.
* 또는 ck-gw-core 의 MenuAdmRouter.putLorder 를 참고 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param rdb {SequelizeTS} sequelize object. typescript sequelize 의 object 임.
* @param TCreator {{ new() : T; }} 테이블
* @param rawQuery {string} 부분 raw 쿼리
* @param replacements {{ [key: string]: any; } | undefined} raw 쿼리에서 replace 값
* @param srcId {number} 순서를 변경할 src 의 id
* @param srcListOrder {number} 순서를 변경할 src 의 list_order
* @param destListOrder {number} 순서를 변경할 dest 의 list_order
* @param transaction {Transaction} transaction
* @returns {Promise<number>} 순서가 변경된 row 의 갯수를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static changeListOrder_AOP<T>(req: express.Request, res: express.Response, rdb: SequelizeTS, TCreator: {
new (): T;
}, rawQuery: string, replacements: {
[key: string]: any;
} | undefined, srcId: number, srcListOrder: number, destListOrder: number, transaction: Transaction): Promise<number>;
/**
* list_order 순서를 변경 한다. router 에서 순서 변경하는 것을 함수 한번에 처리 할 수 있도록 묶어 둔 것이다.
* 간단한 순서 변경에 사용 하고, 추가 제한 조건이 있으면 본 함수를 사용 하지 않도록 한다.
* 에러 나면 string 을 리턴 하는데, 이런 경우는 호출 하는 곳에서 transaction rollback 처리 해 주어야 한다.
*
* changeListOrder 와 다른점은 함수 내부에서 순서를 변경 하려는 데이터를 찾아, 데이터 존재 여부 및 list_order 가 동일한지 비교 한다.
* 사용 예제는 한국문화교육의 VRCAdminRouter.ts 의 키워드 위치 변경을 참고 하자.
* 또는 ck-gw-core 의 BoardAdmRouter.ts 파일을 참고 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param rdb {SequelizeTS} sequelize object. typescript sequelize 의 object 임.
* @param TCreator {{ new() : T; }} 테이블
* @param srcRid {string} 순서를 변경할 src 의 rid
* @param destRid {string} 순서를 변경할 dest 의 rid
* @param rawQueryPart {string} 부분 raw 쿼리
* @param replacements {{ [key: string]: any; } | undefined} raw 쿼리에서 replace 값
* @param transaction {Transaction} transaction
* @returns {Promise<number>} 순서가 변경된 row 의 갯수를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static changeListOrderV2_AOP<T>(req: express.Request, res: express.Response, rdb: SequelizeTS, TCreator: {
new (): T;
}, srcRid: string, destRid: string, rawQueryPart: string, replacements: {
[key: string]: any;
} | undefined, transaction: Transaction): Promise<number>;
/**
* 새로운 데이터를 생성 하고, list_order 를 생성된 srl 값과 동일하게 설정 한다.
* list_order 가 있는 대부분의 데이터 생성시 사용 하면 된다.
*
* string 이 리턴 되면, 에러 처리 해야 한다. 에러가 발생 되면 호출 하는 곳에서 transaction rollback 처리 해야 한다.
* 한국 문화 교육의 VRCKeyword 생성을 참고 한다.
* 또는 ck-gw-core 의 BoardAdmRouter.ts 파일을 참고 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreator {{ new() : T; }} 테이블
* @param newData {T} 저장할 데이터의 모델 object
* @param transaction {Transaction} transaction
* @returns {Promise<T>} 생성된 데이터의 모델 object 를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static createDataWithListOrder_AOP<T>(req: express.Request, res: express.Response, TCreator: {
new (): T;
}, newData: T, transaction: Transaction): Promise<T>;
/**
* 데이터를 저장 한다. 정상으로 실행 되면 저장된 데이터를 리턴 하고, 에러이면 에러 코드(string)을 리턴 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param newData {T} 저장할 데이터의 모델 object
* @param transaction {Transaction} transaction
* @returns {Promise<T>} 생성된 데이터의 모델 object 를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static createData_AOP<T>(req: express.Request, res: express.Response, newData: T, transaction?: Transaction): Promise<T>;
/**
* 데이터를 업데이트 한다. number 를 리턴하면, 업데이트 데이터 카운트 이며, 스트링이면 에러 코드 이다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreate {{ new() : T; }} 테이블 모델
* @param modData {{ [key: string]: any; }} 업데이트 할 데이터
* @param where {{ [key: string]: any; }} 업데이트 할 데이터의 filter 조건
* @param transaction {Transaction | undefined} transaction
* @param cacheDataIds {Array<number> | number | undefined} DB 캐시 기능을 사용 할 때, 업데이트 하면서 캐시를 삭제 한다면 삭제 해야할 데이터의 id 또는 id 목록
* @returns {Promise<number>} 업데이트 된 데이터 카운트를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static updateData_AOP<T>(req: express.Request, res: express.Response, TCreate: {
new (): T;
}, modData: any, where: any, transaction?: Transaction, cacheDataIds?: Array<number> | number): Promise<number>;
/**
* 데이터를 삭제 한다. number 를 리턴하면, 삭제된 데이터 카운트 이며, 스트링 이면 에러 코드 이다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreate {{ new() : T; }} 테이블 모델
* @param where {{ [key: string]: any; }} 삭제 할 데이터의 filter 조건
* @param transaction {Transaction | undefined} transaction
* @param cacheDataIds {Array<number> | number | undefined} DB 캐시 기능을 사용 할 때, 업데이트 하면서 캐시를 삭제 한다면 삭제 해야할 데이터의 id 또는 id 목록
* @returns {Promise<number>} 삭제 된 데이터 카운트를 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static deleteData_AOP<T>(req: express.Request, res: express.Response, TCreate: {
new (): T;
}, where: any, transaction?: Transaction, cacheDataIds?: Array<number> | number): Promise<number>;
/**
* 칼럼 값을 증가 시키거나, 감소 시킨다. true 를 리턴하면 처리 성공이고, 스트링 이면 에러 코드 이다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param TCreate {{ new() : T; }} 테이블 모델
* @param where {{ [key: string]: any; }} 쿼리 검색 조건
* @param cols {Array<string>} increase, decrease 시킬 칼럼명. 일반적으로 칼럼 하나만 사용 될 것이지만, 여러개 칼럼을 처리 할 수 있다.
* @param by {number} increase, decrease 시키는 양. 1 이면 1씩 증가하고, -1 이면 1씩 감소 한다.
* @param transaction {Transaction | undefined} transaction
* @param cacheDataIds {Array<number> | number | undefined} DB 캐시 기능을 사용 할 때, 업데이트 하면서 캐시를 삭제 한다면 삭제 해야할 데이터의 id 또는 id 목록
* @returns {Promise<void>} 리턴값 없음
* @throws {CkError} 에러를 throw 한다.
*/
static incrementData_AOP<T>(req: express.Request, res: express.Response, TCreate: {
new (): T;
}, where: any, cols: Array<string>, by: number, transaction?: Transaction, cacheDataIds?: Array<number> | number): Promise<void>;
/**
* raw query 를 사용하여 데이터를 select 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param rawQuery {string} join 을 하는 sql query
* @param rdb {SequelizeTS | number} CkSequelize.getSequelize2(lhd, rdb) 로 sequelize object 를 구할 수 있는 값 이나, 연결된 db index. db index 라면 알아서 sequelize object 를 가져 온다.
* @param replacements {{ [col: string]: any; } | undefined} join 시에 사용되는 replace 값
* @param transaction {Transaction | undefined} DB transaction object
* @returns {{ [col_name: string]: any; }[]} select 된 데이터 목록을 리턴 한다.
* @throws {CkError} 에러를 throw 한다.
*/
static getDataByRawQuery_AOP(req: express.Request, res: express.Response, rawQuery: string, rdb: SequelizeTS | number, replacements?: {
[col: string]: any;
}, transaction?: Transaction): Promise<Array<{
[col_name: string]: any;
}>>;
/**
* DDL(create, drop, alter, truncate) 쿼리를 실행 한다.
*
* @param req {express.Request} express request object
* @param res {express.Response} express response object
* @param rawQuery {string} sql 문
* @param rdb {SequelizeTS | number} CkSequelize.getSequelize2(lhd, rdb) 로 sequelize object 를 구할 수 있는 값 이나, 연결된 db index. db index 라면 알아서 sequelize object 를 가져 온다.
* @returns {void} 리턴값 없음
* @throws {CkError} 에러를 throw 한다.
*/
static runDDLQuery(req: express.Request, res: express.Response, rawQuery: string, rdb: SequelizeTS | number): Promise<void>;
}
export default DatabaseWebService;