이전에 발생했던 문제
취소된 결제가 존재할 때 새로운 멤버십을 결제하는 경우
아래 취소되었던 멤버십도 같이 활성화되는 문제를 발견
payment 컬럼의 status를 활용하여 true인 경우에만 push를 할 수 있도록 변경
const paymentHistory = [];
for (const payment of payments) {
const workspaceId = payment.workspaceId;
const status = payment.status;
const workspace = await this.workspaceService.getWorkspaceDetail(workspaceId);
if (workspace.memberships.length > 0 && status === true) {
const membership = workspace.memberships[0];
const paymentInfo = {
paymentId: payment.id,
paymentCreatedAt: payment.created_at,
workspaceId,
workspaceName: workspace.name,
membershipCreatedAt: membership.created_at,
membershipEndDate: membership.end_date,
membershipPrice: membership.package_price,
};
paymentHistory.push(paymentInfo);
} else {
const paymentInfo = {
paymentId: payment.id,
paymentCreatedAt: payment.created_at,
workspaceId,
workspaceName: workspace.name,
};
paymentHistory.push(paymentInfo);
}
}
return paymentHistory;
true가 아닐 경우 취소된 결제 내역이므로 membership의 정보를 담지 않음, 프론트에서는 멤버십의 생성정보가 없을 경우 모두 취소된 결제로 볼 수 있도록 아래와 같이 코드를 작성
const paymentDate = new Date(history.paymentCreatedAt);
if (paymentDate >= oneMonthAgo && paymentDate <= currentDate) {
if (!history.membershipCreatedAt) {
result += ` <tbody>
<tr>
<td data-workspace-id="${history.workspaceId}" id="workspace-name-table">${history.workspaceName}</td>
<td>취소된 결제입니다.</td>
<td>-</td>
<td>`;
출력 결과
추가로 한달 이내의 결제 내역만 출력되도록 설정
52번 paymentId가 취소된 워크스페이스 결제이며 payment 생성날짜를 한달 이전으로 세팅하면
결제내역에 출력되지 않는 것을 확인
추가로 아직 테스트하지 못한 내용이지만 멤버십을 이용 후 다시 결제하지 않는 경우가 있을수도 있으므로 node schedule을 사용하여 멤버십의 endDate를 확인하고 현재날짜 이전이라면 삭제하는 코드를 작성
@Cron('0 0 * * *')
async deleteExpiredMembership(): Promise<IResult> {
return await this.membershipService.deleteExpiredMembership();
}
// 만료된 멤버십 삭제
async deleteExpiredMembership(): Promise<IResult> {
const expiredMembership = await this.membershipRepository.find({
where: {
end_date: LessThan(new Date()),
},
});
await this.membershipRepository.remove(expiredMembership);
return { result: true };
}