본문 바로가기
Team Project (국비)/Team Project 메모

최종프로젝트 쿠폰 설계 ver.1.4.0

by Hwanii_ 2023. 9. 13.
728x90

==================================================

1. 추천인 쿠폰

1)
어플리케이션 웹사이트 신규 가입시,
유효한 추천인 (기존 웹사이트 회원) 을 입력할 경우,
추천인과 신규 회원 모두 추천인 할인 쿠폰을 부여 받기.

2)
Model
쿠폰 상세 테이블에 회원의 PK의 정보가 담겨있는 추천인 할인 쿠폰을 저장 하기 위한
Create 쿼리문을 작성 하기.

3)
View
-
유효한 추천인 인지를 확인 하기 위해서, 추천인을 입력할 input 태그를 만들고,
비동기처리로 기능을 구현 하기.

-
유효한 추천인 이면 추천인의 값을 담는 데이터를 보내주고,
유효하지 않은 추천인 이면 추천인의 값을 담지 않고 빈값으로 보내주기.

4)
Controller


View 에서 입력한 추천인 값을 받고,
Model의 유효한 회원인지를 확인 하기 위해서,
Read 쿼리문에 해당하는 selectOne() 메서드를 통해,
유효한 회원인지 아닌지를 구별하여 View 에게 값을 보내주기. (비동기처리)

-
View 에서 입력한 추천인의 값을, 유효한지 아닌지를 확인 해서,
유효한 추천인 이라면, Create 쿼리문에 해당하는 insert() 메서드를 통해,
추천인 할인 쿠폰을 지급 하기.

==================================================

2. 등급 쿠폰

1)
상품을 구매한 회원은 누적 금액이 일정 금액 이상이 되면 등급이 상승 한다.

2)
등급 상승은 DBMS의 트리거를 사용 하여 구현 하고,
등급이 상승 할 때마다 등급에 맞는 등급 할인 쿠폰을 증정 한다.
즉,
누적 금액에 따른 회원 등급을 상승 시키기 위한 트리거 작성 하기.

3)
분기 개념은 DBMS의 이벤트 스케줄러를 사용 하여 구현 하고,
하나의 분기가 지나가면, 회원의 등급이 초기화 되는 기능을 구현 하기.
1분기 / 2분기 / 3분기 / 4분기
즉,
분기가 지날때마다 회원 등급을 초기화 시키기 위한 이벤트 스케줄러 작성 하기.

==================================================

3. 보유한 쿠폰 확인

1)
회원인 소유한 쿠폰을 마이페이지 에서 확인 할 수 있다.

2)
Model
회원이 소유한 쿠폰을 마이페이지 에서 볼 수 있도록,
쿠폰 상세 테이블의 Read에 해당하는 쿼리문을 작성 하고,
어떤 회원의 쿠폰인지를 SELECT 하기 위해서, 회원의 PK를 WHERE절의 조건으로 사용 한다.

3)
View
회원이 보유한 쿠폰을 볼 수 있도록,
Controller 에게 쿠폰 상세 정보 데이터가 담겨져 있는 값을 전달 받고,
쿠폰을 보유 하고 있는지 아닌지를 확인 해서,
보유 하고 있으면 쿠폰을 보여주고,
보유 하고 있지 않으면 소유한 쿠폰이 없다는 안내를 해주는 사용자 편의성을 보완 하기.

4)
Controller
Model의 Read에 해당하는 selectAll() 메서드를 사용 하여,
특정 회원이 가지고 있는 쿠폰 상세 데이터가 담긴 배열리스트 데이터를 받고,
이 데이터를 View 에게 전달 한다.

==================================================

4. 결제시 사용 가능한 쿠폰 확인

1)
결제 페이지 에서 회원이 보유 하고 있는 쿠폰 중에서, 사용 가능한 쿠폰만 보여지도록 한다.

2)
Model
Read에 해당하는 쿼리문을 작성 하고, WHERE 절의 조건으로 사용자의 PK를 받는다.
사용가능한 쿠폰만 불러오기 위해서,
사용 가능 여부를 알려주는 칼럼의 값을 쿼리문에 작성 한다.

3)
View
회원이 보유 하고 있는 사용 가능한 쿠폰만 보여지도록 한다.
쿠폰 이름, 쿠폰 할인율, 쿠폰 유효 기간을 보여준다.
쿠폰 할인율 칼럼값은 퍼센트가 아니라 소수점으로 되어 있기 때문에,
사용자 편의성을 위해 퍼센트로 표현되도록 보완 하기.

4)
Controller
Read에 해당하는 쿼리문인 selectAll() 메서드를 사용하고, 
회원의 사용 가능한 쿠폰 데이터를 배열리스트 데이터로 받아,
데이터를 View로 보내준다.

==================================================

5. 결제시 쿠폰 적용 하기

1)
결제 페이지 에서 사용 가능한 쿠폰을 적용 하도록 한다.
쿠폰을 적용 하면 동적으로 사용한 쿠폰의 쿠폰 적용 여부를 사용자에게 보여줄 수 있도록 한다.
또한, 적용한 쿠폰의 PK와 할인율을 Controller 로 보내기 위해서 동적으로 처리 한다.
마지막으로, 쿠폰을 적용 하면 적용한 쿠폰의 할인율을 기존의 예상 주문 금액에 계산 해서,
쿠폰의 할인율이 적용된 예상 주문 금액을 동적으로 보여지도록 한다.
동적으로 보여지게 하는 모든 기능은 자바스크립트로 처리 한다.

2)
쿠폰의 이름을 누르면,
자바스크립트로 쿠폰의 정보를 보내기 위해서 사용자 정의 속성을 사용하여 데이터를 보내주고,
모달창이 뜨도록 한다.
모달창에서 적용 버튼을 누르면 쿠폰이 적용 되며, 동적으로 쿠폰 PK와 할인율 값이 세팅되도록 하고,
적용 안함 버튼을 누르면 기존에 쿠폰 데이터가 동적으로 초기화 되도록 한다.

3)
Controller는 사용자가 사용한 쿠폰 정보 데이터를 받아야 하고,
쿠폰을 사용 한지 안한지를 구분 하기 위한 플래그 값이 필요 하다.
그 플래그 값으로 쿠폰을 사용 했다면 쿠폰 할인율이 적용된 상품 주문 총액을 받고,
쿠폰을 사용 하지 않았다면 기존의 상품 주문 총액을 받는다.

4)
Model
결제시 쿠폰을 적용하여 사용하면, 쿠폰의 사용 가능 여부를 업데이트 하기 위한,
쿠폰 상세 테이블의 Update 쿼리문을 사용 해야 한다.

또한,

쿠폰 기능과 직접적으로 연관된 기능은 아니지만, 중간 프로젝트 때 구현 되지 못했던 부분이기에 같이 추가 한다.
상품을 구매시, 사용자가 구매하려는 상품 개수를 받아서 기존 상품 재고 개수에서 빠지도록 해야하므로,
마찬가지로 상품 테이블의 Update 쿼리문을 사용 한다.

5)
View
-
쿠폰 적용을 안하면, 적용 안한 쿠폰은 미적용 으로 뜨도록 하고,
쿠폰 적용을 하면 적용한 해당 쿠폰에 쿠폰 적용 여부 행에 적용 으로 뜨도록,
자바스크립트를 사용해서 동적으로 처리 한다.

-
쿠폰 적용을 하면 기존 상품 예상 주문 가격에 적용한 쿠폰의 쿠폰 할인율을 계산해서,
동적으로 표현 되도록 한다.

6)
Controller
쿠폰을 적용 했는지 안했는지를 확인하고, 쿠폰 적용을 했으면,
쿠폰 상세 테이블의 update 메서드를 사용 하고,
회원의 아이디값을 제외한 나머지의 사용한 세션 정보 값들은 지워 준다.

==================================================

6. 생각 해야 하는 유효성

1)
결제 페이지 에서, 쿠폰 중복 적용이 되지 않도록 해야 한다.

2)
결제 페이지 에서 최종 결제 확인 페이지로 갈때,
새로고침이나 뒤로가기 관련해서 쿠폰 중복 적용이 되지 않도록 해야 한다.
>>
Post-Redirect-Get (PRG) 패턴을 사용 하여 해결 하도록 한다.

==================================================

반응형