|
12 | 12 | import com.gdschongik.gdsc.domain.coupon.dto.request.IssuedCouponQueryOption;
|
13 | 13 | import com.gdschongik.gdsc.domain.coupon.dto.response.CouponResponse;
|
14 | 14 | import com.gdschongik.gdsc.domain.coupon.dto.response.IssuedCouponResponse;
|
| 15 | +import com.gdschongik.gdsc.domain.coupon.util.CouponNameUtil; |
15 | 16 | import com.gdschongik.gdsc.domain.member.dao.MemberRepository;
|
16 | 17 | import com.gdschongik.gdsc.domain.member.domain.Member;
|
| 18 | +import com.gdschongik.gdsc.domain.study.dao.StudyHistoryRepository; |
| 19 | +import com.gdschongik.gdsc.domain.study.domain.StudyHistory; |
17 | 20 | import com.gdschongik.gdsc.global.exception.CustomException;
|
18 | 21 | import com.gdschongik.gdsc.global.util.MemberUtil;
|
19 | 22 | import java.util.List;
|
|
30 | 33 | @Transactional(readOnly = true)
|
31 | 34 | public class CouponService {
|
32 | 35 |
|
| 36 | + private final CouponNameUtil couponNameUtil; |
33 | 37 | private final MemberUtil memberUtil;
|
| 38 | + private final StudyHistoryRepository studyHistoryRepository; |
34 | 39 | private final CouponRepository couponRepository;
|
35 | 40 | private final IssuedCouponRepository issuedCouponRepository;
|
36 | 41 | private final MemberRepository memberRepository;
|
@@ -87,4 +92,28 @@ public List<IssuedCouponResponse> findMyUsableIssuedCoupons() {
|
87 | 92 | .map(IssuedCouponResponse::from)
|
88 | 93 | .toList();
|
89 | 94 | }
|
| 95 | + |
| 96 | + @Transactional |
| 97 | + public void createAndIssueCouponByStudyHistories(List<Long> studyHistoryIds) { |
| 98 | + List<StudyHistory> studyHistories = studyHistoryRepository.findAllById(studyHistoryIds); |
| 99 | + List<Long> studentIds = studyHistories.stream() |
| 100 | + .map(studyHistory -> studyHistory.getStudent().getId()) |
| 101 | + .toList(); |
| 102 | + List<Member> students = memberRepository.findAllById(studentIds); |
| 103 | + |
| 104 | + String couponName = couponNameUtil.generateStudyCompletionCouponName( |
| 105 | + studyHistories.get(0).getStudy()); |
| 106 | + // TODO: 요청할 때마다 새로운 쿠폰 생성되는 문제 수정: 스터디마다 하나의 쿠폰만 존재하도록 쿠폰 타입 및 참조 식별자 추가 |
| 107 | + Coupon coupon = Coupon.create(couponName, Money.from(5000L)); |
| 108 | + couponRepository.save(coupon); |
| 109 | + |
| 110 | + List<IssuedCoupon> issuedCoupons = students.stream() |
| 111 | + .map(student -> IssuedCoupon.create(coupon, student)) |
| 112 | + .toList(); |
| 113 | + issuedCouponRepository.saveAll(issuedCoupons); |
| 114 | + |
| 115 | + log.info( |
| 116 | + "[CouponService] 스터디 수료 쿠폰 발급: issuedCouponIds={}", |
| 117 | + issuedCoupons.stream().map(IssuedCoupon::getId).toList()); |
| 118 | + } |
90 | 119 | }
|
0 commit comments