# naverStore — 네이버 스마트스토어 주문 관리 시스템

## Claude Code 작업 지침

- **모든 답변은 한국어**로 작성
- **새 파일 생성 시** 맨 첫 줄에 파일 역할 설명 주석 작성
- **수정 전 반드시 해당 파일을 먼저 읽고** 구조 파악 후 수정
- 현재 라이브 운영 중 → **수정 시 극히 신중**

---

## 프로젝트 개요

네이버 스마트스토어 **현수막 맞춤 제작 주문 관리 시스템**.
라이브 서버: `https://primead.kr/naverStore/`
서버 경로: `/var/www/html/naverStore/`
스택: PHP 8.3, Vanilla JavaScript ES6 모듈, MySQL 8.0, Apache 2.4

### 서버 제약사항 (절대 변경 금지)
- **HTTPS 전용**: HTTP → 400 에러
- **POST 차단**: 모든 API는 GET 방식만

---

## 비즈니스 모델

네이버 스마트스토어에서 1,000원 상품 × 수량으로 금액을 표현하는 구조.

**고객 흐름**: 견적 계산기 → 금액 확인 → 4자리 주문번호 복사 → 네이버 스토어에서 해당 수량 구매 → 메모란에 주문번호 입력

**관리자 흐름**: 네이버 결제 확인 → 4자리 번호로 주문 검색 → 완료처리 → 진행상태 업데이트

### 의도적 설계
| 코드 | 실제 의도 |
|------|-----------|
| `floor(finalPrice / 1000)` | 네이버 1,000원 상품의 구매 수량 = 금액÷1000 |
| `completed_orders`의 `name`이 null | 완료처리 시 정상 — 관리자가 수동 입력 |
| `communication_channel` | 팀 내부용 — 어떤 직원이 어떤 채널로 연락했는지 |

---

## 시스템 구조

```
naverStore/
├── waterbase_Placard/       ← 고객 견적 계산기
│   ├── api/                     ← init_order, add_to_cart_final 등
│   ├── classes/                 ← Calculator 클래스 5개
│   ├── script/                  ← ES6 모듈 (init, cart, utils 등)
│   └── quote_calculator.php     ← 메인 페이지
│
├── admin/                   ← 관리자 시스템 (통합 탭 레이아웃)
│   ├── includes/
│   │   ├── nav_config.php       ← 탭 배열 + renderTabs()
│   │   ├── layout_header.php    ← 공통 헤드 + 탭 바 + 서브메뉴
│   │   └── layout_footer.php    ← 닫기 태그
│   ├── CSS/
│   │   ├── admin_common.css     ← 3행 레이아웃 공통
│   │   ├── table_view.css       ← 주문관리 전용
│   │   ├── completed_orders.css ← 완료주문 전용
│   │   ├── admin_styles.css     ← 단가관리 전용
│   │   ├── estimate_tool.css    ← 견적도구 전용
│   │   ├── admin_manager.css    ← 계정관리 전용
│   │   └── logs.css             ← 감사로그 전용
│   ├── classes/
│   │   ├── AuthManager.php          ← 인증/세션/로그
│   │   ├── OrderManager.php         ← 주문 조회/삭제 (147줄)
│   │   ├── OrderCompletionManager.php ← 주문 완료 처리 (351줄)
│   │   └── DetailCalculator.php     ← 상세 계산 엔진 (공통, 533줄)
│   ├── ajax/
│   │   ├── completed_actions.php    ← 완료주문 AJAX 핸들러 (분리됨)
│   │   ├── get_pricing.php          ← 단가 조회
│   │   ├── update_pricing.php       ← 단가 저장
│   │   └── complete_orders.php      ← 주문 완료 처리
│   ├── script/
│   │   ├── table_functions.js       ← 주문관리 테이블 기능
│   │   └── completed_orders.js      ← 완료주문 JS (분리됨)
│   ├── js/
│   │   ├── admin_script.js          ← 단가관리 (Ctrl+S→S 저장)
│   │   ├── tab_loader.js            ← 탭 AJAX 로드
│   │   ├── admin_manager.js         ← 계정관리 JS (분리됨)
│   │   └── estimate_tool.js         ← 견적도구 JS (분리됨)
│   ├── table_view.php           ← 주문관리
│   ├── completed_orders.php     ← 완료주문
│   ├── admin_panel.php          ← 단가관리
│   ├── estimate_tool.php        ← 견적도구
│   ├── master/
│   │   ├── admin_manager.php    ← 계정관리 (+ 거래처 CRUD)
│   │   └── logs.php             ← 감사로그
│   └── auth/
│       ├── login.php            ← 4자리 코드 로그인
│       └── logout.php
│
├── talkbot/                 ← 네이버 톡톡 견적 챗봇
│   ├── webhook.php              ← Webhook 수신
│   ├── sender.php               ← 톡톡 보내기 API
│   ├── session.php              ← 파일 기반 세션
│   └── banner/                  ← 현수막 견적 대화 플로우
│
├── customer/                ← 고객 주문 확인서
│   └── order-check.html
│
├── shared/                  ← 공통 모듈
│   └── db_connect.php           ← DB 연결 (dbhataisun)
│
└── get_order_data.php       ← 확인서용 API
```

---

## 관리자 탭 구성 (통합 레이아웃)

```
[주문관리] [완료주문] [단가관리] [견적도구] [거래처관리] ‖ [계정관리] [로그]
                                           ↑ client_hub    ↑ master 전용
```

- 모든 페이지가 `layout_header.php` → `layout_footer.php` 구조
- 1행: 탭 바 (nav_config.php), 2행: 서브메뉴/필터, 3행: 콘텐츠
- PC 최적화, 좌측 사이드바 없음

---

## 가격 계산 파이프라인

```
소재비 → 편집비 → 후가공비 → 기본제작비 → 할인 3종 → 최종가격
```

- **할인 3종**: ①기본제작비 할인(소재비≥10000) ②면적 할인(구간별%) ③천원 절삭
- 모든 단가는 `overall_price` 테이블 조회
- 상세 계산 과정은 `DetailCalculator.php`에서 통합 관리

### API 보안 (매크로 공격 방어)
- `order_token` 필수 (init_order에서 발급)
- Rate Limit: 3초 이내 재요청 차단
- 옵션 화이트리스트 검증
- API 응답에서 가격 정보 제거 (`success` + `listId`만 반환)

---

## DB 구조

- **DB**: `dbhataisun` (localhost, hataisun)
- **order_table**: 진행중 주문 (2시간 자동 삭제, ip_address + order_token 포함)
- **order_summary_table**: 주문 요약 (할인 계산 결과)
- **completed_orders**: 완료 주문 (JSON 아카이브, ip_address 포함)
- **overall_price**: 단가 테이블 (category + item_name + price)
- **admin_users**: 관리자 계정 (4자리 코드, is_master)
- **admin_sessions**: 관리자 세션 (6시간 만료)
- **admin_action_logs**: 감사 로그

### 단가 저장 방식
`Ctrl+S` → `S` 키 시퀀스 (tmux 스타일 비밀 저장)

---

## 주요 URL

```
고객 견적:    https://primead.kr/naverStore/waterbase_Placard/quote_calculator.php
관리자:       https://primead.kr/naverStore/admin/auth/login.php
고객 확인서:  https://primead.kr/naverStore/customer/order-check.html?order_id=12345678
```
