diff --git a/database/init/99_complete_schema.sql b/database/init/99_complete_schema.sql index 1a23e88..de4ab62 100644 --- a/database/init/99_complete_schema.sql +++ b/database/init/99_complete_schema.sql @@ -956,7 +956,51 @@ CREATE TABLE IF NOT EXISTS material_tubing_mapping ( ); -- ================================ --- 10. 사용자 활동 로그 테이블 (19_add_user_tracking_fields.sql) +-- 10. 사용자 요구사항 테이블들 (05_create_pipe_details_and_requirements_postgres.sql) +-- ================================ + +-- 요구사항 타입 마스터 테이블 +CREATE TABLE IF NOT EXISTS requirement_types ( + id SERIAL PRIMARY KEY, + type_code VARCHAR(50) UNIQUE NOT NULL, -- 'IMPACT_TEST', 'HEAT_TREATMENT' 등 + type_name VARCHAR(100) NOT NULL, -- '임팩테스트', '열처리' 등 + category VARCHAR(50) NOT NULL, -- 'TEST', 'TREATMENT', 'CERTIFICATION', 'CUSTOM' 등 + description TEXT, -- 타입 설명 + is_active BOOLEAN DEFAULT TRUE, + + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- 사용자 추가 요구사항 테이블 +CREATE TABLE IF NOT EXISTS user_requirements ( + id SERIAL PRIMARY KEY, + file_id INTEGER NOT NULL, + + -- 요구사항 타입 + requirement_type VARCHAR(50) NOT NULL, -- 'IMPACT_TEST', 'HEAT_TREATMENT', 'CUSTOM_SPEC', 'CERTIFICATION' 등 + + -- 요구사항 내용 + requirement_title VARCHAR(200) NOT NULL, -- '임팩테스트', '열처리', '인증서' 등 + requirement_description TEXT, -- 상세 설명 + requirement_spec TEXT, -- 구체적 스펙 (예: "Charpy V-notch -20°C") + + -- 상태 관리 + status VARCHAR(20) DEFAULT 'PENDING', -- 'PENDING', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED' + priority VARCHAR(20) DEFAULT 'NORMAL', -- 'LOW', 'NORMAL', 'HIGH', 'URGENT' + + -- 담당자 정보 + assigned_to VARCHAR(100), -- 담당자명 + due_date DATE, -- 완료 예정일 + + -- 메타데이터 + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE +); + +-- ================================ +-- 11. 사용자 활동 로그 테이블 (19_add_user_tracking_fields.sql) -- ================================ CREATE TABLE IF NOT EXISTS user_activity_logs ( @@ -1146,6 +1190,11 @@ CREATE INDEX IF NOT EXISTS idx_files_job_no ON files(job_no); -- 프로젝트 타입 인덱스 (17_add_project_type_column.sql) CREATE INDEX IF NOT EXISTS idx_jobs_project_type ON jobs(project_type); +-- 사용자 요구사항 테이블 인덱스 (05_create_pipe_details_and_requirements_postgres.sql) +CREATE INDEX IF NOT EXISTS idx_user_requirements_file_id ON user_requirements(file_id); +CREATE INDEX IF NOT EXISTS idx_user_requirements_status ON user_requirements(status); +CREATE INDEX IF NOT EXISTS idx_user_requirements_type ON user_requirements(requirement_type); + -- ================================ -- 8. 트리거 함수 및 트리거 생성 -- ================================ @@ -1357,6 +1406,20 @@ INSERT INTO tubing_manufacturers (manufacturer_code, manufacturer_name, country) ('AS_ONE', 'AS ONE Corporation', 'Japan') ON CONFLICT (manufacturer_code) DO NOTHING; +-- 기본 요구사항 타입 데이터 삽입 (05_create_pipe_details_and_requirements_postgres.sql) +INSERT INTO requirement_types (type_code, type_name, category, description) VALUES +('IMPACT_TEST', '임팩테스트', 'TEST', 'Charpy V-notch, Izod 등의 충격 시험'), +('HEAT_TREATMENT', '열처리', 'TREATMENT', '정규화, 어닐링, 템퍼링 등의 열처리'), +('CERTIFICATION', '인증서', 'CERTIFICATION', '재질증명서, 시험성적서 등'), +('CUSTOM_SPEC', '특수사양', 'CUSTOM', '고객 특별 요구사항'), +('NDT_TEST', '비파괴검사', 'TEST', '초음파, 방사선, 자분탐상 등'), +('CHEMICAL_ANALYSIS', '화학분석', 'TEST', '화학성분 분석'), +('MECHANICAL_TEST', '기계적성질', 'TEST', '인장, 압축, 굽힘 시험'), +('SURFACE_TREATMENT', '표면처리', 'TREATMENT', '도금, 도장, 패시베이션 등'), +('DIMENSIONAL_CHECK', '치수검사', 'INSPECTION', '치수, 형상 검사'), +('WELDING_SPEC', '용접사양', 'SPEC', '용접 방법, 용접재 등') +ON CONFLICT (type_code) DO NOTHING; + -- ================================ -- 10. 뷰 생성 -- ================================ @@ -1488,14 +1551,16 @@ BEGIN RAISE NOTICE ' - 특수재질: special_materials, special_material_grades, special_material_patterns'; RAISE NOTICE ' - 비교시스템: material_revisions_comparison, material_comparison_details'; RAISE NOTICE ' - Tubing: tubing_categories, tubing_specifications, tubing_manufacturers, tubing_products, material_tubing_mapping'; + RAISE NOTICE ' - 요구사항: requirement_types, user_requirements'; RAISE NOTICE ' - 로그: user_activity_logs'; RAISE NOTICE '👤 기본 계정: admin/admin123, system/admin123'; RAISE NOTICE '🏗️ 기본 프로젝트: TK-MP-DEV-001, TK-MP-DEMO-001, TK-MP-TEST-001'; RAISE NOTICE '🏭 기본 Tubing 제조사: SWAGELOK, PARKER, HAM_LET, SUPERLOK, FITOK, DK_LOK, GYROLOK, AS_ONE'; RAISE NOTICE '🔐 권한 시스템: 5단계 역할 + 모듈별 세분화된 권한'; - RAISE NOTICE '📊 성능 최적화: 복합인덱스, GIN인덱스, 조건부인덱스 포함 50+ 인덱스 적용'; + RAISE NOTICE '📊 성능 최적화: 복합인덱스, GIN인덱스, 조건부인덱스 포함 107개 인덱스 적용'; RAISE NOTICE '🔄 자동화: updated_at 트리거, 해시 자동생성, 기본 데이터 자동 생성'; RAISE NOTICE '📈 통계뷰: classification_summary, classification_performance, material_inventory_status'; RAISE NOTICE '🔧 함수: generate_material_hash, auto_generate_material_hash'; - RAISE NOTICE '📝 총 테이블 수: 30+개, 인덱스: 50+개, 뷰: 6개, 함수: 10+개'; + RAISE NOTICE '🔬 기본 요구사항 타입: 임팩테스트, 열처리, 인증서, 비파괴검사, 화학분석 등 10종'; + RAISE NOTICE '📝 총 테이블 수: 38개, 인덱스: 107개, 뷰: 5개, 함수: 15개 이상'; END $$;