기프티콘 등록 및 사용 - 9min9/GiftHub GitHub Wiki
테이블 및 흐름도
- 사용자가 기프티콘 이미지 파일을 첨부 시 이미지 서버에 등록 및 GifticonImage 생성
- GifticonImage를 FK로 참조하는 GifticonStorage(기프티콘 임시 엔터티) 생성
- Product의 상품명과 동일하다면 사용자가 ‘등록하기’ 클릭시 Gifticon 생성 후 해당 GifticonImage 및 이미지 서버의 이미지 파일 삭제
- Product의 상품명과 동일하지 않다면, 관리자에게 검수요청
- 관리자의 검수가 처리 시 기프티콘 등록, 반려 시 재검수 요청
- 정상등록된 Gifticon은 ‘사용’ 클릭 시 사용자의 휴대전화로 바코드 사진을 포함한 MMS 전송
Gifticon 테이블과 GifticonStorage를 분리한 이유
- 기프티콘 등록 시 사용자 예외처리와 관리자 검수를 통해 ‘정상’ 기프티콘과 ‘임시’ 기프티콘을 분리하고자 하였음
- ‘정상’ 기프티콘은 판매, 사용이 자유롭고, ‘임시’ 기프티콘은 등록 처리 전 사이트 기능이 이용 불가
OCR 동작 방식
등록과정
- 카카오톡으로 추가 시 카카오챗봇의 이미지 URL이 서버로 전송, 파일로 등록 시 MultipartFile 객체가 서버로 전송
- 등록 API가 호출되면 Naver OCR API를 호출하고 이미지의 텍스트를 읽어 결과 값을 반환
- OCR의 결과 값을 통해 해당 이미지의 기프티콘 여부 파악
- 이미지가 기프티콘으로 판단되면 Product 테이블의 브랜드 목록과 먼저 비교
- 브랜드 목록을 비교 후 해당 브랜드가 존재하면 상품명을 비교
OCR 오류 처리
- 브랜드 및 상품명이 매칭되지 않으면 오류를 반환하는 것이 아닌 기프티콘 상태를 NEED_APPROVAL 상태로 등록
- NEED_APPROVAL 상태는 관리자 검수를 통해 기프티콘 등록 값을 검증
- 유효기간 및 바코드가 부적합 시 오류를 반환하여 기프티콘 등록 실패 처리
GifticonStorage 등록
챗봇으로 등록
파일로 등록