쿠폰 조회 기능

public List<CouponDTO> findAllByCompany(String company) {
    List<Coupon> couponList = couponRepository.findValidCouponsByCompanyOrAdmin(company, LocalDate.now());

    return couponList.stream()
            .map(coupon -> modelMapper.map(coupon, CouponDTO.class))
            .collect(Collectors.toList());
}

기술 설명

쿠폰 발급 기능

public int couponIssue(List<Long> cnoList, UserDetails userDetails) {
    User user = User.builder()
            .uid(userDetails.getUsername())
            .build();

    int successCount = 0;

    for (Long cno : cnoList) {
        Optional<Coupon> optionalCoupon = couponRepository.findById(cno);

        // 존재하지 않는 쿠폰 번호는 무시
        if (optionalCoupon.isEmpty()) {
            continue;
        }

        Coupon coupon = optionalCoupon.get();

        // 이미 발급된 쿠폰인지 확인
        boolean exist = couponIssueRepository.existsByUserAndCoupon(user, coupon);
        if (exist) {
            // 이미 발급된 경우에도 성공 카운트만 증가시키고 다음으로
            successCount++;
            continue;
        }

        try {
            // 새로운 CouponIssue 엔티티 생성 및 저장
            CouponIssue couponIssue = CouponIssue.builder()
                    .user(user)
                    .coupon(coupon)
                    .regDate(LocalDate.now())
                    .issuedBy(coupon.getIssuedBy())
                    .validTo(String.valueOf(coupon.getValidTo()))
                    .build();

            couponIssueRepository.save(couponIssue);
            successCount++;
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }
    return successCount;
}

기술 설명