wing-ops/backend/src/db/seedHns.ts
htlee 63645e9f85 refactor(phase4): HNS 물질정보 DB 이전 + 정적 데이터 정리
- HNS_SUBSTANCE 테이블 마이그레이션 SQL 추가 (002_hns_substance.sql)
- HNS 검색/상세 API 구현 (hnsRouter, hnsService)
- HNS 시드 스크립트 추가 (seedHns.ts, 20종 물질 데이터)
- 프론트엔드 HNSSubstanceView: 정적 HNS_SEARCH_DB → API 호출 전환
- HNSSearchSubstance 타입 common/types/hns.ts로 분리
- Mock 데이터 이동: data/ → common/mock/ (vesselMockData, backtrackMockData)
- layerDatabase.ts → common/services/layerService.ts 이동
- layerData.ts → common/data/layerData.ts 이동
- scat/index.ts 누락 수정 + .gitignore scat 규칙 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 14:52:46 +09:00

64 lines
2.0 KiB
TypeScript

import 'dotenv/config'
import { wingPool } from './wingDb.js'
// 프론트엔드 정적 데이터를 직접 import (tsx로 실행)
import { HNS_SEARCH_DB } from '../../../frontend/src/data/hnsSubstanceSearchData.js'
async function seedHnsSubstances() {
console.log('HNS 물질정보 시드 시작...')
console.log(`${HNS_SEARCH_DB.length}종 물질 데이터 삽입 예정`)
const client = await wingPool.connect()
try {
await client.query('BEGIN')
// 기존 데이터 삭제
await client.query('DELETE FROM HNS_SUBSTANCE')
let inserted = 0
for (const s of HNS_SEARCH_DB) {
// 검색용 컬럼 추출, 나머지는 DATA JSONB로 저장
const { abbreviation, nameKr, nameEn, unNumber, casNumber, sebc, ...detailData } = s
await client.query(
`INSERT INTO HNS_SUBSTANCE (SBST_SN, ABBREVIATION, NM_KR, NM_EN, UN_NO, CAS_NO, SEBC, DATA)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
ON CONFLICT (SBST_SN) DO UPDATE SET
ABBREVIATION = EXCLUDED.ABBREVIATION,
NM_KR = EXCLUDED.NM_KR,
NM_EN = EXCLUDED.NM_EN,
UN_NO = EXCLUDED.UN_NO,
CAS_NO = EXCLUDED.CAS_NO,
SEBC = EXCLUDED.SEBC,
DATA = EXCLUDED.DATA`,
[s.id, abbreviation, nameKr, nameEn, unNumber, casNumber, sebc, JSON.stringify(detailData)]
)
inserted++
if (inserted % 100 === 0) {
console.log(` ${inserted}/${HNS_SEARCH_DB.length}건 삽입 완료...`)
}
}
await client.query('COMMIT')
// 결과 확인
const { rows } = await client.query('SELECT COUNT(*) as count FROM HNS_SUBSTANCE')
console.log(`시드 완료! 총 ${rows[0].count}종의 HNS 물질이 저장되었습니다.`)
} catch (err) {
await client.query('ROLLBACK')
console.error('HNS 시드 실패:', err)
throw err
} finally {
client.release()
await wingPool.end()
}
}
seedHnsSubstances().catch((err) => {
console.error(err)
process.exit(1)
})