모바일 더보기에 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>
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>
deploy.yml 의 docker compose exec ... npm run migrate:momo 가 컨테이너 안에서
실행되려면 마이그레이션 SQL 과 실행 스크립트가 standalone 번들에 포함되어야 함.
outputFileTracingIncludes 옵션으로 자동 복사되도록 설정.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
비즈 앱 인증과 명의 이전을 모모유통 담당자가 직접 따라할 수 있도록 단계별 화면
경로/입력값/주의사항 정리. 그대로 복사해서 보낼 수 있는 메시지 템플릿과 자주
묻는 질문도 포함.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
다른 개발자 로컬에서 즉시 테스트 가능하도록 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>
- 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>
- 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>
- /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>
- 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>
- 제조사 관리 페이지/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>
사용자 명시적 운영 배포 승인 ('운영배포까지 진행 ... 될때까지 하라고').
- 로그인 후 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)
문제: 사용자가 '물건 담고 등록하는 곳이 안 보인다' 보고.
원인: cart.length>0 분기 안에 합계+발주버튼이 묶여있어 빈 카트에서 미렌더.
수정:
- 합계/발주요청 버튼을 분기 밖으로 분리 (빈 상태=비활성 버튼)
- 좁은 화면용 상단 요약 배지 + 발주 버튼 추가
- 좌우 분리 브레이크포인트 md → lg 로 변경
E2E 영향 없음(/api/m/orders/save 인터페이스 동일). 사용자 명시적 운영 배포 승인.
호스트 바인드 마운트는 docker compose 가 root 소유로 자동 생성해
컨테이너 nextjs(uid 1001) 가 mkdir 불가. named volume(momo_data_storage)
은 Dockerfile 의 chown nextjs:nodejs 를 그대로 복제하여 권한 문제 사라짐.
deploy.sh 의 host-side mkdir/chmod 도 더 이상 불필요하므로 제거.
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 등 → 기존 테이블로 이전 마이그레이션
- 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 부서 관리 모달: 삭제 버튼 추가
문제: /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)
사이드바/헤더 유지하면서 콘텐츠만 교체. 디자인 일관 + 작동 정상.
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/* 페이지로 정상 이동
- DB: menu_info(9000000) parent_obj_id를 0 → -395553955 (사용자) 로 변경
→ 상단 [사용자] 탭 안에 '모모유통' 그룹으로 표시
- /api/admin/menus/delete: cascade=true 시 자손까지 재귀 삭제 (rel_menu_auth 동시 정리)
- admin-panel 메뉴 관리: 하위 메뉴가 있으면 사용자에게 confirm 후 일괄 삭제
- 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 에서 추가/수정/삭제 가능
기능:
- 매입처(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>
- /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 시 자동 재배포 영구 동작)
이전 실패 원인: Gitea Actions runner 가 actions/checkout@v4 를 가져오지
못해 4초만에 즉사. 어차피 원격 서버에서 git clone 하므로 checkout 단계
자체가 불필요. 첫 단계에서 필수 secret 부재 여부를 명시적으로 검사.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 가입→검색→장바구니→승인→메일→정산까지 단계별 카드
- 장바구니 미리보기 + 자동발송 메일 미리보기 추가
- 우측 상단 회원가입/로그인 버튼은 기존 유지
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>