diff options
| author | joonhoekim <26rote@gmail.com> | 2025-09-23 14:22:46 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-09-23 14:22:46 +0900 |
| commit | bd758e6611850d6c7c865cf1d5dbfd3ef6946bee (patch) | |
| tree | 1b974a69ee69c50cfdaaa048f4a0209ea001a06b /lib/nonsap-sync/table-config.ts | |
| parent | da00bbf203534b2663289d6fe45b6ed8663e7e11 (diff) | |
(김준회) nonsap code 테이블 동기화 처리
Diffstat (limited to 'lib/nonsap-sync/table-config.ts')
| -rw-r--r-- | lib/nonsap-sync/table-config.ts | 352 |
1 files changed, 0 insertions, 352 deletions
diff --git a/lib/nonsap-sync/table-config.ts b/lib/nonsap-sync/table-config.ts deleted file mode 100644 index 85744b44..00000000 --- a/lib/nonsap-sync/table-config.ts +++ /dev/null @@ -1,352 +0,0 @@ -import { TableName } from '@/lib/oracle-db/nonsap/oracle-schema'; - -export interface TableSyncConfig { - /** 차분 동기화에 사용할 타임스탬프 컬럼 (우선순위 순) */ - timestampColumns: string[]; - /** 기본키 컬럼들 */ - primaryKeys: string[]; - /** 정렬에 사용할 컬럼 (차분 동기화용) */ - orderByColumns: string[]; - /** 인덱스가 있는 컬럼인지 여부 */ - hasTimestampIndex: boolean; - /** 예상 변경 빈도 (high/medium/low) */ - changeFrequency: 'high' | 'medium' | 'low'; -} - -// 테이블별 동기화 설정 -export const TABLE_SYNC_CONFIG: Record<TableName, TableSyncConfig> = { - // 자재 관련 테이블 (변경 빈도 높음) - 'CMCTB_MAT_BSE': { - timestampColumns: ['FIN_CHG_DTM', 'FS_INP_DTM', 'IF_DT'], - primaryKeys: ['MAT_NO'], - orderByColumns: ['FIN_CHG_DTM', 'MAT_NO'], - hasTimestampIndex: true, - changeFrequency: 'high' - }, - 'CMCTB_MAT_PLNT': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['MAT_NO', 'PLNT'], - orderByColumns: ['IF_DT', 'IF_TM', 'MAT_NO'], - hasTimestampIndex: true, - changeFrequency: 'high' - }, - - // Customer 관련 테이블 (변경 빈도 중간) - 'CMCTB_CUSTOMER_GENERAL': { - timestampColumns: ['IF_DT', 'CHG_DT'], - primaryKeys: ['CSTM_CD'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_ADDR': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'ADR_NO', 'INTL_ADR_VER_ID'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - - // 코드 관련 테이블 (변경 빈도 낮음) - 기본값으로 설정 - 'CMCTB_CD': { - timestampColumns: ['CHG_DT', 'CRTE_DT'], - primaryKeys: [], // PostgreSQL 스키마에 기본키 미정의 - orderByColumns: ['CHG_DT', 'CHG_TM', 'CD_CLF'], - hasTimestampIndex: false, - changeFrequency: 'low' - }, - 'CMCTB_CDNM': { - timestampColumns: ['CHG_DT', 'CHG_TM', 'CRTE_DT', 'CRTE_TM'], - primaryKeys: [], // PostgreSQL 스키마에 기본키 미정의 - orderByColumns: ['CHG_DT', 'CHG_TM', 'LANG_KEY', 'CD_CLF'], - hasTimestampIndex: false, - changeFrequency: 'low' - }, - 'CMCTB_CD_CLF': { - timestampColumns: ['XDATS', 'XTIMS', 'CHG_DT', 'CHG_TM'], - primaryKeys: [], // PostgreSQL 스키마에 기본키 미정의 - orderByColumns: ['XDATS', 'XTIMS', 'CD_CLF'], - hasTimestampIndex: false, - changeFrequency: 'low' - }, - 'CMCTB_CD_CLF_NM': { - timestampColumns: ['CHG_DT', 'CHG_TM', 'CRTE_DT', 'CRTE_TM'], - primaryKeys: [], // PostgreSQL 스키마에 기본키 미정의 - orderByColumns: ['CHG_DT', 'CHG_TM', 'LANG_KEY', 'CD_CLF'], - hasTimestampIndex: false, - changeFrequency: 'low' - }, - - // Customer 관련 테이블 (변경 빈도 중간) - 'CMCTB_CUSTOMER_CFPN': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'SALE_ORG_CD', 'DIST_PATH', 'PDT_GRP', 'PTNR_SKL', 'PTNR_CNT'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_COMPNY': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'CO_ID'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_REPREMAIL': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'ADR_NO', 'REPR_SER', 'VLD_ST_DT'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_REPRFAX': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'ADR_NO', 'REPR_SER', 'VLD_ST_DT'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_REPRTEL': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'ADR_NO', 'REPR_SER', 'VLD_ST_DT'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_REPRURL': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'ADR_NO', 'REPR_SER', 'VLD_ST_DT'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_SORG': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'SALE_ORG_CD', 'DIST_PATH', 'PDT_GRP'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_TAXCD': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'DPRT_NTN', 'TX_CTG'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_CUSTOMER_TAXNUM': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['CSTM_CD', 'TX_NO_CTG'], - orderByColumns: ['IF_DT', 'IF_TM', 'CSTM_CD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - - // 자재 관련 테이블 (변경 빈도 높음) - 'CMCTB_MAT_CLAS': { - timestampColumns: ['CHG_DT'], - primaryKeys: ['CLAS_CD'], - orderByColumns: ['CHG_DT', 'CLAS_CD'], - hasTimestampIndex: false, - changeFrequency: 'medium' - }, - 'CMCTB_MAT_CLAS_SPCHAR': { - timestampColumns: ['CHG_DT'], - primaryKeys: ['CLAS_CD', 'SPCHAR_CD'], - orderByColumns: ['CHG_DT', 'CLAS_CD'], - hasTimestampIndex: false, - changeFrequency: 'medium' - }, - 'CMCTB_MAT_DSC': { - timestampColumns: [], // 시간 컬럼 없음 - primaryKeys: ['MAT_NO', 'LANG_KEY'], - orderByColumns: ['MAT_NO', 'LANG_KEY'], - hasTimestampIndex: false, - changeFrequency: 'low' - }, - 'CMCTB_MAT_SPCHAR': { - timestampColumns: [], // 시간 컬럼 없음 - primaryKeys: ['MAT_NO', 'SPCHAR_CD'], - orderByColumns: ['MAT_NO', 'SPCHAR_CD'], - hasTimestampIndex: false, - changeFrequency: 'medium' - }, - 'CMCTB_MAT_SPCHAR_MAST': { - timestampColumns: ['CHG_DT'], - primaryKeys: ['SPCHAR_CD'], - orderByColumns: ['CHG_DT', 'SPCHAR_CD'], - hasTimestampIndex: false, - changeFrequency: 'low' - }, - 'CMCTB_MAT_SPCHAR_VAL': { - timestampColumns: ['CHG_DT'], - primaryKeys: ['SPCHAR_CD', 'SPCHAR_VAL_CD'], - orderByColumns: ['CHG_DT', 'SPCHAR_CD'], - hasTimestampIndex: false, - changeFrequency: 'low' - }, - 'CMCTB_MAT_UOM': { - timestampColumns: [], // 시간 컬럼 없음 - primaryKeys: ['MAT_NO', 'SBST_UOM'], - orderByColumns: ['MAT_NO', 'SBST_UOM'], - hasTimestampIndex: false, - changeFrequency: 'low' - }, - - // 프로젝트 관련 테이블 - 'CMCTB_PROJ_BIZCLS': { - timestampColumns: [], // 시간 컬럼 없음 - primaryKeys: ['PROJ_NO', 'TYPE'], - orderByColumns: ['PROJ_NO', 'TYPE'], - hasTimestampIndex: false, - changeFrequency: 'medium' - }, - 'CMCTB_PROJ_MAST': { - timestampColumns: ['XDATS', 'XTIMS'], - primaryKeys: ['PROJ_NO'], - orderByColumns: ['XDATS', 'XTIMS', 'PROJ_NO'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_PROJ_WBS': { - timestampColumns: ['XDATS', 'XTIMS'], - primaryKeys: ['PROJ_NO', 'WBS_ELMT'], - orderByColumns: ['XDATS', 'XTIMS', 'PROJ_NO'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - - // Vendor 관련 테이블 - 'CMCTB_VENDOR_ADDR': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'INTL_ADR_VER_ID'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_COMPNY': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'CO_CD'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_GENERAL': { - timestampColumns: ['IF_DT', 'IF_TM', 'CHG_DT', 'CHG_TM'], - primaryKeys: ['VNDRCD'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_GRP': { - timestampColumns: ['CHG_DT', 'CHG_TM', 'CRTE_DT', 'CRTE_TM'], - primaryKeys: ['VNDRCD', 'BIZ_GRP_CD'], - orderByColumns: ['CHG_DT', 'CHG_TM', 'VNDRCD'], - hasTimestampIndex: false, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_INCO': { - timestampColumns: ['CHG_DT', 'CHG_TM', 'CRTE_DT', 'CRTE_TM'], - primaryKeys: ['VNDRCD'], - orderByColumns: ['CHG_DT', 'CHG_TM', 'VNDRCD'], - hasTimestampIndex: false, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_PORG': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'PUR_ORG_CD'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_REPREMAIL': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'REPR_SER', 'VLD_ST_DT'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_REPRFAX': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'REPR_SER', 'VLD_ST_DT'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_REPRTEL': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'REPR_SER', 'VLD_ST_DT'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_REPRURL': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'REPR_SER', 'VLD_ST_DT'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_TAXNUM': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'TX_NO_CTG'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_VFPN': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'PUR_ORG_CD', 'VNDR_SUB_NO', 'PLNT_CD', 'PTNR_SKL', 'PTNR_CNT'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - 'CMCTB_VENDOR_WHTHX': { - timestampColumns: ['IF_DT', 'IF_TM'], - primaryKeys: ['VNDRCD', 'CO_CD', 'SRCE_TX_TP'], - orderByColumns: ['IF_DT', 'IF_TM', 'VNDRCD'], - hasTimestampIndex: true, - changeFrequency: 'medium' - }, - - // 견적 관련 테이블 - 'PLFTB_ESTM_PROJ_MAST': { - timestampColumns: ['FIN_CHG_DTM', 'FS_INP_DTM', 'ESTM_AOM_STAT_CHG_DTM'], - primaryKeys: ['ESTM_PROJ_NO'], - orderByColumns: ['FIN_CHG_DTM', 'ESTM_PROJ_NO'], - hasTimestampIndex: true, - changeFrequency: 'high' - } -}; - -// 기본 설정 (설정되지 않은 테이블용) -const DEFAULT_CONFIG: TableSyncConfig = { - timestampColumns: ['CHG_DT', 'IF_DT', 'CRTE_DT'], - primaryKeys: [], // 기본키 없음 - onConflictDoNothing 사용 - orderByColumns: ['CHG_DT'], - hasTimestampIndex: false, - changeFrequency: 'medium' -}; - -/** - * 테이블의 동기화 설정 가져오기 - */ -export function getTableSyncConfig(tableName: TableName): TableSyncConfig { - return TABLE_SYNC_CONFIG[tableName] || DEFAULT_CONFIG; -} - -/** - * 차분 동기화가 가능한 테이블인지 확인 - */ -export function canUseDeltaSync(tableName: TableName): boolean { - const config = getTableSyncConfig(tableName); - return config.timestampColumns.length > 0 && config.timestampColumns[0] !== 'ROWID'; -} - -/** - * 테이블의 최적 타임스탬프 컬럼 가져오기 - */ -export function getTimestampColumn(tableName: TableName): string | null { - const config = getTableSyncConfig(tableName); - return config.timestampColumns.length > 0 ? config.timestampColumns[0] : null; -}
\ No newline at end of file |
