# 회원 상세 기능 구현 계획 > 작성일: 2026-02-27 > 상태: 계획 중 ## 개요 회원 검색 페이지(`/admin/members`)에서 "상세" 버튼 클릭 시, 해당 회원의 구매 이력 및 QR 적립 내역을 조회하는 기능. ## 현재 상태 - ✅ 회원 검색 API (`/api/members/search`) - 완료 - ✅ 회원 기본정보 조회 (`/api/members/`) - 완료 - ❌ 회원 구매 이력 조회 - 미구현 - ❌ QR 적립 내역 연동 - 미구현 ## 데이터 소스 ### 1. 마일리지 DB (SQLite) ``` 파일: backend/db/mileage.db 테이블: transactions (적립/사용 내역) 주요 컬럼: - phone: 전화번호 (010XXXXXXXX) - points: 적립/사용 포인트 - type: earn (적립) / use (사용) - amount: 구매금액 - created_at: 거래일시 - receipt_id: 영수증 ID (연동용) ``` ### 2. POS DB (MSSQL - PM_PRES) ``` 테이블: SALE_MAIN (판매 메인) 테이블: SALE_SUB (판매 상세 - 품목별) SALE_MAIN: - SL_NO_order: 거래번호 - SL_NM_custom: 고객명 - SL_CD_custom: 고객코드 - SL_MY_total: 총액 - SL_DT_appl: 거래일자 SALE_SUB: - SL_NO_order: 거래번호 (FK) - DrugCode: 상품코드 - QUAN: 수량 - SL_TOTAL_PRICE: 금액 ``` ### 3. 회원 DB (MSSQL - PM_BASE) ``` 테이블: CD_PERSON 주요 컬럼: - CUSCODE: 고객코드 - PANAME: 이름 - PHONE, TEL_NO, PHONE2: 전화번호 3곳 ``` ## 연동 전략 ### 문제점 - POS(SALE_MAIN)에는 `SL_CD_custom`(고객코드) 사용 - 마일리지 DB에는 `phone`(전화번호) 사용 - **전화번호 → 고객코드** 또는 **고객코드 → 전화번호** 매핑 필요 ### 해결 방안 #### 방안 1: 전화번호 기반 통합 (권장) ``` 1. CD_PERSON에서 전화번호로 CUSCODE 조회 2. CUSCODE로 SALE_MAIN 조회 3. 마일리지 DB에서 전화번호로 적립 내역 조회 4. 두 결과 병합하여 표시 ``` #### 방안 2: 마일리지 테이블에 CUSCODE 추가 ```sql ALTER TABLE users ADD COLUMN cuscode TEXT; ``` - QR 적립 시 POS 고객코드 연동 ## API 설계 ### GET /api/members//history **Response:** ```json { "success": true, "member": { "cuscode": "0000012345", "name": "김영빈", "phone": "01027027390" }, "mileage": { "balance": 19005, "total_earned": 25000, "total_used": 5995, "transactions": [ { "date": "2026-02-27 01:29", "type": "earn", "points": 555, "amount": 18500, "products": ["투엑스벤포파워", "마데카솔"] } ] }, "purchases": [ { "date": "20260227", "order_no": "20260227001234", "total": 18500, "items": [ {"name": "투엑스벤포파워", "qty": 1, "price": 9000}, {"name": "마데카솔연고", "qty": 1, "price": 9500} ] } ] } ``` ## UI 설계 ### 회원 상세 모달 ``` ┌─────────────────────────────────────────────┐ │ 👤 김영빈 │ │ 📱 010-2702-7390 │ │ 💰 잔여 포인트: 19,005P │ ├─────────────────────────────────────────────┤ │ [QR 적립 내역] [POS 구매 이력] │ ├─────────────────────────────────────────────┤ │ 📅 2026-02-27 01:29 │ │ +555P (18,500원 구매) │ │ └ 투엑스벤포파워, 마데카솔연고 │ │ │ │ 📅 2026-02-27 01:25 │ │ +360P (12,000원 구매) │ │ └ 벤포파워Z x2 │ ├─────────────────────────────────────────────┤ │ [ 메시지 발송 ] [ 닫기 ] │ └─────────────────────────────────────────────┘ ``` ## 구현 단계 ### Phase 1: 마일리지 내역 연동 (우선) 1. [ ] `/api/members//mileage` API 추가 2. [ ] SQLite에서 전화번호로 적립/사용 내역 조회 3. [ ] 회원 상세 모달 UI 구현 ### Phase 2: POS 구매 이력 연동 1. [ ] 전화번호 → CUSCODE 매핑 로직 2. [ ] SALE_MAIN/SALE_SUB 조회 API 3. [ ] 품목 상세 표시 ### Phase 3: 통합 뷰 1. [ ] 마일리지 + POS 데이터 병합 2. [ ] 타임라인 형태로 통합 표시 3. [ ] 상품 추천 (자주 구매 품목) ## 예상 쿼리 ### 마일리지 내역 (SQLite) ```sql SELECT t.created_at, t.type, t.points, t.amount, u.name, u.phone, u.balance FROM transactions t JOIN users u ON t.user_id = u.id WHERE u.phone = '01027027390' ORDER BY t.created_at DESC LIMIT 50; ``` ### POS 구매 이력 (MSSQL) ```sql -- 1. 전화번호로 고객코드 조회 SELECT CUSCODE FROM PM_BASE.dbo.CD_PERSON WHERE PHONE = '01027027390' OR TEL_NO = '01027027390'; -- 2. 고객코드로 구매 이력 조회 SELECT M.SL_NO_order, M.SL_DT_appl, M.SL_MY_total, S.DrugCode, G.GoodsName, S.QUAN, S.SL_TOTAL_PRICE FROM PM_PRES.dbo.SALE_MAIN M JOIN PM_PRES.dbo.SALE_SUB S ON M.SL_NO_order = S.SL_NO_order LEFT JOIN PM_DRUG.dbo.CD_GOODS G ON S.DrugCode = G.DrugCode WHERE M.SL_CD_custom = '0000012345' ORDER BY M.SL_DT_appl DESC; ``` ## 참고 - 마일리지 테이블 구조: `backend/db/dbsetup.py` - POS 테이블 가이드: `docs/alimipharm-set-product-structure.md` - 회원 검색 API: `backend/app.py` → `/api/members/search` --- ## 히스토리 | 날짜 | 내용 | |------|------| | 2026-02-27 | 계획 문서 작성 |