# WACE ERP 파이프라인 공통 룰 (모든 에이전트 필수 준수) ## 1. 화면 유형 구분 (절대 규칙!) 이 시스템은 **관리자 메뉴**와 **사용자 메뉴**가 완전히 다른 방식으로 동작한다. 기능 구현 시 반드시 어느 유형인지 먼저 판단하라. ### 관리자 메뉴 (Admin) - **구현 방식**: React 코드 기반 페이지 (`.tsx` 파일) - **경로**: `frontend/app/(main)/admin/{기능명}/page.tsx` - **메뉴 등록**: `menu_info` 테이블에 INSERT 필수 (코드만 만들고 메뉴 등록 안 하면 미완성!) - **대상**: 시스템 설정, 사용자 관리, 결재 관리, 코드 관리 등 - **특징**: 하드코딩된 UI, 관리자만 접근 ### 사용자 메뉴 (User/Screen) - **구현 방식**: 로우코드 기반 (DB에 JSON으로 화면 구성 저장) - **데이터 저장**: `screen_layouts` 테이블에 JSON 형식 보관 - **화면 디자이너**: 스크린 디자이너로 드래그앤드롭 구성 - **V2 컴포넌트**: `frontend/lib/registry/components/v2-*` 디렉토리 - **대상**: 일반 업무 화면, BOM, 문서 관리 등 - **특징**: 코드 수정 없이 화면 구성 변경 가능 ### 판단 기준 | 질문 | 관리자 메뉴 | 사용자 메뉴 | |------|-------------|-------------| | 누가 쓰나? | 시스템 관리자 | 일반 사용자 | | 화면 구조 고정? | 고정 (코드) | 유동적 (JSON) | | URL 패턴 | `/admin/*` | 스크린 디자이너 경유 | | 메뉴 등록 | `menu_info` INSERT 필수 | 스크린 레이아웃 등록 | ## 2. 관리자 메뉴 등록 (코드 구현 후 필수!) 관리자 기능을 코드로 만들었으면 반드시 `menu_info`에 등록해야 한다. ```sql -- 예시: 결재 템플릿 관리 메뉴 등록 INSERT INTO menu_info (menu_id, menu_name, url, parent_id, menu_type, sort_order, is_active, company_code) VALUES ('approvalTemplate', '결재 템플릿', '/admin/approvalTemplate', 'approval', 'ADMIN', 40, 'Y', '대상회사코드'); ``` - 기존 메뉴 구조를 먼저 조회해서 parent_id, sort_order 등을 맞춰라 - company_code 별로 등록이 필요할 수 있다 - menu_auth_group 권한 매핑도 필요하면 추가 ## 3. 하드코딩 금지 / 범용성 필수 - 특정 회사에만 동작하는 코드 금지 - 특정 사용자 ID에 의존하는 로직 금지 - 매직 넘버 사용 금지 (상수 또는 설정 파일로 관리) - 하드코딩 색상 금지 (CSS 변수 사용: bg-primary, text-destructive 등) - 하드코딩 URL 금지 (환경 변수 또는 API 클라이언트 사용) ## 4. 테스트 환경 정보 - **테스트 계정**: userId=`wace`, password=`qlalfqjsgh11` - **역할**: SUPER_ADMIN (company_code = "*") - **개발 프론트엔드**: http://localhost:9771 - **개발 백엔드 API**: http://localhost:8080 - **개발 DB**: postgresql://postgres:ph0909!!@39.117.244.52:11132/plm ## 5. 기능 구현 완성 체크리스트 기능 하나를 "완성"이라고 말하려면 아래를 전부 충족해야 한다: - [ ] DB: 마이그레이션 작성 + 실행 완료 - [ ] DB: company_code 컬럼 + 인덱스 존재 - [ ] BE: API 엔드포인트 구현 + 라우트 등록 - [ ] BE: company_code 필터링 적용 - [ ] FE: API 클라이언트 함수 작성 (lib/api/) - [ ] FE: 화면 컴포넌트 구현 - [ ] **메뉴 등록**: 관리자 메뉴면 menu_info INSERT, 사용자 메뉴면 스크린 레이아웃 등록 - [ ] 빌드 통과: 백엔드 tsc + 프론트엔드 tsc ## 6. 절대 하지 말 것 1. 페이지 파일만 만들고 메뉴 등록 안 하기 (미완성!) 2. fetch() 직접 사용 (lib/api/ 클라이언트 필수) 3. company_code 필터링 빠뜨리기 4. 하드코딩 색상/URL/사용자ID 사용 5. Card 안에 Card 중첩 (중첩 박스 금지) 6. 백엔드 재실행하기 (nodemon이 자동 재시작)