후기 관리 플로우

어드민 15번 메뉴 · show(9) · bongi_reviews 테이블 · 봉이모바일 자체 후기 전용
핵심 — 봉이모바일 자체 후기
봉이모바일 자체 후기만 사용한다. 렌트리 리뷰는 사용하지 않는다.
렌트리 플랫폼 자체에 대한 리뷰일 가능성이 높아 상품 품질 리뷰로 보기 어렵기 때문.
봉이모바일 자체 후기 (사용)
계약 완료 고객만 작성 가능
사진 첨부 필수
별점 (1~5) + 내용 (최소 10자)
작성 시 15,000P 적립
AI 채팅에서 관련 후기 자동 노출
렌트리 리뷰 (사용 안 함)
렌트리 플랫폼 자체 리뷰
봉이모바일 상품 품질과 무관
렌트리 플랫폼에 대한 평가일 가능성
사용하지 않음
후기 전체 흐름
고객
계약 완료
->
PASS
본인인증 완료
->
마이페이지
후기 작성
->
POST /api/reviews
이미지 업로드
->
bongi_reviews
INSERT
->
어드민
승인/관리
->
웹 메인 후기 섹션
AI 채팅 자동 노출
|
STEP 1 -- 후기 작성 조건
후기를 작성하려면 3가지 조건을 모두 충족해야 한다
1
계약 완료
봉이모바일을 통해
인터넷+TV / 렌탈 / 중고폰
계약이 완료된 고객
2
PASS 본인인증
모든 보상(포인트 적립)은
PASS 본인인증 완료 필수
미인증 시 포인트 미적립
3
사진 첨부 필수
사진 없이는 제출 불가
base64 이미지 업로드
최대 3MB, Supabase Storage
포인트 적립 조건: 후기 작성 시 15,000P 적립. 단, PASS 본인인증이 완료된 회원에게만 적립. 비회원도 후기 작성은 가능(optionalAuth)하지만, 포인트 적립은 인증 회원에게만 제공.
|
STEP 2 -- 후기 작성 흐름 (고객 앱)
마이페이지 > 후기 (Reviews.jsx)
카테고리 선택
전체/인터넷+TV/렌탈/중고폰
->
상품 선택
계약완료 상품 드롭다운
->
별점 선택
1~5점 (필수)
->
후기 내용 작성
최소 10자 이상
->
사진 첨부
필수, 3MB 이하
->
제출
POST /api/reviews
API 상세
API메서드역할파라미터
POST /api/reviews/upload-image POST 사진 업로드 image (base64)
POST /api/reviews POST 후기 등록 category, product_name, rating, content, author_name, image_url
GET /api/reviews GET 후기 목록 조회 category, page, limit (기본 20)
이미지 업로드 상세
사진 선택
카메라/갤러리
->
base64 인코딩
data:image/xxx;base64,...
->
POST upload-image
3MB 제한 체크
->
Supabase Storage
review-images 버킷
->
publicUrl 반환
image_url로 사용
파일명 규칙: review_{timestamp}_{random6}.{ext} - 예: review_1712345678901_a3k8x2.jpg
인증: optionalAuth - 로그인 사용자는 user_id + displayName 자동 기록, 비로그인은 author_name 수동 입력
서버 유효성 검증 (reviews.js)
검증 항목조건에러 메시지
상품명필수상품명, 별점, 내용은 필수입니다.
별점1~5 사이 정수별점은 1~5 사이여야 합니다.
내용최소 10자후기는 최소 10자 이상 작성해주세요.
이미지base64 형식, 3MB 이하올바른 base64 이미지 형식이 아닙니다. / 이미지 크기는 3MB 이하여야 합니다.
|
STEP 3 -- 어드민 후기 관리 화면
어드민 15번 메뉴 > show(9) > loadReviewsAdmin()
KPI 카드 (4개)
4.7
평균 별점
1,248
전체 후기
1,120
AI 노출중
128
노출 OFF
필터
필터 종류옵션동작
상품 필터전체 / 인터넷+TV / 렌탈 / 중고폰테이블 행 텍스트 매칭 필터링
노출 필터전체 / ON / OFFAI 노출 상태로 필터링
검색이름 / 상품 검색텍스트 입력 검색
후기 목록 테이블 컬럼
컬럼설명상호작용
등록일후기 작성일-
이름작성자명 (마스킹 없음)클릭 -> findAndOpenMember() -> 회원 상세 모달
티켓번호계약 상품의 티켓번호모노스페이스 표시
상품계약 상품명-
별점1~5 별표-
내용후기 텍스트 (줄임 표시)title 속성으로 전문 확인
사진첨부 사진 수-
AI노출ON/OFF 뱃지클릭 시 즉시 토글
상세상세 보기 버튼openReviewDetail() 모달
후기 상세 모달 (openReviewDetail)
모달 구성
1. 작성자명 (클릭 -> 회원 상세) + 별점 + 등록일
2. 상품 정보: 티켓번호 / 상품명 / AI 노출 토글
3. 후기 내용 전문
4. 첨부 사진 (썸네일 표시)
5. 관리 메모 (textarea + 저장 버튼)
어드민 API
GET /admin/platform/reviews목록 조회 (최대 100건)
?status=pending미승인 후기만
?status=approved승인된 후기만
PATCH /admin/platform/reviews/:id승인 상태 변경 (is_approved)
DELETE /admin/platform/reviews/:id후기 삭제
AI 노출 ON/OFF: 테이블에서 ON/OFF 뱃지 클릭 시 프론트에서 즉시 토글 (CSS class green <-> gray). 현재 프론트 전용 토글이며, is_approved 필드와 별개로 동작.
|
STEP 4 -- 후기가 노출되는 곳
1. 웹 메인 후기 섹션 (Home.jsx)
위치: 메인 페이지 하단 "실제 고객 후기" 섹션
데이터: api.reviews.list({ limit: 4 }) 호출
표시: 최근 후기 4건 가로 스크롤
카드 구성: 별점 + 카테고리 뱃지 + 사진 + 내용(60자 줄임) + 작성자(마스킹) + 날짜
작성자 마스킹: maskName() 함수 - 예: 홍**
조건: recentReviews.length > 0 일 때만 섹션 표시
2. AI 채팅 자동 노출 (chat-tools.js)
Tool 이름: search_reviews
트리거: "후기", "리뷰", "평가", "만족도" 키워드
파라미터: category (선택), limit (기본 3)
정렬: rating DESC, created_at DESC
반환: 작성자 / 별점 / 상품 / 내용 / 이미지 / 작성일
예시: "KT 인터넷 후기 보여줘" -> AI가 자동 호출
AI 채팅 후기 노출 흐름
고객: "인터넷
후기 보여줘"
->
Claude AI
search_reviews 호출
->
bongi_reviews
category 필터
->
별점순 정렬
상위 3건 반환
->
채팅 안에서
후기 카드 표시
마이페이지 후기 탭 (Reviews.jsx)
요소구현
카테고리 필터전체 / 인터넷+TV / 렌탈 / 중고폰 (탭 버튼)
후기 작성 버튼"후기 작성" 버튼 클릭 -> 작성 폼 토글
작성 폼상품 선택(select) -> 별점 -> 내용(textarea) -> 사진 첨부(필수) -> 등록
후기 목록상품명 + 별점 + 내용 + 사진 썸네일 + 작성자(마스킹) + 날짜
적립 안내"후기 작성 시 15,000P 적립!" 텍스트
렌탈 상품 카드 (flow-rental.html)
렌탈 상품 카드에 bongi_reviews 기반 고객만족도(평점)가 표시된다. 해당 상품의 후기 별점 평균이 카드에 노출.
|
STEP 5 -- 포인트 적립
후기 작성 보상
적립 포인트15,000P
대상본인 (후기 작성자)
조건계약 완료 후 후기 작성 시 (상품 무관)
필수PASS 본인인증 완료
전체 포인트 적립 단가표
회원가입본인5,000P
친구초대 가입추천인3,000P
친구 계약완료추천인최대 20,000P
친구 계약완료친구최대 15,000P
후기 작성본인15,000P
PASS 본인인증 미완료 시: 후기 작성 자체는 가능하지만 포인트 적립이 되지 않는다. 모든 보상(가입, 초대, 계약, 후기)에 PASS 인증은 공통 필수 조건이다.
|
DB -- bongi_reviews 테이블
컬럼타입설명비고
iduuidPK자동 생성
user_iduuid (nullable)작성자 ID로그인 사용자 = req.user.id, 비로그인 = null
categorytext카테고리기본값 'general'. water-purifier, air-purifier, tv, internet 등
product_nametext상품명필수
ratinginteger별점1~5, 필수
contenttext후기 내용필수, 최소 10자
author_nametext작성자 이름로그인 시 displayName, 비로그인 시 직접 입력 또는 '익명'
image_urltext (nullable)사진 URLSupabase Storage review-images 버킷의 publicUrl
is_approvedboolean승인 여부어드민에서 PATCH로 변경
created_attimestamp작성일자동
Storage
버킷용도파일명 규칙제한
review-images 후기 첨부 사진 review_{timestamp}_{random6}.{ext} 3MB 이하, base64 이미지
데이터 현황 (data-flow-diagram 기준)
bongi_reviews: 99건 등록됨. 어드민 API는 최대 100건 조회, 고객 API는 page/limit 페이징 지원 (기본 20건).
|
소스코드 맵
파일역할주요 함수/컴포넌트
server/routes/reviews.js 고객용 후기 API GET / (목록) / POST / (작성) / POST /upload-image (이미지)
server/routes/admin-platform.js 어드민 후기 API GET /reviews / PATCH /reviews/:id / DELETE /reviews/:id
server/services/chat-tools.js AI 채팅 후기 조회 Tool search_reviews -> searchReviews({ category, limit })
client/src/pages/my/Reviews.jsx 마이페이지 후기 탭 카테고리 필터 + 작성 폼 + 목록
client/src/pages/Home.jsx 메인 페이지 후기 섹션 recentReviews (최근 4건 가로 스크롤)
server/public/admin/index.html 어드민 15번 메뉴 show(9) / loadReviewsAdmin() / openReviewDetail()
|
예외 케이스
상황현재 동작비고
비로그인 사용자 후기 작성 optionalAuth이므로 작성 가능. user_id = null, author_name = 직접 입력 또는 '익명' 포인트 적립 불가 (user 없음)
PASS 미인증 회원 후기 작성 가능, 포인트 적립 불가 모든 보상에 PASS 인증 필수
사진 미첨부 서버에서 image_url = null 허용 (현재). 프론트에서 "사진 첨부 (필수)" UI 표시 서버 강제 검증은 미구현, 프론트 가이드 수준
이미지 3MB 초과 upload-image API에서 400 에러 반환 "이미지 크기는 3MB 이하여야 합니다."
내용 10자 미만 서버에서 400 에러 반환 "후기는 최소 10자 이상 작성해주세요."
별점 범위 초과 서버에서 400 에러 반환 "별점은 1~5 사이여야 합니다."
Supabase 미연결 GET -> { data: [], total: 0 }, POST -> 503 'DB 연결 필요' supabase null 체크
잘못된 base64 형식 정규식 매칭 실패 -> 400 에러 data:image/{ext};base64,... 형식 필수
계약 미완료 고객 프론트 UI에서 "계약 완료한 상품만 작성 가능합니다" 안내 서버에서 계약 완료 여부 검증은 미구현 (프론트 가이드)
동일 상품 중복 후기 현재 중복 제한 없음 동일 상품에 여러 후기 작성 가능
현재 미구현 사항:
1. 서버에서 계약 완료 여부 검증 (프론트 가이드만 존재)
2. 서버에서 사진 필수 강제 검증 (image_url null 허용 중)
3. AI 노출 ON/OFF DB 반영 (현재 프론트 토글만, 별도 필드 미존재)
4. 후기 작성 시 자동 포인트 적립 로직 (별도 적립 API 연동 필요)
관련 URL
어드민https://bongi-mobile-production.up.railway.app/admin/15 후기관리
GitHubhttps://github.com/vinsenzo83/bongi-mobile소스코드
포인트/친구초대 플로우docs/flow-points-referral-guard.html포인트 적립 상세
데이터 플로우docs/data-flow-diagram.htmlbongi_reviews ERD
봉이모바일 · 후기 관리 플로우 · 2026-04-09
어드민 15번 메뉴 · show(9) · bongi_reviews 99건