번개함에서 만료된/만료 예정인 번개에 대한 정보를 표시하기 위해, 만료 및 만료 예정 볼트에 대한 정보를 전달하는 API 엔드포인트를 제공한다.
만료된 볼트
api-server - /boost/bolt/history
bolt-server 기준
•
history
◦
내역에 만료된 볼트 정보 포함 - 로직은 이미 완료되어 있음
▪
getHistory 에서 이미 해당 유저의 만료된 볼트 정보를 업데이트하고, bolt-history 테이블로 넣고 있음
만료 예정 볼트
api-server - /boost/bolt/toBeExpired
bolt-server 기준
•
expiration/toBeExpired
◦
GET - 30일 이내 만료 예정 볼트에 대한 정보 제공
▪
length: 만료 예정 내역 개수
▪
list: 하루 단위로 group by한 만료 예정 내역 배열
•
group by는 쿼리가 아닌 여기서 수동으로 수행됨
•
endAt: 만료 일자
•
type: BoltPolicyType / BoltIssueType - 무엇이 더 나을지?(일단은 BoltIssueType으로)
- event만으로 충분함
•
count: 해당 만료 일자에 만료되는 개수
•
event?: 이벤트로 지급된 번개일 시 이벤트명 기입
orm
•
BoltRepository
◦
이벤트로 인한 번개는 따로 분류를 해줘야 하므로, 쿼리를 별도로 나눔
▪
▪
이벤트는 created_at으로 묶어줘야 하고, 그 외에는 end_at으로 묶어서 일괄처리하는데 하나의 쿼리에서 수행하면 이벤트가 아닌 볼트들이 필요없는 덩어리가 많이 생김
◦
getToBeExpiredNonPurchaseBoltsByUserId - 30일 이내 만료 예정 이벤트 볼트 전부 가져오기
▪
테이블 업데이트(볼트 만료 시각 하루 단위로 변경) 이후에는 종료 시각이 같은 일자에 다 동일하게 설정되므로, created_at + end_at + issue_type + bolt_policy_id으로 group-by한다.
◦
getToBeExpiredPurchaseBoltsByUserId - 30일 이내 만료 예정 non-event 볼트 전부 가져오기
▪
end-at으로 group-by한다.
알림톡 - boost-worker → notification-server
•
매월 1일, 15일 오전 9시 크론잡 생성 (boost-worker)
•
카카오톡으로 알림톡 발송 (만료 예정 번개의 개수 담아주기)
만료 시각 업데이트
모든 번개에 대해(현재 약 77,000,000개) 만료 시각을 해당 일자의 끝으로 변경하는 작업
•
분당 10000개씩, 번개 ID를 기준으로 업데이트한다.
◦
ID 10000개씩 구간을 본다는 뜻
•
sharedRedis를 통해 업데이트할 구간에 대한 정보 저장
•
slack #mntr-misc로 업데이트 현황 로깅