|
2 | 2 |
|
3 | 3 | import lombok.RequiredArgsConstructor; |
4 | 4 | import lombok.extern.slf4j.Slf4j; |
| 5 | +import org.muses.backendbulidtest251228.domain.alarm.service.AlarmSRVI; |
5 | 6 | import org.muses.backendbulidtest251228.domain.billingAuth.entity.BillingAuthENT; |
6 | 7 | import org.muses.backendbulidtest251228.domain.billingAuth.repository.BillingAuthREP; |
7 | 8 | import org.muses.backendbulidtest251228.domain.order.dto.OrderCreateReqDT; |
|
10 | 11 | import org.muses.backendbulidtest251228.domain.order.entity.OrderENT; |
11 | 12 | import org.muses.backendbulidtest251228.domain.order.enums.OrderStatus; |
12 | 13 | import org.muses.backendbulidtest251228.domain.orderItem.repository.OrderItemREP; |
| 14 | +import org.muses.backendbulidtest251228.domain.project.entity.RewardENT; |
| 15 | +import org.muses.backendbulidtest251228.domain.project.enums.RewardType; |
13 | 16 | import org.muses.backendbulidtest251228.domain.project.repository.RewardRepo; |
14 | 17 | import org.muses.backendbulidtest251228.domain.settlement.repository.SettlementRepo; |
| 18 | +import org.muses.backendbulidtest251228.domain.ticket.service.TicketIssueSRV; |
15 | 19 | import org.muses.backendbulidtest251228.global.apiPayload.code.ErrorCode; |
16 | 20 | import org.muses.backendbulidtest251228.global.businessError.BusinessException; |
17 | 21 | import org.muses.backendbulidtest251228.domain.order.repository.OrderREP; |
@@ -46,6 +50,9 @@ public class OrderSRV { |
46 | 50 |
|
47 | 51 | private final TossBillingClient tossBillingClient; |
48 | 52 |
|
| 53 | + private final AlarmSRVI alarmSRVI; |
| 54 | + private final TicketIssueSRV ticketIssueSRV; |
| 55 | + |
49 | 56 |
|
50 | 57 | @Transactional |
51 | 58 | public OrderCreateResDT prepare(String baseSuccessUrl, String baseFailUrl, Long userId, OrderCreateReqDT dto) { |
@@ -110,6 +117,38 @@ public OrderCreateResDT prepare(String baseSuccessUrl, String baseFailUrl, Long |
110 | 117 |
|
111 | 118 | projectStatSRV.recalc(project); |
112 | 119 |
|
| 120 | + // 여기서 티켓 발행 / 알림 적재를 진행 |
| 121 | + for (OrderItemENT item : saved.getOrderItems()) { |
| 122 | + Long rewardId = item.getRewardId(); |
| 123 | + |
| 124 | + RewardENT reward = rewardRepo.findById(rewardId) |
| 125 | + .orElseThrow(() -> new BusinessException( |
| 126 | + ErrorCode.BAD_REQUEST, |
| 127 | + "해당 리워드를 찾을 수 없습니다.", |
| 128 | + Map.of("rewardId", rewardId, "orderId", saved.getId(), "projectId", project.getId()) |
| 129 | + )); |
| 130 | + |
| 131 | + if (reward.getType() == RewardType.NONE) { |
| 132 | + // 주문 시점에 보내는게 맞는지 한 번만 체크 |
| 133 | + alarmSRVI.send( |
| 134 | + saved.getMember().getId(), |
| 135 | + 4L, |
| 136 | + Map.of("projectName", saved.getProject().getTitle()) |
| 137 | + ); |
| 138 | + continue; |
| 139 | + } |
| 140 | + |
| 141 | + // 티켓 발행 (idempotent하게) |
| 142 | + ticketIssueSRV.issueIfAbsent(item); |
| 143 | + |
| 144 | + // 2번 템플릿(QR 발급) |
| 145 | + alarmSRVI.send( |
| 146 | + saved.getMember().getId(), |
| 147 | + 7L, |
| 148 | + Map.of("projectName", saved.getProject().getTitle()) |
| 149 | + ); |
| 150 | + } |
| 151 | + |
113 | 152 |
|
114 | 153 |
|
115 | 154 | return OrderCreateResDT.builder() |
|
0 commit comments