Logical

포인트 만료 및 FIFO 테이블 설계

Zac 2021. 8. 18. 13:58

* 만료일시를 연장시켜주고 싶을 경우는 연장보다는
   즉시 관리자차감시킨 후 차감금액만큼
   새로운 만료일시로 관리자지급으로 처리할것

* 100포인트 사용 후 50포인트만 취소는 불가

* 사용 후 취소시점에 만료일이 지난 경우는 취소불가
   꼭 줘야 하는 경우에는 새로 관리자 지급
   구매보상충전으로 받은 포인트를 사용한 이후 구매보상충전건을 취소할 경우는
   구매보상충전건이 일부라도 사용이 되지 않은 상태만 일반적인 취소처리를 수행하고
   일부나 전액 사용된 

* 포인트변경 트랜잭션 시작 후 user.point를 select for update를 하거나 update를 해야함.
   사용가능한 금액만큼 가지고 있는지 체크를 할 경우 아래와 같이 update를 하여
   update user set point = point + @변경액 where user_no = @회원번호 and point + @변경액 > 0;
   updated rows가 1이 아니면 에러처리하고 1일 경우만 이후로 진행시키면 됨

* 만료시에도 로그를 꼭 남기고 point_charge의 balance를 0으로 차감 시켜줘야함.

* 포인트를 변경시 point_log와 point_detail_log의 amount는
   증가일 경우는 플러스 차감일 경우는 마이너스로 입력

* point_charge 추후 변경 검토
  - 최초충전금액을 알고 싶다면 point_log를 조인하고
     조인부하가 심해지면 point_charge.charge_amount를 추가하여 사용
  - user_no, balance, reg_dt로 복합인덱스를 걸어서 사용
    추후 index 페이지 분할 부하가 심하다면 user_no, empty_yn, reg_dt와 같이
    empty_yn 컬럼 추가하여 인덱스 생성

* 유저별 포인트 정합성 검수를 위해 아래 값들 동일한지 주기적으로 확인
 - user.point
 - sum(point_charge.balance)
 - sum(point_log.amount)
 - sum(point_detail_log.amount)
 - point_log의 마지막 balance

 

* 포인트 변경 코드

PC00 : 포인트변경코드
PC01 : 구매보상충전
PC02 : 리뷰보상충전
PC03 : 이벤트보상충전
PC04 : 관리자충전
PC51 : 구매사용차감
PC52 : 관리자차감
PC53 : 만료차감
PC91 : 충전취소
PC92 : 구매사용취소

 

* 상황별 데이터 입력 샘플