From 4762da080d9dc4e5bab6df9657043682c843c615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=ED=97=8C?= Date: Thu, 18 Jun 2026 13:12:42 +0900 Subject: [PATCH] =?UTF-8?q?chore(backend):=20=EA=B0=9C=EB=B0=9C=EC=9A=A9?= =?UTF-8?q?=20=EC=8B=9C=EB=93=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - backend/scripts/dev_seed.sql: 재실행 안전(고정 UUID) - 로그인 계정 test01/1234(공급사 1) + 상품6·견적6·세션6 - 비밀번호는 pgcrypto bcrypt(crypt+gen_salt bf) — 백엔드 검증과 호환 - 세션 status/qt_type 다양화, 참여 가능(협상생성+미래마감) 케이스 포함 Co-Authored-By: Claude Opus 4.8 (1M context) --- backend/scripts/dev_seed.sql | 86 ++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 backend/scripts/dev_seed.sql diff --git a/backend/scripts/dev_seed.sql b/backend/scripts/dev_seed.sql new file mode 100644 index 0000000..039efe5 --- /dev/null +++ b/backend/scripts/dev_seed.sql @@ -0,0 +1,86 @@ +-- 개발/연동 테스트용 시드 데이터. +-- 로그인 계정 1개(공급사 1개) + 협상 세션 6개(상품/견적 조인용)를 채운다. +-- 재실행 안전: 고정 UUID 로 먼저 지운 뒤 다시 넣는다. +-- +-- 실행: PGPASSWORD=postgres psql -h 127.0.0.1 -p 5432 -U postgres -d negosium_db -f backend/scripts/dev_seed.sql +-- +-- 로그인: id=test01 / pw=1234 (비밀번호는 pgcrypto bcrypt 로 해시 — 백엔드 bcrypt.checkpw 와 호환) + +\set ON_ERROR_STOP on + +BEGIN; + +-- 고정 UUID (재실행 시 식별/삭제용) +-- supplier : a0000000-...-0001 +-- dummy fk : e0000000-...-0000 (company_id/user_id 등 no-FK 더미) +-- items : b...001~006 / quotations : c...001~006 / sessions : d...001~006 + +-- 1) 기존 시드 제거 (하드 삭제) +DELETE FROM supplier.supplier_user_tokens + WHERE su_id IN (SELECT su_id FROM supplier.supplier_users WHERE id = 'test01'); +DELETE FROM supplier.supplier_users WHERE id = 'test01'; +DELETE FROM negotiation.sessions WHERE supplier_id = 'a0000000-0000-0000-0000-000000000001'; +DELETE FROM partner.items WHERE item_id::text LIKE 'b0000000-0000-0000-0000-0000000000%'; +DELETE FROM quotation.quotations WHERE qt_id::text LIKE 'c0000000-0000-0000-0000-0000000000%'; +DELETE FROM partner.suppliers WHERE supplier_id = 'a0000000-0000-0000-0000-000000000001'; + +-- 2) 공급사 +INSERT INTO partner.suppliers (supplier_id, company_id, user_id, name, code) +VALUES ( + 'a0000000-0000-0000-0000-000000000001', + 'e0000000-0000-0000-0000-000000000000', + 'e0000000-0000-0000-0000-000000000000', + '테스트공급사(연동)', + 'SUP-DEV-01' +); + +-- 3) 로그인 계정 (id=test01 / pw=1234) +INSERT INTO supplier.supplier_users + (supplier_id, id, password, name, email, contact_number, last_accessed_at, status, role) +VALUES ( + 'a0000000-0000-0000-0000-000000000001', + 'test01', + crypt('1234', gen_salt('bf', 12)), + '홍길동', + 'test01@example.com', + '010-1234-5678', + now(), + 1, -- ACTIVE + 2 -- MANAGER +); + +-- 4) 상품 6개 +INSERT INTO partner.items (item_id, company_id, user_id, name, code, model_name, manufacturer, price) +VALUES + ('b0000000-0000-0000-0000-000000000001','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','사무용 노트북 14인치','IMK-10231','NB-1400-PRO','삼성전자', 1250000), + ('b0000000-0000-0000-0000-000000000002','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','레이저 복합기','IMK-10232','MFC-7890DW','브라더', 430000), + ('b0000000-0000-0000-0000-000000000003','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','27인치 4K 모니터','IMK-10233','U2723QE','델', 690000), + ('b0000000-0000-0000-0000-000000000004','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','무선 기계식 키보드','IMK-10234','MX-KEYS-M','로지텍', 159000), + ('b0000000-0000-0000-0000-000000000005','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','A4 무선 레이저프린터','IMK-10235','SL-M2030','HP', 210000), + ('b0000000-0000-0000-0000-000000000006','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','회의실 대형 디스플레이 65인치','IMK-10236','QM65R','삼성전자', 2890000); + +-- 5) 견적 6개 (end_time = 마감 진실값) +-- type: 1=재협상(RENEGO) 2=재견적(REQUOTE) / status: 1=생성 2=진행중 3=마감 +INSERT INTO quotation.quotations + (qt_id, user_id, qt_setting_id, version_id, name, number, type, round, status, start_time, end_time) +VALUES + ('c0000000-0000-0000-0000-000000000001','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','노트북 재견적','QT-2026-000101',2,1,1,'2026-06-15 09:00+00','2026-06-20 18:00+00'), + ('c0000000-0000-0000-0000-000000000002','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','복합기 재협상','QT-2026-000102',1,1,2,'2026-06-14 09:00+00','2026-06-19 12:30+00'), + ('c0000000-0000-0000-0000-000000000003','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','모니터 재견적','QT-2026-000103',2,1,3,'2026-06-10 09:00+00','2026-06-22 09:00+00'), + ('c0000000-0000-0000-0000-000000000004','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','키보드 재협상','QT-2026-000104',1,1,2,'2026-06-13 09:00+00','2026-06-21 15:45+00'), + ('c0000000-0000-0000-0000-000000000005','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','프린터 재견적','QT-2026-000105',2,1,3,'2026-06-10 09:00+00','2026-06-16 11:00+00'), + ('c0000000-0000-0000-0000-000000000006','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','e0000000-0000-0000-0000-000000000000','디스플레이 재견적','QT-2026-000106',2,1,1,'2026-06-16 09:00+00','2026-06-25 17:00+00'); + +-- 6) 협상 세션 6개 (supplier_id = 로그인 공급사) / 다양한 상태 +-- status: 1=협상생성 2=협상중 3=협상완료 4=미참여 5=협상거부 +INSERT INTO negotiation.sessions + (session_id, quotation_id, item_id, supplier_id, qt_number, qt_round, qt_type, target_price, status, end_time) +VALUES + ('d0000000-0000-0000-0000-000000000001','c0000000-0000-0000-0000-000000000001','b0000000-0000-0000-0000-000000000001','a0000000-0000-0000-0000-000000000001','QT-2026-000101',1,2,1180000,1,'2026-06-20 18:00+00'), + ('d0000000-0000-0000-0000-000000000002','c0000000-0000-0000-0000-000000000002','b0000000-0000-0000-0000-000000000002','a0000000-0000-0000-0000-000000000001','QT-2026-000102',1,1, 400000,2,'2026-06-19 12:30+00'), + ('d0000000-0000-0000-0000-000000000003','c0000000-0000-0000-0000-000000000003','b0000000-0000-0000-0000-000000000003','a0000000-0000-0000-0000-000000000001','QT-2026-000103',1,2, 650000,3,'2026-06-22 09:00+00'), + ('d0000000-0000-0000-0000-000000000004','c0000000-0000-0000-0000-000000000004','b0000000-0000-0000-0000-000000000004','a0000000-0000-0000-0000-000000000001','QT-2026-000104',1,1, 150000,5,'2026-06-21 15:45+00'), + ('d0000000-0000-0000-0000-000000000005','c0000000-0000-0000-0000-000000000005','b0000000-0000-0000-0000-000000000005','a0000000-0000-0000-0000-000000000001','QT-2026-000105',1,2, 200000,4,'2026-06-16 11:00+00'), + ('d0000000-0000-0000-0000-000000000006','c0000000-0000-0000-0000-000000000006','b0000000-0000-0000-0000-000000000006','a0000000-0000-0000-0000-000000000001','QT-2026-000106',1,2,2700000,1,'2026-06-25 17:00+00'); + +COMMIT;