UNPKG

@ckstack/ck-lib-sequelize

Version:

sequelize helper module

509 lines (508 loc) 34.8 kB
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;