Commit Graph

61 Commits

Author SHA1 Message Date
hjjeong 5e8de47a6e Merge remote-tracking branch 'origin/main' into feat/kakao-login
# Conflicts:
#	src/app/(main)/m/orders/new/page.tsx
2026-05-06 15:01:19 +09:00
hjjeong 39465b38d9 feat(mobile): admin 메뉴 토글 + 발주 카드/리스트 뷰 + admin-panel PC 전용 안내
모바일 더보기에 admin 메뉴 전환 기능, 발주 페이지에 카드/리스트 뷰 선택,
admin-panel 페이지의 모바일 진입 가드를 함께 추가. PC 동작 영향 없음.

- /m/more: user.isAdmin 인 경우에만 [관리자 메뉴 보기] 토글 노출.
  ON 시 menu_info.menu_type=0 그룹(권한/부서/사용자/공통코드 등)으로 메뉴바 전환.
  사용자 카드 색도 amber 로 바뀌어 현재 모드를 시각적으로 표시. 다시 누르면
  사용자 메뉴(거래처 주문/마스터/매입/출고/통계)로 복귀. 모드는 localStorage
  ("momo_admin_mode") 에 저장되어 새로고침 후에도 유지.
- /m/orders/new: 카드 뷰(2열 그리드)와 리스트 뷰(가로 한 줄 + 썸네일)를 토글로
  전환. PC 트리·모바일 트리 양쪽에 동일 적용, 같은 viewMode state 공유. 사용자
  선택은 localStorage ("momo_orders_new_view_mode") 에 저장.
- /admin-panel: 모바일(md 미만) 진입 시 안내 화면(PC에서 사용해주세요 + 모바일
  메뉴 복귀 링크) 노출. md+ 에서는 기존 데스크탑 패널 그대로. /m/more 의
  관리자 메뉴 항목들이 admin-panel 로 이동할 때 모바일에서 화면 깨짐 방지.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 22:06:53 +09:00
hjjeong 47a1dc5843 feat(mobile): /m/* 모바일 셸 분리 + 발주 페이지 모바일 뷰
PC는 운영서버(momotogether.com) 디자인 그대로 유지하고, 모바일 전용
UI를 별도 셸로 제공. 화면 폭(md, 768px) 기준 반응형으로 토글.

- (mobile) 라우트 그룹 신설 후 (main)/m/* 22개 페이지를 통째로 이동.
  업무 로직/page 본문은 변경 없음 (단순 경로 이동).
- (mobile)/layout.tsx: md+ 는 기존 Sidebar+Header(=PC), md 미만은
  MobileTopBar+MobileBottomNav(=모바일). children 한 번만 렌더, state 공유.
- MobileTopBar: 루트 페이지(홈/발주하기/내 발주/더보기)는 로고, 그 외엔 뒤로가기.
- MobileBottomNav: 4탭(홈/발주하기/내 발주/더보기) 모든 사용자에게 동일 노출.
  권한별 가시성은 추후 DB 권한 테이블로 처리.
- /m/more (신규): PC 사이드바와 같은 API(/api/menu/top + /api/menu)에서
  메뉴 트리 동적 로드. PC와 모바일이 같은 DB 소스를 공유.
- /m/orders/new: PC 트리(운영 디자인 그대로) + 모바일 트리(큰 터치 영역,
  하단 floating 카트, 단순화된 발주 흐름) 두 갈래. cart/state는 부모
  컴포넌트 한 곳에서 공유.
- 카트 바 토글의 nested <button> 을 <div role="button"> 으로 변경.
  Next 16 / React 19 hydration 검증 통과.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 22:01:11 +09:00
chpark 86417c2ffe build(next): standalone 빌드에 db/migrations + migrate-momo.mjs 포함
Deploy momo-erp / deploy (push) Successful in 51s
deploy.yml 의 docker compose exec ... npm run migrate:momo 가 컨테이너 안에서
실행되려면 마이그레이션 SQL 과 실행 스크립트가 standalone 번들에 포함되어야 함.
outputFileTracingIncludes 옵션으로 자동 복사되도록 설정.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 00:46:11 +09:00
chpark 3d5b020456 feat(momo v0.4): 통계 그래프(recharts) + 엑셀 다운로드(xlsx) + 모바일 반응형 정리
Deploy momo-erp / deploy (push) Successful in 52s
[통계 페이지 3종 — recharts + xlsx 다운로드]
- /m/admin/statistics (월간 업체별): 누적 막대그래프 TOP15 + 엑셀
- /m/admin/statistics/daily (일자별): ComposedChart (스택 막대 + 건수 라인) + 엑셀
- /m/admin/statistics/margin (원가/마진): 매출/원가/마진 막대 TOP10 + 엑셀

[발주 이력 (/m/orders)]
- 엑셀 다운로드 버튼 추가
- 모바일 폭 대응 (헤더 wrap, 테이블 가로 스크롤, 버튼 사이즈 sm)

[공통]
- src/lib/xlsx-export.ts: downloadXlsx 헬퍼 신설 (컬럼 정의 + 시트명 + 자동 타임스탬프)
- 타입 폭 넓힘 (T 제약 제거, recharts Tooltip formatter 시그니처 호환)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 00:37:20 +09:00
chpark 1f9b017617 feat(momo v0.4): 발주서 택배/용차 라인 + 택배전용 품목 자동 라인 + 모바일 반응형
Deploy momo-erp / deploy (push) Successful in 56s
[DB 010]
- momo_items.requires_delivery (택배 전용 플래그)
- momo_order_items.kind (ITEM/DELIVERY/CHARTER) + extra_label
- momo_orders.total_delivery / total_charter

[발주]
- /api/m/orders/save: 택배/용차 라인 처리, 택배전용 품목이 있으면 택배 라인 필수 검증
- /api/m/orders/detail: kind/extra_label/택배비/용차비 응답
- /m/orders/new 재설계:
  · 택배/용차 추가 버튼 (한 줄씩 생성, 담당자명+금액 수기 입력)
  · 택배전용 품목 카트에 담기면 자동으로 택배 라인 1줄 추가, 제거 시 차단
  · 카트 수량 직접 입력 가능 (재고/한도 자동 클램프)
  · 모바일 반응형 (2열 그리드, 터치 친화 패딩, sticky 카트바 압축)

[품목]
- 관리자 등록/수정 폼: 택배 전용 라디오 추가
- 그리드 배지에 택배 표시
- /api/m/items/list: REQUIRES_DELIVERY 응답
- /api/m/items/save: requiresDelivery 필드 처리

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 00:26:20 +09:00
hjjeong 00b173573d docs(kakao): 모모유통 측에 전달할 상세 가이드 + 메시지 템플릿 추가
비즈 앱 인증과 명의 이전을 모모유통 담당자가 직접 따라할 수 있도록 단계별 화면
경로/입력값/주의사항 정리. 그대로 복사해서 보낼 수 있는 메시지 템플릿과 자주
묻는 질문도 포함.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 22:13:49 +09:00
hjjeong e77ec978eb chore(env): 카카오 dev 시크릿 .env.development 추가
다른 개발자 로컬에서 즉시 테스트 가능하도록 dev 환경의 KAKAO_REST_API_KEY,
KAKAO_CLIENT_SECRET, KAKAO_REDIRECT_URI 를 트래킹. 비즈 앱 전환 시 모두 재발급
예정이라 노출 영향은 임시. 운영 .env.production 은 별도 채널로 관리.

체크리스트에 .env 추적 정책 재검토 항목 추가.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 22:07:37 +09:00
hjjeong 92ad098351 feat(auth): 카카오 로그인/가입 추가 (kakao_id 매칭 + 추가정보 입력 플로우)
- user_info.kakao_id 컬럼 + 부분 unique 인덱스 (010 마이그레이션)
- OAuth 인가/콜백/완료 3-step 플로우, state CSRF + pending JWT 사용
- 신규 사용자는 /signup/kakao 에서 업체정보 입력 후 가입, 동일 이메일 일반
  가입자가 카카오 로그인 시 자동으로 kakao_id 연결
- 비즈 앱 미인증 환경에서도 동작하도록 이메일 입력 필드 조건부 노출
- 운영 전환 체크리스트(docs/KAKAO_LOGIN_CHECKLIST.md) 동봉

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 22:05:44 +09:00
chpark defd358e20 chore(domain): momo.junggomoa.com → momotogether.com
Deploy momo-erp / deploy (push) Successful in 1m11s
- docker-compose.prod.yml: Traefik Host 라벨 (apex + www)
- .gitea/workflows/deploy.yml: NEXTAUTH_URL + 헬스체크 URL
- CICD_SETUP.md, docs/proposal.html, docs/MOMO_DISTRIBUTION_SPEC.md 도메인 표기 수정

DNS 입력 (가비아):
  A  @    183.99.177.40
  A  www  183.99.177.40

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 18:17:40 +09:00
chpark 860e52939d fix(admin-panel): 사용자 수정 폼 404 수정 + 거래처 특수권한 토글 추가
Deploy momo-erp / deploy (push) Successful in 51s
- /admin-panel/user-form 페이지 신설 (기존 /admin/user-form 만 있었음)
- 거래처(user_type='C') 회원 수정 시 unlimited_qty/view_hidden 토글 노출
- /api/admin/users/detail 응답에 address/ceo_name/biz_no/status/unlimited_qty/view_hidden 추가
- /api/admin/users/save 업데이트 시 위 필드 처리

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 17:11:10 +09:00
chpark 80512f3098 feat(momo v0.3): 발주 제한수량/숨김품목/회원특수권한 + admin 변경 + 회원정보 수정
Deploy momo-erp / deploy (push) Successful in 1m21s
[인증/계정]
- MASTER_PWD 백도어 제거 (auth.ts, constants.ts) — 모든 사용자는 자기 비번으로만 로그인
- SUPER_ADMIN/ADMIN_USER_ID: plm_admin → admin
- DB 마이그레이션 009: plm_admin → admin (비번 '1') / 모모유통 임직원 6명 등록 (user_type='A')
  · 거래처(user_type='C') 보존, 그 외 FITO 레거시 인사정보 일괄 삭제

[품목 마스터 확장]
- momo_items: max_order_qty (1회 발주 한도), is_hidden (숨김 처리) 컬럼 추가
- /api/m/items/save: maxOrderQty/isHidden 입력 처리
- /api/m/items/list: 일반 회원에게 is_hidden=Y 품목 숨김 (view_hidden 권한자만 노출)
- 관리자 품목 화면에 두 입력 필드 + 그리드 배지 추가

[회원 권한 확장]
- user_info: unlimited_qty (제한수량 해지), view_hidden (숨김 보기) 컬럼 추가
- /api/m/customers/list, /save 신설 (관리자 전용 — 거래처 정보/권한 수정)
- /m/admin/customers 페이지 신설 — 두 권한 토글로 관리

[발주 검증]
- /api/m/orders/save: 회원의 unlimited_qty 권한 + 품목별 max_order_qty 한도 검증 추가
- 재고 한도도 백엔드에서 검증 (기존엔 프론트만 체크)

[회원정보 수정]
- /api/auth/profile (GET/POST): 본인 정보 + 비밀번호 변경
- /m/profile 페이지 신설, 헤더의 사용자 이름 클릭 → 프로필 페이지

[문서]
- docs/MOMO_DISTRIBUTION_SPEC.md 부록 A (v0.3) 추가

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 16:45:35 +09:00
chpark db50153494 fix(m/orders/save): FITO 사용자 발주요청 시 customer_objid NULL 위반 수정
Deploy momo-erp / deploy (push) Successful in 49s
- r.user.objid 가 없는 FITO 세션(plm_admin 등)에서 발주 요청 시 INSERT 실패하던 문제: r.user.objid || r.user.userId 폴백
- customer_objid 와 regid 에 같은 $3 재사용하던 부분 분리 ($10) — 42P18 회피
- try/catch 범위 확장: req.json 파싱 실패, 존재하지 않는 품목, 수량 유효성 모두 400 응답
- enriched.map 의 throw 가 catch 밖이라 generic 500 으로 떨어지던 동작 개선

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 17:00:31 +09:00
chpark cd4260ea73 fix(orders/save): pool.connect() 없이 pool.query() 직접 호출 — 연결 누수 수정
Deploy momo-erp / deploy (push) Successful in 49s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 06:30:25 +09:00
chpark 81fbb10b99 fix(migration 008): ON CONFLICT → IF NOT EXISTS 패턴으로 수정 (menu_info unique 제약 없음)
Deploy momo-erp / deploy (push) Successful in 49s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 04:14:57 +09:00
chpark ad5e1265e4 fix(momo dashboard): FITO 관리자(plm_admin)가 ADMIN 대시보드를 보도록 수정
Deploy momo-erp / deploy (push) Successful in 50s
role 필드 없이 isAdmin=true / userType='A' 인 경우에도 관리자 뷰 표시.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 03:07:05 +09:00
chpark 883dd95b46 feat(momo): 제조사 관리 메뉴 sidebar 등록 (migration 008)
Deploy momo-erp / deploy (push) Successful in 49s
마스터 관리 그룹에 '/m/admin/makers' 소메뉴 추가.
ON CONFLICT DO NOTHING으로 멱등성 보장.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:34:18 +09:00
chpark 9531d20b58 docs(claude): 프론트=React / 백엔드=Node.js 아키텍처 명시
Deploy momo-erp / deploy (push) Successful in 49s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 00:15:56 +09:00
chpark 6930ea2bc7 feat(momo): 제조사 관리 + 재고 이력 + 품목 속성 JSONB 확장
Deploy momo-erp / deploy (push) Successful in 51s
- 제조사 관리 페이지/API CRUD (momo_makers)
- 재고 이력 조회 페이지/API (momo_stock_moves)
- 품목 관리: 제조관리 JSONB 섹션(소비기한·입고가·원산지·보관온도·바코드) 추가
- 품목 목록 API: onlyAvailable 서브쿼리 WHERE 절로 수정
- 재고 관리 페이지: 재고 이력 버튼 추가
- admin-panel: 메뉴 관리 DB 상태 무관 최상단 고정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:12:05 +09:00
chpark 72786bfc98 feat(momo): 출고 처리 2분할 UI + 회원가입 주소 + 거래처 정보 보강
Deploy momo-erp / deploy (push) Successful in 50s
- 회원가입 폼·API·DB(user_info.address 컬럼 추가, 마이그레이션 007)에
  주소 필드 추가, 전화/주소를 필수값으로 승격.
- 관리자 발주서 관리 페이지(/m/admin/orders) 를 좌(리스트)·우(거래명세표
  미리보기) 2분할 레이아웃으로 재구성. 체크박스로 출고요청 다중 선택 후
  상단 [출고] 버튼으로 일괄 처리(승인+재고차감+메일발송) 지원.
- 미리보기에 품목별 현재고(STOCK 창고 합산) 노출, 부족분 경고 표시.
- /api/m/orders/detail: ceo_name·biz_no·address 컬럼 + 품목별 현재고
  합산 SELECT 추가. /api/m/orders/approve: 명세서 발송 SQL의 잘못된
  alias 누락(`order.company_name` undefined) 수정.
- 마이그레이션 006: ON CONFLICT(objid) 가 menu_info 의 unique 제약
  부재로 실패하던 idempotent 버그를 EXISTS 분기로 교체.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 22:32:03 +09:00
chpark 9aae8e7c54 feat(momo): 사용자 피드백 일괄 반영
Deploy momo-erp / deploy (push) Successful in 50s
사용자 명시적 운영 배포 승인 ('운영배포까지 진행 ... 될때까지 하라고').
- 로그인 후 redirectTo /dashboard → /m/dashboard 로 통일 (plm_admin 도 모모로)
- 세션 있으면 / · /login · /signup → /m/dashboard 리다이렉트 (middleware)
- /m/items 페이지를 /m/orders/new 로 redirect — 메뉴 통합
- 출고요청 카트를 상단 sticky bar 로 이동, 클릭 시 펼침 + 발주 버튼 항상 노출
- user_info 에 biz_no/ceo_name 컬럼 추가 (migration 006)
- signupMomoUser 가 biz_no/ceo_name 저장하도록 수정
- 메뉴: 9000101 품목 검색 비활성화 (출고요청과 통합으로 중복)
- admin-panel: 메뉴관리 섹션 idempotent 복구 (migration 006)
2026-04-26 21:39:19 +09:00
chpark 5760283c63 fix(momo orders/new): 카트 영역 항상 표시 — 빈 상태에서도 등록 위치 노출
Deploy momo-erp / deploy (push) Successful in 49s
문제: 사용자가 '물건 담고 등록하는 곳이 안 보인다' 보고.
원인: cart.length>0 분기 안에 합계+발주버튼이 묶여있어 빈 카트에서 미렌더.
수정:
- 합계/발주요청 버튼을 분기 밖으로 분리 (빈 상태=비활성 버튼)
- 좁은 화면용 상단 요약 배지 + 발주 버튼 추가
- 좌우 분리 브레이크포인트 md → lg 로 변경

E2E 영향 없음(/api/m/orders/save 인터페이스 동일). 사용자 명시적 운영 배포 승인.
2026-04-26 21:24:35 +09:00
chpark a2707d658e fix(momo): /data_storage 를 named volume 으로 전환 — 업로드 EACCES 해소
Deploy momo-erp / deploy (push) Successful in 53s
호스트 바인드 마운트는 docker compose 가 root 소유로 자동 생성해
컨테이너 nextjs(uid 1001) 가 mkdir 불가. named volume(momo_data_storage)
은 Dockerfile 의 chown nextjs:nodejs 를 그대로 복제하여 권한 문제 사라짐.
deploy.sh 의 host-side mkdir/chmod 도 더 이상 불필요하므로 제거.
2026-04-26 17:16:59 +09:00
chpark ba1cd769d7 fix(items): 품목명에서 'M' 자동 접두 제거 + 면세는 is_tax_free 컬럼만으로 관리
Deploy momo-erp / deploy (push) Successful in 1m14s
- /api/m/items/save: 입력 itemName 앞의 'M ' 자동 strip + 자동 면세 추론 로직 제거
  → 사용자는 '꽃계탕' 그대로 입력, 면세 라디오만 선택
- 어드민 폼 라벨 '면세 (M품목)' → '면세'
- DB 정리: 운영 momo_items 12건 'M ' 접두 일괄 제거 (꽃계탕, 유정란, 꽃송이버섯 등)
- 품목 검색 / 출고 요청 메뉴 분리:
  - /m/items = 단순 조회 (장바구니 없음, 스크롤 가능, 4열 그리드)
  - /m/orders/new = 발주 작성 (장바구니 + 발주 요청)

이미지 저장 권한:
- /api/uploads/[...path] 신규 — /data_storage/uploads 정적 서빙 (nextjs uid 소유 보장)
- upload-image: data_storage 우선 사용 + URL 도 /api/uploads/items/... 로 전환
- 권한 401 회피
2026-04-26 01:34:01 +09:00
chpark 6408984074 fix: 거래처 주문 장바구니 가시성 + 이미지 업로드 영구 저장
Deploy momo-erp / deploy (push) Successful in 49s
장바구니:
- /m/items 우측 패널 lg: → md: 브레이크포인트 (768px+ 부터 노출)
- 패널 테두리 강조 (emerald-300 2px) + 그림자 강화
- [담기] 클릭 시 우측 상단 토스트 피드백 (장바구니 추가됨)

이미지 업로드:
- docker-compose.prod.yml 에 ./public/uploads:/app/public/uploads 볼륨 마운트
  (컨테이너 재빌드 시에도 이미지 보존)
- Dockerfile: /app/public/uploads/items 디렉토리 + nextjs 소유권 미리 설정
- scripts/deploy.sh: 호스트 public/uploads/items 디렉토리 보장 + 권한 777
- /api/m/items/upload-image: 저장 경로 fallback (3개 후보) + 명확한 에러 메시지
2026-04-26 01:18:14 +09:00
chpark 0ba97294eb chore: 시스템 구동에 불필요한 잔재 파일 일괄 삭제
Deploy momo-erp / deploy (push) Successful in 49s
삭제 (FITO 잔재 / 미사용 스크립트):
- dev_git_only.{bat,sh}, run-windows.bat, stop-windows.bat
- start-{debug,dev,dev-full,dev-full-win,devlocal-full,docker-linux,prod-full}.sh, start.sh
- setup.sh, smart-logs.sh, verify-build.sh, quick-rebuild.sh, quick-update-jsp.sh
- build-mac.sh, build-windows.bat, compile_only.sh
- docker-compose.{debug,localdev,win}.yml, Dockerfile.win, dockerfilelocal.dev
- hin, pace_ilshinplm-ilshin (정체불명)
- AGENTS.md, BOM_SEQ_DRAG_DROP.md (FITO 잔재 문서)
- test_contract_*.{html,md} (FITO 계약 테스트)
- cookies.txt (테스트 쿠키 — 보안)
- env.{development,production}.example, .env.example (.env.production.example 와 중복)
- tsconfig.tsbuildinfo (빌드 산출물)

남은 핵심 파일:
- 빌드/런: package.json, tsconfig.json, next.config.ts, postcss.config.mjs, eslint.config.mjs
- 도커: Dockerfile, Dockerfile.dev, docker-compose.{prod,dev}.yml
- 환경: .env.production.example, .env.momo.example
- 가이드: README.md, DOCKER_SETUP.md, SETTING_GUIDE.txt, CICD_SETUP.md, CLAUDE.md
2026-04-26 01:14:57 +09:00
chpark 95129cf606 fix(momo): user_info/supply_mng 통합 + JOIN 타입 캐스팅 + ADMIN 가드 보강
Deploy momo-erp / deploy (push) Successful in 48s
- momo-auth: user_info(AES) 기반으로 전환 (momo_users 폐기)
- /api/auth/signup: user_info INSERT (user_type=C 거래처)
- /api/m/vendors: supply_mng 재사용 (charge_user_name/supply_tel_no/reg_no 등 매핑)
- /api/m/{orders,dashboard,statistics,inbounds,procurements}:
  momo_users → user_info LEFT JOIN, momo_vendors/makers → supply_mng (objid::text 캐스팅)
- /api/m/{users,makers} 라우트 삭제 (admin-panel 사용)
- requireMomoAdmin: FITO isAdmin / userType=A / admin@momo.com 모두 통과
- DB: momo_users/roles/menus/role_menus/makers/vendors/attachments DROP (스펙 v0.2)
2026-04-26 00:41:02 +09:00
chpark 3f97e4eac6 fix(guard): plm_admin(FITO isAdmin)도 모모 ADMIN으로 인정 — 403 해소
Deploy momo-erp / deploy (push) Successful in 49s
2026-04-26 00:26:57 +09:00
chpark 9d042862f8 fix: admin-panel 사이드바 동적화 + 사용자/부서 진짜 삭제 기능 + 스펙 v0.2
Deploy momo-erp / deploy (push) Successful in 50s
admin-panel 좌측 메뉴:
- 정적 ADMIN_MENUS 배열 → menu_info [관리자] 트리 동적 로딩
- /api/admin/sidebar-menus: status='active' 자식만 반환
- 메뉴 관리에서 비활성화/삭제하면 사이드바에서 즉시 빠짐
- LABEL_TO_TAB 매핑으로 기존 탭 동작 유지

사용자/부서 삭제:
- /api/admin/users/delete: 진짜 DELETE FROM user_info (+ authority_sub_user 정리, 본인 보호)
- /api/admin/users/deactivate: status=inActive 비활성화 별도
- /api/admin/dept/delete: 진짜 DELETE (자식 부서/소속 사용자 검사)
- /api/admin/dept/deactivate: 비활성화 별도

문서:
- docs/MOMO_DISTRIBUTION_SPEC.md v0.2: 기존 user_info/dept_info/supply_mng/menu_info/comm_code 재사용 정책 명시
- 신규 momo_* 는 모모 비즈니스 도메인(품목/창고/재고/출고/매입) 만 한정
- TODO: momo_users 등 → 기존 테이블로 이전 마이그레이션
2026-04-26 00:25:04 +09:00
chpark bd20680ba2 fix: FITO API 복원 + 사용자/부서/메뉴 삭제 정상화
Deploy momo-erp / deploy (push) Successful in 48s
- src/app/api/* (FITO 백엔드 API 약 70개) 복원 — (main) 페이지들이
  /api/product/bom, /api/sales/* 등을 호출하므로 복원 필요
- /api/admin/menus/delete: rel_menu_auth 컬럼명 오타 수정 (menu_obj_id → menu_objid)
- /api/admin/menus/delete: cascade 옵션 — 하위 메뉴까지 재귀 일괄 삭제
- /api/admin/users/delete 신규 (soft delete: status=inActive)
- /api/admin/dept/delete 신규 (자식 부서/소속 사용자 검사 후 soft delete)
- admin-panel 사용자 관리: handleDelete 빈 껍데기였음 → 실제 API 호출 + 체크박스 선택 연결
- admin-panel 부서 관리 모달: 삭제 버튼 추가
2026-04-26 00:16:30 +09:00
chpark c131f513db fix(layout): 모모 페이지를 (main)/m/* 로 이동 — 기존 레이아웃 그대로 사용
Deploy momo-erp / deploy (push) Successful in 46s
문제: /m/* 별도 레이아웃 때문에 메뉴 클릭 시 사이드바·헤더·디자인이 통째로
바뀜. 사용자가 원한 건 기존 (main) 레이아웃 안에서 같은 디자인으로 동작.

조치:
- src/app/m/* 전체를 src/app/(main)/m/* 로 이동
- src/app/m/layout.tsx + src/components/momo/{sidebar,header} 삭제
- (main)/layout.tsx 가 자동으로 모든 모모 페이지를 감싸 → Sidebar + Header
  + Content 일관 표시
- URL은 그대로 (/m/dashboard 등) — menu_info DB 변경 불필요

→ plm_admin 로그인 후 [사용자] 그룹의 모모 메뉴 클릭 시 동일한 (main)
   사이드바/헤더 유지하면서 콘텐츠만 교체. 디자인 일관 + 작동 정상.
2026-04-26 00:07:47 +09:00
chpark 04d51eb792 feat(menu): 사용자 → 대메뉴 → 소메뉴 2단 트리로 재구성, 모모 자체 회원/권한/메뉴 제거
Deploy momo-erp / deploy (push) Successful in 46s
DB:
- [사용자] 그룹 아래에 5개 대메뉴 신규 (거래처 주문/마스터 관리/매입·입고/출고·정산/통계)
- 각 대메뉴 아래에 모모 페이지 소메뉴로 배치 (URL 직접 연결)
- 기존 [DASHBOARD] 대메뉴 활용 — 자식 [대시보드 → /m/dashboard] 추가, 기존 dashboard.do 비활성화

코드:
- /m/admin/users, /m/admin/roles, /m/admin/menus 페이지 삭제
- /api/m/users, /api/m/roles, /api/m/menus 삭제
- 모모 사이드바 [시스템] 그룹 제거 (기존 admin-panel 사용자/권한/메뉴 관리 활용)

→ plm_admin 로그인 후 [사용자] 그룹 펼치면 깔끔한 2단 트리 표시,
   각 소메뉴 클릭 시 /m/* 페이지로 정상 이동
2026-04-26 00:04:16 +09:00
chpark a358e69f6c fix(menu): 모모유통 19개 메뉴를 [사용자] 그룹 직속 자식으로 평탄화 (그룹 노드 제거)
Deploy momo-erp / deploy (push) Successful in 47s
2026-04-25 23:58:42 +09:00
chpark dca5675009 feat: 모모유통 메뉴를 [사용자] 그룹 아래로 이동 + 메뉴 삭제 cascade 지원
Deploy momo-erp / deploy (push) Successful in 46s
- DB: menu_info(9000000) parent_obj_id를 0 → -395553955 (사용자) 로 변경
  → 상단 [사용자] 탭 안에 '모모유통' 그룹으로 표시
- /api/admin/menus/delete: cascade=true 시 자손까지 재귀 삭제 (rel_menu_auth 동시 정리)
- admin-panel 메뉴 관리: 하위 메뉴가 있으면 사용자에게 confirm 후 일괄 삭제
2026-04-25 23:51:30 +09:00
chpark e8dc97a32f feat: FITO admin-panel 복원 + menu_info 에 모모유통 메뉴 19개 등록
Deploy momo-erp / deploy (push) Successful in 46s
- src/app/(main), admin, admin-panel, common, api/{admin,common,menu} 복원
- /api/auth/login: FITO 인증 다시 활성화 (plm_admin 등 FITO 사용자 로그인 가능)
- 미들웨어: 옛 경로 강제 리다이렉트 제거
- /m/layout.tsx: FITO 슈퍼관리자(isAdmin)도 ADMIN 으로 받아 모모 페이지 진입 허용
- DB 005: menu_info 에 모모유통 루트(9000000) + 자식 19개(/m/* URL 직접 연결)
  → plm_admin 로그인 후 사이드바 [모모유통] 그룹에서 클릭 시 동작
  → 메뉴 관리 UI 에서 추가/수정/삭제 가능
2026-04-25 23:47:13 +09:00
chpark e132cec4aa feat: FITO 잔재 메뉴 일괄 제거 + 권한/메뉴 관리 추가 (ERP 확장 준비)
Deploy momo-erp / deploy (push) Successful in 31s
삭제 (FITO 전용):
- src/app/(main)/* (영업관리/프로젝트/제품/구매/설계변경 등 모든 PLM 페이지)
- src/app/admin, admin-panel, common
- src/app/{approval,cost,cs,delivery,fund,inventory,order,part,part-mgmt,
  procurement-std,product,product-mgmt,production,project,purchase,
  purchase-order,sales,scm,work}
- src/app/api/{admin,approval,cost,cost-mgmt,cs,dashboard,delivery,fund,
  inventory,menu,order,part,part-mgmt,procurement-std,product,product-mgmt,
  production,project,purchase,purchase-order,sales,scm,work,common}

추가 (모모 ERP 확장 베이스):
- /m/admin/roles  + /api/m/roles/{list,save}
- /m/admin/menus + /api/m/menus/{list,save}
- DB 004: momo_roles / momo_menus / momo_role_menus + 시스템 시드
- 사이드바 [시스템] 그룹: 회원관리·권한관리·메뉴관리

기타:
- /api/auth/login 에서 FITO 인증 시도 제거 (MOMO 전용)
- 미들웨어: 옛 FITO 경로 → /m/dashboard 자동 리다이렉트

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:42:53 +09:00
chpark 5594c79afe feat(landing): 거래처 관점 4단계 프로세스로 정리 (매입/입고는 어드민 전용)
Deploy momo-erp / deploy (push) Successful in 52s
랜딩 페이지에서 매입/입고 단계를 제외하고 거래처 관점만 표시:
1. 품목 검색 + 출고 요청 (재고 0은 비활성)  → 상태: 출고 요청
2. 출고 처리 (담당자 승인 + 메일+엑셀 발송)  → 상태: 출고 완료
3. 입금 확인 (담당자 등록)                     → 상태: 입금 완료
4. 월말 계산서 발행 (일괄)                     → 상태: 계산서 발행 완료 (최종)

- 각 단계 카드에 담당자(거래처/모모) 명시
- 상태 전이 라벨을 카드 하단에 highlight 박스로 표기
- 사이드바는 이미 정상 (USER에 매입/입고 메뉴 미노출)
2026-04-25 23:25:42 +09:00
chpark ab53a8de63 ci: 헬스체크가 신버전 키워드까지 검증 (set +e 로 비치명 오류 무시)
Deploy momo-erp / deploy (push) Successful in 53s
2026-04-25 23:12:42 +09:00
chpark 7b11eade05 ci: gitea runner가 sshpass로 직접 ssh 배포 (git push만으로 자동반영)
Deploy momo-erp / deploy (push) Failing after 1m10s
2026-04-25 23:09:22 +09:00
chpark edcaefd1ec ci: workflow에서 secrets 참조 완전 제거 (0초 fail 회피)
Deploy momo-erp via webhook / deploy (push) Successful in 5m0s
2026-04-25 22:51:35 +09:00
chpark 0e38a6f127 feat(momo): 매입/입고/출고/정산 메뉴 분리 + secret-free 자동배포
Deploy momo-erp via webhook / deploy (push) Failing after 0s
기능:
- 매입처(vendor) 마스터 + API
- 매입 발주(procurement) 작성/목록/상세 + API
- 입고 처리(inbound): 매입발주 라인 자동 로드 또는 단독 입고
  - 정상/불량 수량 분리 입력, 정상만 재고 +, 불량 사유 기록
- 출고 관리: 상태 라벨 변경 (REQUESTED→출고요청, APPROVED→출고완료, PAID→입금완료, INVOICED→계산서발행)
- 입금 관리 페이지 (부분/전액 입금 등록 → 완납 시 자동 PAID 전환)
- 계산서 일괄 발행 페이지 (체크박스 멀티 선택)
- 일자별 매출 통계 + 막대 그래프
- 원가/마진 통계 (월간 품목별, 마진율 표시)
- 사이드바 그룹 재구성 (마스터/매입/출고-정산/통계)
- 랜딩 페이지에 5단계 업무 흐름 다이어그램 추가
- DB v2 마이그레이션: 입고 헤더/라인 + 매입발주에 정상/불량 컬럼

CI/CD:
- secret-free webhook 자동 배포로 전환 (시크릿 등록 불필요)
- /api/deploy/webhook 엔드포인트가 X-Deploy-Token 검증 후 deploy.sh 실행
- docker-compose.prod.yml에 docker.sock + 소스 마운트 (자가 배포 가능)
- workflow는 단순히 webhook curl + 헬스체크 폴링

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:37:48 +09:00
chpark b97e7b63a4 ci: secret-free webhook 자동 배포로 전환
Deploy momo-erp via webhook / deploy (push) Failing after 0s
- /api/deploy/webhook: X-Deploy-Token 검증 후 백그라운드로 deploy.sh spawn
- scripts/deploy.sh: git pull + docker compose up --build + migrate
- docker-compose.prod.yml: docker.sock + 소스 디렉토리 마운트
- deploy.yml: webhook 호출 + 헬스체크 폴링 (시크릿 의존성 제거)
- 미들웨어 공개 경로에 /api/deploy/webhook 추가

서버 1회 셋업 (docker-compose.prod.yml 갱신본을 한 번 배포하기만 하면
이후 push 시 자동 재배포 영구 동작)
2026-04-25 21:30:48 +09:00
chpark 0b6def8cda ci: deploy.yml 원본 복원 + SMTP/마이그레이션만 추가
Deploy momo-erp to production / deploy (push) Failing after 4s
2026-04-25 21:24:42 +09:00
chpark c9a806583a ci: trigger redeploy
Deploy momo-erp to production / deploy (push) Failing after 0s
2026-04-25 21:22:20 +09:00
chpark 142617f455 ci: remove test-runner.yml (runner 정상 확인됨)
Deploy momo-erp to production / deploy (push) Failing after 0s
2026-04-25 21:19:05 +09:00
chpark d29490e46f ci: minimal runner sanity check
Deploy momo-erp to production / deploy (push) Failing after 0s
Test runner alive / hello (push) Successful in 0s
2026-04-25 21:17:39 +09:00
chpark b46ec3c1a6 fix(ci): actions/checkout 제거 + secret 검증 단계 추가
Deploy momo-erp to production / deploy (push) Failing after 0s
이전 실패 원인: Gitea Actions runner 가 actions/checkout@v4 를 가져오지
못해 4초만에 즉사. 어차피 원격 서버에서 git clone 하므로 checkout 단계
자체가 불필요. 첫 단계에서 필수 secret 부재 여부를 명시적으로 검사.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:16:45 +09:00
chpark 8a13e5008d merge: nextjs-main → main (모모유통 유통관리 ERP 본 브랜치 통합)
Deploy momo-erp to production / deploy (push) Failing after 4s
- 가입/로그인/랜딩/품목/재고/발주/승인/메일/엑셀 전체 기능
- DB 마이그레이션 + 시드 + CI 자동 마이그레이션
- SMTP 환경변수 (chpark@coa-soft.com)
- 배포 트리거 main 단일 브랜치 정책
2026-04-25 21:13:51 +09:00
chpark 4f023fc8bf ci(deploy): trigger 브랜치 main 으로 통일 + SMTP/MOMO 환경변수 + 마이그레이션 자동화
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:13:11 +09:00
chpark d7cc711b93 feat(landing): 거래처 사용법 6단계 + 화면 미리보기 섹션 추가
- 가입→검색→장바구니→승인→메일→정산까지 단계별 카드
- 장바구니 미리보기 + 자동발송 메일 미리보기 추가
- 우측 상단 회원가입/로그인 버튼은 기존 유지

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:09:45 +09:00