diff --git a/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java b/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java index b14f826b..2831ad9c 100644 --- a/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java +++ b/src/main/java/life/mosu/mosuserver/application/application/ApplicationService.java @@ -7,8 +7,8 @@ import life.mosu.mosuserver.domain.application.AdmissionTicketImageJpaRepository; import life.mosu.mosuserver.domain.application.ApplicationJpaEntity; import life.mosu.mosuserver.domain.application.ApplicationJpaRepository; -import life.mosu.mosuserver.domain.application.ApplicationSchoolJpaRepository; import life.mosu.mosuserver.domain.applicationschool.ApplicationSchoolJpaEntity; +import life.mosu.mosuserver.domain.applicationschool.ApplicationSchoolJpaRepository; import life.mosu.mosuserver.domain.school.SchoolJpaEntity; import life.mosu.mosuserver.domain.school.SchoolJpaRepository; import life.mosu.mosuserver.global.exception.CustomRuntimeException; diff --git a/src/main/java/life/mosu/mosuserver/application/applicationschool/ApplicationSchoolService.java b/src/main/java/life/mosu/mosuserver/application/applicationschool/ApplicationSchoolService.java index 0c36b3d3..56f75eda 100644 --- a/src/main/java/life/mosu/mosuserver/application/applicationschool/ApplicationSchoolService.java +++ b/src/main/java/life/mosu/mosuserver/application/applicationschool/ApplicationSchoolService.java @@ -7,9 +7,9 @@ import life.mosu.mosuserver.domain.application.AdmissionTicketImageJpaRepository; import life.mosu.mosuserver.domain.application.ApplicationJpaEntity; import life.mosu.mosuserver.domain.application.ApplicationJpaRepository; -import life.mosu.mosuserver.domain.application.ApplicationSchoolJpaRepository; import life.mosu.mosuserver.domain.application.Subject; import life.mosu.mosuserver.domain.applicationschool.ApplicationSchoolJpaEntity; +import life.mosu.mosuserver.domain.applicationschool.ApplicationSchoolJpaRepository; import life.mosu.mosuserver.domain.profile.ProfileJpaEntity; import life.mosu.mosuserver.domain.profile.ProfileJpaRepository; import life.mosu.mosuserver.domain.refund.RefundJpaRepository; diff --git a/src/main/java/life/mosu/mosuserver/application/payment/PaymentEvent.java b/src/main/java/life/mosu/mosuserver/application/payment/PaymentEvent.java index dfc28266..6b9c4198 100644 --- a/src/main/java/life/mosu/mosuserver/application/payment/PaymentEvent.java +++ b/src/main/java/life/mosu/mosuserver/application/payment/PaymentEvent.java @@ -4,7 +4,7 @@ import life.mosu.mosuserver.domain.payment.PaymentStatus; public record PaymentEvent( - List applicationIds, + List applicationSchoolIds, String orderId, PaymentStatus status, Integer totalAmount diff --git a/src/main/java/life/mosu/mosuserver/application/payment/PaymentFailureHandler.java b/src/main/java/life/mosu/mosuserver/application/payment/PaymentFailureHandler.java index 18640ff0..7e515c21 100644 --- a/src/main/java/life/mosu/mosuserver/application/payment/PaymentFailureHandler.java +++ b/src/main/java/life/mosu/mosuserver/application/payment/PaymentFailureHandler.java @@ -19,20 +19,20 @@ public class PaymentFailureHandler { public void handlePaymentFailure(PaymentEvent event) { List existingPayments = paymentRepository.findByOrderId(event.orderId()); Set existingAppIds = existingPayments.stream() - .map(PaymentJpaEntity::getApplicationId) + .map(PaymentJpaEntity::getApplicationSchoolId) .collect(Collectors.toSet()); - List missingAppIds = event.applicationIds().stream() - .filter(appId -> !existingAppIds.contains(appId)) + List missingAppSchoolIds = event.applicationSchoolIds().stream() + .filter(appSchoolId -> !existingAppIds.contains(appSchoolId)) .toList(); // 상태 변경 existingPayments.forEach(payment -> payment.changeStatus(event.status())); - // 실패 신규 엔티티 생성 - List newPayments = missingAppIds.stream() - .map(appId -> PaymentJpaEntity.ofFailure( - appId, + // 실패 신규 엔티티 생성 ( 배치 후속 처리 필요 ) + List newPayments = missingAppSchoolIds.stream() + .map(appSchoolId -> PaymentJpaEntity.ofFailure( + appSchoolId, event.orderId(), event.status(), event.totalAmount())) diff --git a/src/main/java/life/mosu/mosuserver/application/payment/PaymentService.java b/src/main/java/life/mosu/mosuserver/application/payment/PaymentService.java index 57d18e6a..e4601b19 100644 --- a/src/main/java/life/mosu/mosuserver/application/payment/PaymentService.java +++ b/src/main/java/life/mosu/mosuserver/application/payment/PaymentService.java @@ -3,7 +3,7 @@ import static life.mosu.mosuserver.domain.discount.DiscountPolicy.FIXED_QUANTITY; import java.util.List; -import life.mosu.mosuserver.domain.application.ApplicationJpaRepository; +import life.mosu.mosuserver.domain.applicationschool.ApplicationSchoolJpaRepository; import life.mosu.mosuserver.domain.discount.DiscountPolicy; import life.mosu.mosuserver.domain.payment.PaymentJpaEntity; import life.mosu.mosuserver.domain.payment.PaymentRepository; @@ -30,15 +30,13 @@ @RequiredArgsConstructor public class PaymentService { - private final ApplicationJpaRepository applicationJpaRepository; - + private final ApplicationSchoolJpaRepository applicationSchoolJpaRepository; private final TossPaymentClient tossPayment; private final OrderIdGenerator orderIdGenerator; private final PaymentRepository paymentRepository; private final ApplicationEventPublisher publisher; public PaymentPrepareResponse prepare(PreparePaymentRequest request) { - // TODO: 인원 수 체크 /** * 인원 수 redis에 동기화 -> 인원수가 넘어가면, application 까지 rollback */ @@ -53,20 +51,20 @@ public PaymentPrepareResponse prepare(PreparePaymentRequest request) { @Retryable(retryFor = {HttpStatusCodeException.class}) public void confirm(PaymentRequest request) { String orderId = request.orderId(); - List applicationIds = request.applicationIds(); + List applicationSchoolIds = request.applicationSchoolIds(); Integer amount = request.amount(); try { - checkApplicationsExist(request.applicationIds()); + checkApplicationsExist(applicationSchoolIds); verifyAmount(request.applicantSize(), request.amount()); checkDuplicatePayment(orderId); ConfirmTossPaymentResponse response = confirmPaymentWithToss(request); List paymentEntities = mapToPaymentEntities(request, response); verifyPaymentSuccess(paymentEntities); savePayments(paymentEntities); - publisher.publishEvent(PaymentEvent.ofSuccess(applicationIds, orderId, amount)); + publisher.publishEvent(PaymentEvent.ofSuccess(applicationSchoolIds, orderId, amount)); } catch (Exception ex) { log.error("error : {}", ex.getMessage()); - publisher.publishEvent(PaymentEvent.ofFailed(applicationIds, orderId, amount)); + publisher.publishEvent(PaymentEvent.ofFailed(applicationSchoolIds, orderId, amount)); throw ex; } } @@ -87,7 +85,7 @@ public void cancel(String paymentId, CancelPaymentRequest request) { private void checkApplicationsExist(List applicationIds) { - boolean existsAll = applicationJpaRepository.existsAllByIds(applicationIds, + boolean existsAll = applicationSchoolJpaRepository.existsAllByIds(applicationIds, applicationIds.size()); if (!existsAll) { log.warn("Application IDs not found: {}", applicationIds); @@ -137,7 +135,7 @@ private ConfirmTossPaymentResponse confirmPaymentWithToss(PaymentRequest request private List mapToPaymentEntities(PaymentRequest request, ConfirmTossPaymentResponse response) { - return request.applicationIds().stream() + return request.applicationSchoolIds().stream() .map(response::toEntity) .toList(); } diff --git a/src/main/java/life/mosu/mosuserver/application/school/SchoolQuotaCacheManager.java b/src/main/java/life/mosu/mosuserver/application/school/SchoolQuotaCacheManager.java new file mode 100644 index 00000000..5f6319ca --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/application/school/SchoolQuotaCacheManager.java @@ -0,0 +1,64 @@ +package life.mosu.mosuserver.application.school; + +import java.util.List; +import life.mosu.mosuserver.domain.school.SchoolApplicationProjection; +import life.mosu.mosuserver.domain.school.SchoolJpaEntity; +import life.mosu.mosuserver.domain.school.SchoolRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class SchoolQuotaCacheManager { + + private static final String REDIS_KEY_SCHOOL_MAX_CAPACITY = "school:max_capacity:"; + private static final String REDIS_KEY_SCHOOL_CURRENT_APPLICATIONS = "school:current_applications:"; + + private final RedisTemplate redisTemplate; + private final SchoolRepository schoolRepository; + + public void cacheSchoolMaxCapacities() { + List schools = schoolRepository.findAll(); + for (SchoolJpaEntity school : schools) { + String key = REDIS_KEY_SCHOOL_MAX_CAPACITY + school.getSchoolName(); + redisTemplate.opsForValue().set(key, school.getCapacity()); + } + } + + public void cacheSchoolCurrentApplicationCounts() { + List schoolApplications = schoolRepository.countBySchoolNameGroupBy(); + for (SchoolApplicationProjection projection : schoolApplications) { + String key = REDIS_KEY_SCHOOL_CURRENT_APPLICATIONS + projection.schoolName(); + redisTemplate.opsForValue().set(key, projection.count()); + } + } + + public Long getSchoolApplicationCounts(String schoolName) { + return redisTemplate.opsForValue() + .get(REDIS_KEY_SCHOOL_CURRENT_APPLICATIONS + schoolName); + } + + public Long getSchoolCapacities(String schoolName) { + return redisTemplate.opsForValue() + .get(REDIS_KEY_SCHOOL_MAX_CAPACITY + schoolName); + } + + public void increaseApplicationCount(String schoolName) { + String key = REDIS_KEY_SCHOOL_CURRENT_APPLICATIONS + schoolName; + redisTemplate.opsForValue().increment(key); + } + + public void decreaseApplicationCount(String schoolName) { + String key = REDIS_KEY_SCHOOL_CURRENT_APPLICATIONS + schoolName; + Long currentValue = redisTemplate.opsForValue().get(key); + if (currentValue != null && currentValue > 0) { + redisTemplate.opsForValue().decrement(key); + } + } + + public void preloadSchoolData() { + cacheSchoolMaxCapacities(); + cacheSchoolCurrentApplicationCounts(); + } +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/domain/admin/ApplicationQueryRepositoryImpl.java b/src/main/java/life/mosu/mosuserver/domain/admin/ApplicationQueryRepositoryImpl.java index e82d3554..984f0add 100644 --- a/src/main/java/life/mosu/mosuserver/domain/admin/ApplicationQueryRepositoryImpl.java +++ b/src/main/java/life/mosu/mosuserver/domain/admin/ApplicationQueryRepositoryImpl.java @@ -138,7 +138,7 @@ private JPAQuery baseQuery() { ) .from(applicationSchool) .leftJoin(application).on(applicationSchool.applicationId.eq(application.id)) - .leftJoin(payment).on(payment.applicationId.eq(application.id)) + .leftJoin(payment).on(payment.applicationSchoolId.eq(applicationSchool.id)) .leftJoin(user).on(application.userId.eq(user.id)) .leftJoin(profile).on(profile.userId.eq(user.id)) .leftJoin(admissionTicketImage) @@ -254,4 +254,4 @@ private String getAdmissionTicketImageUrl(String s3Key) { Duration.ofMinutes(s3Properties.getPresignedUrlExpirationMinutes()) ); } -} +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/domain/application/ApplicationJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/application/ApplicationJpaEntity.java index 982e3473..cdff38b7 100644 --- a/src/main/java/life/mosu/mosuserver/domain/application/ApplicationJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/application/ApplicationJpaEntity.java @@ -55,4 +55,4 @@ public ApplicationJpaEntity( this.agreedToRefundPolicy = agreedToRefundPolicy; } -} +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/domain/application/ApplicationJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/application/ApplicationJpaRepository.java index b7b2741e..da55fe09 100644 --- a/src/main/java/life/mosu/mosuserver/domain/application/ApplicationJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/application/ApplicationJpaRepository.java @@ -2,14 +2,8 @@ import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; public interface ApplicationJpaRepository extends JpaRepository { - @Query("SELECT COUNT(a) = :size FROM ApplicationJpaEntity a WHERE a.id IN :applicationIds") - boolean existsAllByIds(@Param("applicationIds") List applicationIds, - @Param("size") long size); - List findAllByUserId(Long userId); } diff --git a/src/main/java/life/mosu/mosuserver/domain/application/ApplicationSchoolJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/application/ApplicationSchoolJpaRepository.java deleted file mode 100644 index 4d8711b4..00000000 --- a/src/main/java/life/mosu/mosuserver/domain/application/ApplicationSchoolJpaRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package life.mosu.mosuserver.domain.application; - -import java.util.List; -import life.mosu.mosuserver.domain.applicationschool.ApplicationSchoolJpaEntity; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ApplicationSchoolJpaRepository extends - JpaRepository { - - boolean existsByUserIdAndSchoolId(Long userId, Long schoolId); - - List findAllByApplicationId(Long applicationId); - - boolean existsByApplicationId(Long applicationId); -} diff --git a/src/main/java/life/mosu/mosuserver/domain/applicationschool/ApplicationSchoolJpaRepository.java b/src/main/java/life/mosu/mosuserver/domain/applicationschool/ApplicationSchoolJpaRepository.java index a83d23b5..0c4755ce 100644 --- a/src/main/java/life/mosu/mosuserver/domain/applicationschool/ApplicationSchoolJpaRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/applicationschool/ApplicationSchoolJpaRepository.java @@ -1,16 +1,21 @@ package life.mosu.mosuserver.domain.applicationschool; -import java.util.Collection; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface ApplicationSchoolJpaRepository extends JpaRepository { - boolean existsByUserIdAndSchoolIdIn(Long userId, Collection schoolIds); + boolean existsByUserIdAndSchoolId(Long userId, Long schoolId); List findAllByApplicationId(Long applicationId); boolean existsByApplicationId(Long applicationId); + + @Query("SELECT COUNT(a) = :size FROM ApplicationSchoolJpaEntity a WHERE a.id IN :applicationSchoolIds") + boolean existsAllByIds(@Param("applicationSchoolIds") List applicationSchoolIds, + @Param("size") long size); } diff --git a/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaEntity.java index 16ea29e5..4dc7b6d0 100644 --- a/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/payment/PaymentJpaEntity.java @@ -26,8 +26,8 @@ public class PaymentJpaEntity extends BaseTimeEntity { @Column(name = "payment_id") private Long id; - @Column(name = "application_id") - private Long applicationId; + @Column(name = "application_school_id") + private Long applicationSchoolId; @Column(name = "payment_key") private String paymentKey; @@ -48,14 +48,14 @@ public class PaymentJpaEntity extends BaseTimeEntity { @Builder(access = AccessLevel.PRIVATE) private PaymentJpaEntity( - Long applicationId, + Long applicationSchoolId, String paymentKey, String orderId, PaymentAmountVO paymentAmount, PaymentStatus paymentStatus, PaymentMethod paymentMethod ) { - this.applicationId = applicationId; + this.applicationSchoolId = applicationSchoolId; this.paymentKey = paymentKey; this.orderId = orderId; this.paymentAmount = paymentAmount; @@ -64,7 +64,7 @@ private PaymentJpaEntity( } public static PaymentJpaEntity of( - Long applicationId, + Long applicationSchoolId, String paymentKey, String orderId, PaymentStatus paymentStatus, @@ -72,7 +72,7 @@ public static PaymentJpaEntity of( PaymentMethod paymentMethod ) { return PaymentJpaEntity.builder() - .applicationId(applicationId) + .applicationSchoolId(applicationSchoolId) .paymentKey(paymentKey) .orderId(orderId) .paymentStatus(paymentStatus) @@ -82,14 +82,14 @@ public static PaymentJpaEntity of( } public static PaymentJpaEntity ofFailure( - Long applicationId, + Long applicationSchoolId, String orderId, PaymentStatus paymentStatus, Integer totalAmount ) { PaymentAmountVO paymentAmount = PaymentAmountVO.ofFailure(totalAmount); return PaymentJpaEntity.builder() - .applicationId(applicationId) + .applicationSchoolId(applicationSchoolId) .orderId(orderId) .paymentStatus(paymentStatus) .paymentAmount(paymentAmount) diff --git a/src/main/java/life/mosu/mosuserver/domain/school/SchoolApplicationProjection.java b/src/main/java/life/mosu/mosuserver/domain/school/SchoolApplicationProjection.java new file mode 100644 index 00000000..86b24bfb --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/domain/school/SchoolApplicationProjection.java @@ -0,0 +1,5 @@ +package life.mosu.mosuserver.domain.school; + +public record SchoolApplicationProjection(Long schoolId, String schoolName, Long count) { + +} diff --git a/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java index 1583bdd0..241f29cd 100644 --- a/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java @@ -1,22 +1,29 @@ package life.mosu.mosuserver.domain.school; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.time.LocalDate; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import java.time.LocalDate; - @Entity @Getter -@Table(name="school") +@Table(name = "school") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class SchoolJpaEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name="school_id") + @Column(name = "school_id") private Long id; @Column(name = "school_name") @@ -34,4 +41,12 @@ public class SchoolJpaEntity { @Column(name = "capacity") private Long capacity; + public SchoolJpaEntity(String schoolName, Area area, AddressJpaVO address, LocalDate examDate, + Long capacity) { + this.schoolName = schoolName; + this.area = area; + this.address = address; + this.examDate = examDate; + this.capacity = capacity; + } } diff --git a/src/main/java/life/mosu/mosuserver/domain/school/SchoolRepository.java b/src/main/java/life/mosu/mosuserver/domain/school/SchoolRepository.java index cf2cb257..2959fb25 100644 --- a/src/main/java/life/mosu/mosuserver/domain/school/SchoolRepository.java +++ b/src/main/java/life/mosu/mosuserver/domain/school/SchoolRepository.java @@ -1,7 +1,16 @@ package life.mosu.mosuserver.domain.school; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; public interface SchoolRepository extends JpaRepository { -} + @Query(""" + SELECT new life.mosu.mosuserver.domain.school.SchoolApplicationProjection(s.id, s.schoolName, COUNT(a)) + FROM SchoolJpaEntity s + LEFT JOIN ApplicationSchoolJpaEntity a ON a.schoolId = s.id + GROUP BY s.id, s.schoolName + """) + List countBySchoolNameGroupBy(); +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/global/config/RedisConfig.java b/src/main/java/life/mosu/mosuserver/global/config/RedisConfig.java new file mode 100644 index 00000000..8f4f9e33 --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/config/RedisConfig.java @@ -0,0 +1,22 @@ +package life.mosu.mosuserver.global.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericToStringSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class RedisConfig { + + @Bean + public RedisTemplate redisTemplate( + RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Long.class)); + return redisTemplate; + } +} \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/global/runner/ApplicationSchoolPreWarmRunner.java b/src/main/java/life/mosu/mosuserver/global/runner/ApplicationSchoolPreWarmRunner.java new file mode 100644 index 00000000..2f01d66f --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/global/runner/ApplicationSchoolPreWarmRunner.java @@ -0,0 +1,19 @@ +package life.mosu.mosuserver.global.runner; + +import life.mosu.mosuserver.application.school.SchoolQuotaCacheManager; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@RequiredArgsConstructor +@Component +public class ApplicationSchoolPreWarmRunner { + + private final SchoolQuotaCacheManager schoolQuotaCacheManager; + + @EventListener(ApplicationReadyEvent.class) + public void preloadSchoolData() { + schoolQuotaCacheManager.preloadSchoolData(); + } +} diff --git a/src/main/java/life/mosu/mosuserver/infra/config/RetryConfig.java b/src/main/java/life/mosu/mosuserver/infra/config/RetryConfig.java new file mode 100644 index 00000000..baf55fee --- /dev/null +++ b/src/main/java/life/mosu/mosuserver/infra/config/RetryConfig.java @@ -0,0 +1,10 @@ +package life.mosu.mosuserver.infra.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.retry.annotation.EnableRetry; + +@Configuration +@EnableRetry +public class RetryConfig { + +} diff --git a/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PaymentRequest.java b/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PaymentRequest.java index 8c69a6ce..08c744f5 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PaymentRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PaymentRequest.java @@ -5,7 +5,7 @@ import life.mosu.mosuserver.infra.payment.dto.TossPaymentPayload; public record PaymentRequest( - @NotNull List applicationIds, + @NotNull List applicationSchoolIds, @NotNull String paymentKey, @NotNull String orderId, @NotNull Integer amount @@ -16,6 +16,6 @@ public TossPaymentPayload toPayload() { } public int applicantSize() { - return applicationIds.size(); + return applicationSchoolIds.size(); } } \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PreparePaymentRequest.java b/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PreparePaymentRequest.java index 422b5a30..1a956cca 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PreparePaymentRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/payment/dto/PreparePaymentRequest.java @@ -15,8 +15,8 @@ public int getSize() { } public record Item( - @NotNull(message = "applicationId는 필수입니다.") - Long applicationId, + @NotNull(message = "applicationSchoolId는 필수입니다.") + Long applicationSchoolId, @NotNull(message = "name은 필수입니다.") String name