diff --git a/src/main/java/com/back/b2st/domain/auth/client/KakaoApiClientImpl.java b/src/main/java/com/back/b2st/domain/auth/client/KakaoApiClientImpl.java index a0ee851bb..9c915c702 100644 --- a/src/main/java/com/back/b2st/domain/auth/client/KakaoApiClientImpl.java +++ b/src/main/java/com/back/b2st/domain/auth/client/KakaoApiClientImpl.java @@ -163,7 +163,8 @@ private KakaoIdTokenPayload parseIdToken(String idToken) { claims.getSubject(), // 카카오 회원번호 claims.getIssueTime() != null ? claims.getIssueTime().getTime() / 1000 : null, claims.getExpirationTime() != null ? claims.getExpirationTime().getTime() / 1000 : null, - claims.getDateClaim("auth_time") != null ? + claims.getDateClaim("auth_time") != null + ? claims.getDateClaim("auth_time").getTime() / 1000 : null, claims.getStringClaim("nonce"), claims.getStringClaim("nickname"), diff --git a/src/main/java/com/back/b2st/domain/auth/service/AuthService.java b/src/main/java/com/back/b2st/domain/auth/service/AuthService.java index f31319f6d..91a4d38e3 100644 --- a/src/main/java/com/back/b2st/domain/auth/service/AuthService.java +++ b/src/main/java/com/back/b2st/domain/auth/service/AuthService.java @@ -123,14 +123,20 @@ public KakaoAuthorizeUrlRes generateKakaoAuthorizeUrl() { // 카카오 로그인 URL 새성 String authrizeUrl = String.format( - "https://kauth.kakao.com/oauth/authorize" + - "?client_id=%s" + - "&redirect_uri=%s" + - "&response_type=code" + - "&scope=openid%%20profile_nickname%%20account_email" + // URL 인코딩 - "&nonce=%s" + - "&state=%s", - kakaoClientId, kakaoRedirectUri, nonce, state); + "https://kauth.kakao.com/oauth/authorize" + + + "?client_id=%s" + + + "&redirect_uri=%s" + + + "&response_type=code" + + + "&scope=openid%%20profile_nickname%%20account_email" + + // URL 인코딩 + "&nonce=%s" + + + "&state=%s", + kakaoClientId, kakaoRedirectUri, nonce, state); return new KakaoAuthorizeUrlRes(authrizeUrl, state, nonce); } @@ -155,7 +161,7 @@ public TokenInfo reissue(String accessToken, String refreshToken) { // Redis 업데이트 saveRefreshToken(email, newToken.refreshToken(), - storedToken.getFamily(), storedToken.getGeneration() + 1); + storedToken.getFamily(), storedToken.getGeneration() + 1); return newToken; } @@ -246,10 +252,10 @@ private void validateWithdrawalPeriod(Member member) { // 다른 계정에 연동된 카카오 계정이 아닌지 private void validateKakaoNotLinkedToOther(String kakaoId, Long currentMemberId) { memberRepository.findByProviderId(kakaoId) - .filter(linked -> !linked.getId().equals(currentMemberId)) - .ifPresent(linked -> { - throw new BusinessException(AuthErrorCode.OAUTH_ALREADY_LINKED); - }); + .filter(linked -> !linked.getId().equals(currentMemberId)) + .ifPresent(linked -> { + throw new BusinessException(AuthErrorCode.OAUTH_ALREADY_LINKED); + }); } private void validateNonce(String nonce) { @@ -286,22 +292,22 @@ private void validateTokenNotReused(RefreshToken storedToken, String providedTok private Member findMemberById(Long memberId) { return memberRepository.findById(memberId) - .orElseThrow(() -> new BusinessException(MemberErrorCode.MEMBER_NOT_FOUND)); + .orElseThrow(() -> new BusinessException(MemberErrorCode.MEMBER_NOT_FOUND)); } private Member findMemberByEmail(String email) { return memberRepository.findByEmail(email) - .orElseThrow(() -> new BusinessException(MemberErrorCode.MEMBER_NOT_FOUND)); + .orElseThrow(() -> new BusinessException(MemberErrorCode.MEMBER_NOT_FOUND)); } private RefreshToken findStoredRefreshToken(String email) { return refreshTokenRepository.findById(email) - .orElseThrow(() -> new BusinessException(AuthErrorCode.INVALID_TOKEN)); + .orElseThrow(() -> new BusinessException(AuthErrorCode.INVALID_TOKEN)); } private WithdrawalRecoveryToken findRecoveryToken(String token) { return recoveryRepository.findById(token) - .orElseThrow(() -> new BusinessException(AuthErrorCode.RECOVERY_TOKEN_NOT_FOUND)); + .orElseThrow(() -> new BusinessException(AuthErrorCode.RECOVERY_TOKEN_NOT_FOUND)); } private Optional findMemberByProviderId(String providerId) { @@ -320,13 +326,13 @@ private KakaoIdTokenPayload fetchKakaoUserInfo(String code) { // 로그인 리퀘 인증 private Authentication authenticateWithEmailPassword(LoginReq request) { UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(request.email(), - request.password()); + request.password()); return authenticationManagerBuilder.getObject().authenticate(authToken); } // 인증 객체서 유저 엔티티 추출 private Member extractMemberFromAuthentication(Authentication authentication) { - CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + CustomUserDetails userDetails = (CustomUserDetails)authentication.getPrincipal(); return userDetails.getMember(); } @@ -355,8 +361,8 @@ private Member findOrCreateKakaoMember(KakaoIdTokenPayload payload) { } // 이메일로 가입된 회원 확인 return memberRepository.findByEmail(email) - .map(existing -> linkKakaoToExistingMember(existing, kakaoId)) - .orElseGet(() -> createNewKakaoMember(email, kakaoId, nickname)); + .map(existing -> linkKakaoToExistingMember(existing, kakaoId)) + .orElseGet(() -> createNewKakaoMember(email, kakaoId, nickname)); } // 이메일 연동 @@ -379,17 +385,17 @@ private Member createNewKakaoMember(String email, String kakaoId, String nicknam String sanitizedNickname = NicknameUtils.sanitize(nickname, defaultKakaoNickname); Member member = Member.builder() - .email(email) - .password(null) - .name(sanitizedNickname) - .phone(null) - .birth(null) - .role(Member.Role.MEMBER) - .provider(Member.Provider.KAKAO) - .providerId(kakaoId) - .isEmailVerified(true) - .isIdentityVerified(false) - .build(); + .email(email) + .password(null) + .name(sanitizedNickname) + .phone(null) + .birth(null) + .role(Member.Role.MEMBER) + .provider(Member.Provider.KAKAO) + .providerId(kakaoId) + .isEmailVerified(true) + .isIdentityVerified(false) + .build(); Member saved = memberRepository.save(member); log.info("[Kakao] 신규 회원 생성: MemberID={}, KakaoID={}", saved.getId(), kakaoId); return saved; @@ -399,10 +405,10 @@ private Member createNewKakaoMember(String email, String kakaoId, String nicknam private TokenInfo generateTokenForMember(Member member) { CustomUserDetails userDetails = new CustomUserDetails(member); UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken( - userDetails, null, userDetails.getAuthorities()); + userDetails, null, userDetails.getAuthorities()); TokenInfo tokenInfo = jwtTokenProvider.generateToken(authToken); saveRefreshToken(member.getEmail(), tokenInfo.refreshToken(), - UUID.randomUUID().toString(), 1L); + UUID.randomUUID().toString(), 1L); return tokenInfo; } @@ -415,10 +421,10 @@ private void saveRefreshToken(String email, String token, String family, Long ge private String createRecoveryToken(String email, Long memberId) { String token = UUID.randomUUID().toString(); WithdrawalRecoveryToken recoveryToken = WithdrawalRecoveryToken.builder() - .token(token) - .email(email) - .memberId(memberId) - .build(); + .token(token) + .email(email) + .memberId(memberId) + .build(); recoveryRepository.save(recoveryToken); return token; } diff --git a/src/main/java/com/back/b2st/domain/email/entity/EmailVerification.java b/src/main/java/com/back/b2st/domain/email/entity/EmailVerification.java index cbeadaffe..5bebead3a 100644 --- a/src/main/java/com/back/b2st/domain/email/entity/EmailVerification.java +++ b/src/main/java/com/back/b2st/domain/email/entity/EmailVerification.java @@ -28,9 +28,8 @@ public EmailVerification incrementAttempt() { .attemptCount(this.attemptCount + 1) .build(); } - + public boolean isMaxAttemptExceeded() { return this.attemptCount >= 5; } - } diff --git a/src/main/java/com/back/b2st/domain/lottery/entry/dto/response/SectionLayoutRes.java b/src/main/java/com/back/b2st/domain/lottery/entry/dto/response/SectionLayoutRes.java index 92869ef51..fd0d36f1f 100644 --- a/src/main/java/com/back/b2st/domain/lottery/entry/dto/response/SectionLayoutRes.java +++ b/src/main/java/com/back/b2st/domain/lottery/entry/dto/response/SectionLayoutRes.java @@ -46,8 +46,8 @@ public static List from(List seats) { )) .toList(); - return new SectionLayoutRes(sectionName, grades); - }) + return new SectionLayoutRes(sectionName, grades); + }) .toList(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/lottery/entry/repository/LotteryEntryRepository.java b/src/main/java/com/back/b2st/domain/lottery/entry/repository/LotteryEntryRepository.java index e4a5eae5f..922d9d725 100644 --- a/src/main/java/com/back/b2st/domain/lottery/entry/repository/LotteryEntryRepository.java +++ b/src/main/java/com/back/b2st/domain/lottery/entry/repository/LotteryEntryRepository.java @@ -14,17 +14,20 @@ public interface LotteryEntryRepository extends JpaRepository { boolean existsByMemberIdAndPerformanceIdAndScheduleId(Long memberId, Long performanceId, Long scheduleId); - @Query(""" - SELECT new com.back.b2st.domain.lottery.entry.dto.response.AppliedLotteryInfo( - le.uuid, p.title, ps.startAt, ps.roundNo, le.grade, le.quantity, le.status - ) - FROM LotteryEntry le - JOIN Performance p ON le.performanceId = p.performanceId - JOIN PerformanceSchedule ps ON le.scheduleId = ps.performanceScheduleId - WHERE le.memberId = :memberId - AND le.createdAt >= :month - ORDER BY le.createdAt DESC - """) + @Query( + """ + SELECT new com.back.b2st.domain.lottery.entry.dto.response.AppliedLotteryInfo( + le.uuid, p.title, ps.startAt, ps.roundNo, le.grade, le.quantity, le.status + ) + FROM LotteryEntry le + JOIN Performance p ON le.performanceId = p.performanceId + JOIN PerformanceSchedule ps ON le.scheduleId = ps.performanceScheduleId + WHERE le.memberId = :memberId + AND le.createdAt >= :month + ORDER BY le.createdAt DESC + """ + + ) Slice findAppliedLotteryByMemberId( @Param("memberId") Long memberId, @Param("month") LocalDateTime month, diff --git a/src/main/java/com/back/b2st/domain/notification/listener/NotificationEmailListener.java b/src/main/java/com/back/b2st/domain/notification/listener/NotificationEmailListener.java index d29ed8e77..9c5c04f8f 100644 --- a/src/main/java/com/back/b2st/domain/notification/listener/NotificationEmailListener.java +++ b/src/main/java/com/back/b2st/domain/notification/listener/NotificationEmailListener.java @@ -1,10 +1,12 @@ package com.back.b2st.domain.notification.listener; +import java.util.Map; + import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.event.TransactionalEventListener; +import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; import com.back.b2st.domain.email.service.EmailSender; import com.back.b2st.domain.member.entity.Member; @@ -14,8 +16,6 @@ import com.back.b2st.domain.performance.entity.Performance; import com.back.b2st.domain.performance.repository.PerformanceRepository; -import java.util.Map; - import lombok.RequiredArgsConstructor; @Component diff --git a/src/main/java/com/back/b2st/domain/payment/dto/request/PaymentConfirmReq.java b/src/main/java/com/back/b2st/domain/payment/dto/request/PaymentConfirmReq.java index 68e35da05..7a83b4fc1 100644 --- a/src/main/java/com/back/b2st/domain/payment/dto/request/PaymentConfirmReq.java +++ b/src/main/java/com/back/b2st/domain/payment/dto/request/PaymentConfirmReq.java @@ -1,7 +1,7 @@ package com.back.b2st.domain.payment.dto.request; -import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; public record PaymentConfirmReq( @NotBlank String orderId, diff --git a/src/main/java/com/back/b2st/domain/payment/repository/PaymentRepository.java b/src/main/java/com/back/b2st/domain/payment/repository/PaymentRepository.java index a8b1909c0..1338fc502 100644 --- a/src/main/java/com/back/b2st/domain/payment/repository/PaymentRepository.java +++ b/src/main/java/com/back/b2st/domain/payment/repository/PaymentRepository.java @@ -5,8 +5,8 @@ import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import com.back.b2st.domain.payment.entity.DomainType; diff --git a/src/main/java/com/back/b2st/domain/payment/service/TradePaymentFinalizer.java b/src/main/java/com/back/b2st/domain/payment/service/TradePaymentFinalizer.java index 8186aa7bc..5d332026c 100644 --- a/src/main/java/com/back/b2st/domain/payment/service/TradePaymentFinalizer.java +++ b/src/main/java/com/back/b2st/domain/payment/service/TradePaymentFinalizer.java @@ -3,10 +3,11 @@ import java.time.Clock; import java.time.LocalDateTime; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import org.springframework.context.ApplicationEventPublisher; +import com.back.b2st.domain.notification.event.NotificationEmailEvent; import com.back.b2st.domain.payment.entity.DomainType; import com.back.b2st.domain.payment.entity.Payment; import com.back.b2st.domain.payment.error.PaymentErrorCode; @@ -18,7 +19,6 @@ import com.back.b2st.domain.trade.entity.TradeStatus; import com.back.b2st.domain.trade.entity.TradeType; import com.back.b2st.domain.trade.error.TradeErrorCode; -import com.back.b2st.domain.notification.event.NotificationEmailEvent; import com.back.b2st.global.error.exception.BusinessException; import jakarta.persistence.EntityManager; @@ -30,12 +30,11 @@ @RequiredArgsConstructor public class TradePaymentFinalizer implements PaymentFinalizer { - @PersistenceContext - private EntityManager entityManager; - private final TicketService ticketService; private final Clock clock; private final ApplicationEventPublisher eventPublisher; + @PersistenceContext + private EntityManager entityManager; @Override public boolean supports(DomainType domainType) { diff --git a/src/main/java/com/back/b2st/domain/performance/controller/PerformanceController.java b/src/main/java/com/back/b2st/domain/performance/controller/PerformanceController.java index 40a2ac22a..5d5df1a18 100644 --- a/src/main/java/com/back/b2st/domain/performance/controller/PerformanceController.java +++ b/src/main/java/com/back/b2st/domain/performance/controller/PerformanceController.java @@ -1,10 +1,5 @@ package com.back.b2st.domain.performance.controller; -import com.back.b2st.domain.performance.dto.response.PerformanceDetailRes; -import com.back.b2st.domain.performance.dto.response.PerformanceListRes; -import com.back.b2st.domain.performance.service.PerformanceService; -import com.back.b2st.global.common.BaseResponse; - import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; @@ -14,6 +9,11 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import com.back.b2st.domain.performance.dto.response.PerformanceDetailRes; +import com.back.b2st.domain.performance.dto.response.PerformanceListRes; +import com.back.b2st.domain.performance.service.PerformanceService; +import com.back.b2st.global.common.BaseResponse; + import lombok.RequiredArgsConstructor; @RestController diff --git a/src/main/java/com/back/b2st/domain/performance/repository/PerformanceRepository.java b/src/main/java/com/back/b2st/domain/performance/repository/PerformanceRepository.java index 9bd749d32..7074c9e63 100644 --- a/src/main/java/com/back/b2st/domain/performance/repository/PerformanceRepository.java +++ b/src/main/java/com/back/b2st/domain/performance/repository/PerformanceRepository.java @@ -1,8 +1,5 @@ package com.back.b2st.domain.performance.repository; -import com.back.b2st.domain.performance.entity.Performance; -import com.back.b2st.domain.performance.entity.PerformanceStatus; - import java.util.Optional; import org.springframework.data.domain.Page; @@ -12,6 +9,8 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import com.back.b2st.domain.performance.entity.Performance; +import com.back.b2st.domain.performance.entity.PerformanceStatus; public interface PerformanceRepository extends JpaRepository { diff --git a/src/main/java/com/back/b2st/domain/performance/service/PerformanceService.java b/src/main/java/com/back/b2st/domain/performance/service/PerformanceService.java index 0b3f406e5..e3093df03 100644 --- a/src/main/java/com/back/b2st/domain/performance/service/PerformanceService.java +++ b/src/main/java/com/back/b2st/domain/performance/service/PerformanceService.java @@ -1,5 +1,10 @@ package com.back.b2st.domain.performance.service; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import com.back.b2st.domain.performance.dto.response.PerformanceDetailRes; import com.back.b2st.domain.performance.dto.response.PerformanceListRes; import com.back.b2st.domain.performance.entity.PerformanceStatus; @@ -7,11 +12,6 @@ import com.back.b2st.global.error.code.CommonErrorCode; import com.back.b2st.global.error.exception.BusinessException; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import lombok.RequiredArgsConstructor; @Service diff --git a/src/main/java/com/back/b2st/domain/performanceschedule/controller/PerformanceScheduleController.java b/src/main/java/com/back/b2st/domain/performanceschedule/controller/PerformanceScheduleController.java index 2b9a1c8ee..49614197e 100644 --- a/src/main/java/com/back/b2st/domain/performanceschedule/controller/PerformanceScheduleController.java +++ b/src/main/java/com/back/b2st/domain/performanceschedule/controller/PerformanceScheduleController.java @@ -4,7 +4,12 @@ import jakarta.validation.Valid; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import com.back.b2st.domain.performanceschedule.dto.request.PerformanceScheduleCreateReq; import com.back.b2st.domain.performanceschedule.dto.response.PerformanceScheduleCreateRes; diff --git a/src/main/java/com/back/b2st/domain/reservation/controller/ReservationApi.java b/src/main/java/com/back/b2st/domain/reservation/controller/ReservationApi.java index 30ac9e5cf..63b6312d8 100644 --- a/src/main/java/com/back/b2st/domain/reservation/controller/ReservationApi.java +++ b/src/main/java/com/back/b2st/domain/reservation/controller/ReservationApi.java @@ -187,4 +187,4 @@ BaseResponse> getMyReservationsDetail( @Parameter(hidden = true) UserPrincipal user ); -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/reservation/controller/ReservationController.java b/src/main/java/com/back/b2st/domain/reservation/controller/ReservationController.java index 546da468d..bae3a74dd 100644 --- a/src/main/java/com/back/b2st/domain/reservation/controller/ReservationController.java +++ b/src/main/java/com/back/b2st/domain/reservation/controller/ReservationController.java @@ -99,4 +99,4 @@ public BaseResponse> getMyReservationsDetail( List reservations = reservationService.getMyReservationsDetail(memberId); return BaseResponse.success(reservations); } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/reservation/entity/ReservationStatus.java b/src/main/java/com/back/b2st/domain/reservation/entity/ReservationStatus.java index 265ae6b9f..a6b565718 100644 --- a/src/main/java/com/back/b2st/domain/reservation/entity/ReservationStatus.java +++ b/src/main/java/com/back/b2st/domain/reservation/entity/ReservationStatus.java @@ -19,4 +19,4 @@ public boolean canCancel() { public boolean canExpire() { return this == CREATED; } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/reservation/repository/ReservationRepository.java b/src/main/java/com/back/b2st/domain/reservation/repository/ReservationRepository.java index ec95e33cc..471b13821 100644 --- a/src/main/java/com/back/b2st/domain/reservation/repository/ReservationRepository.java +++ b/src/main/java/com/back/b2st/domain/reservation/repository/ReservationRepository.java @@ -3,16 +3,16 @@ import java.util.List; import java.util.Optional; -import org.springframework.data.jpa.repository.Lock; +import jakarta.persistence.LockModeType; + import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import com.back.b2st.domain.reservation.entity.Reservation; -import jakarta.persistence.LockModeType; - @Repository public interface ReservationRepository extends JpaRepository, ReservationRepositoryCustom { diff --git a/src/main/java/com/back/b2st/domain/scheduleseat/controller/ScheduleSeatTestController.java b/src/main/java/com/back/b2st/domain/scheduleseat/controller/ScheduleSeatTestController.java index 6c07ea7e9..0d169154d 100644 --- a/src/main/java/com/back/b2st/domain/scheduleseat/controller/ScheduleSeatTestController.java +++ b/src/main/java/com/back/b2st/domain/scheduleseat/controller/ScheduleSeatTestController.java @@ -34,4 +34,4 @@ public BaseResponse forceReleaseSeat( return BaseResponse.success(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/scheduleseat/entity/ScheduleSeat.java b/src/main/java/com/back/b2st/domain/scheduleseat/entity/ScheduleSeat.java index fb4ecf9b4..ce0a255f3 100644 --- a/src/main/java/com/back/b2st/domain/scheduleseat/entity/ScheduleSeat.java +++ b/src/main/java/com/back/b2st/domain/scheduleseat/entity/ScheduleSeat.java @@ -91,4 +91,4 @@ public void release() { public boolean isHold() { return this.status == SeatStatus.HOLD; } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/scheduleseat/error/ScheduleSeatErrorCode.java b/src/main/java/com/back/b2st/domain/scheduleseat/error/ScheduleSeatErrorCode.java index 92c1d945f..185ad2390 100644 --- a/src/main/java/com/back/b2st/domain/scheduleseat/error/ScheduleSeatErrorCode.java +++ b/src/main/java/com/back/b2st/domain/scheduleseat/error/ScheduleSeatErrorCode.java @@ -16,7 +16,7 @@ public enum ScheduleSeatErrorCode implements ErrorCode { SEAT_ALREADY_HOLD(HttpStatus.CONFLICT, "R002", "이미 다른 사용자가 선택한 좌석입니다."), SEAT_ALREADY_SOLD(HttpStatus.CONFLICT, "R003", "이미 판매된 좌석입니다."), SEAT_NOT_HOLD(HttpStatus.CONFLICT, "R014", "HOLD 상태의 좌석만 처리할 수 있습니다."), - + SEAT_HOLD_FORBIDDEN(HttpStatus.FORBIDDEN, "R012", "본인이 선점한 좌석이 아닙니다."), SEAT_HOLD_EXPIRED(HttpStatus.GONE, "R013", "좌석 선점 시간이 만료되었습니다."), diff --git a/src/main/java/com/back/b2st/domain/scheduleseat/scheduler/ScheduleSeatScheduler.java b/src/main/java/com/back/b2st/domain/scheduleseat/scheduler/ScheduleSeatScheduler.java index 3ed9d8725..fd86bf9e4 100644 --- a/src/main/java/com/back/b2st/domain/scheduleseat/scheduler/ScheduleSeatScheduler.java +++ b/src/main/java/com/back/b2st/domain/scheduleseat/scheduler/ScheduleSeatScheduler.java @@ -23,4 +23,4 @@ public void releaseExpiredHolds() { log.info("[HOLD 만료 복구] 복구된 좌석 수={}", updated); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/scheduleseat/service/SeatHoldTokenService.java b/src/main/java/com/back/b2st/domain/scheduleseat/service/SeatHoldTokenService.java index d305b84c1..01bb07087 100644 --- a/src/main/java/com/back/b2st/domain/scheduleseat/service/SeatHoldTokenService.java +++ b/src/main/java/com/back/b2st/domain/scheduleseat/service/SeatHoldTokenService.java @@ -54,4 +54,4 @@ public void remove(Long scheduleId, Long seatId) { private String getKey(Long scheduleId, Long seatId) { return "seat:hold:" + scheduleId + ":" + seatId; } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/seat/grade/entity/SeatGradeType.java b/src/main/java/com/back/b2st/domain/seat/grade/entity/SeatGradeType.java index 7b2506a6e..26a3614a9 100644 --- a/src/main/java/com/back/b2st/domain/seat/grade/entity/SeatGradeType.java +++ b/src/main/java/com/back/b2st/domain/seat/grade/entity/SeatGradeType.java @@ -24,4 +24,4 @@ public static SeatGradeType fromString(String grade) { throw new BusinessException(SeatGradeErrorCode.INVALID_GRADE_TYPE); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/seat/grade/service/SeatGradeService.java b/src/main/java/com/back/b2st/domain/seat/grade/service/SeatGradeService.java index 16aa00f29..768f85a5f 100644 --- a/src/main/java/com/back/b2st/domain/seat/grade/service/SeatGradeService.java +++ b/src/main/java/com/back/b2st/domain/seat/grade/service/SeatGradeService.java @@ -50,4 +50,4 @@ private void validatePerformance(Long performanceId) { } } -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/ticket/error/TicketErrorCode.java b/src/main/java/com/back/b2st/domain/ticket/error/TicketErrorCode.java index aaa8a387f..cafb9ad8a 100644 --- a/src/main/java/com/back/b2st/domain/ticket/error/TicketErrorCode.java +++ b/src/main/java/com/back/b2st/domain/ticket/error/TicketErrorCode.java @@ -22,4 +22,4 @@ public enum TicketErrorCode implements ErrorCode { private final HttpStatus status; private final String code; private final String message; -} \ No newline at end of file +} diff --git a/src/main/java/com/back/b2st/domain/trade/controller/TradeRequestController.java b/src/main/java/com/back/b2st/domain/trade/controller/TradeRequestController.java index 2f42a7ba6..52fa62684 100644 --- a/src/main/java/com/back/b2st/domain/trade/controller/TradeRequestController.java +++ b/src/main/java/com/back/b2st/domain/trade/controller/TradeRequestController.java @@ -79,8 +79,10 @@ public ResponseEntity>> getTradeRequests( @Operation( summary = "교환/양도 신청 수락 (티켓 소유권 이전)", - description = "교환/양도 신청을 수락하고 티켓 소유권을 이전합니다.\n\n" + - "- TRANSFER: 신청자에게 티켓 양도\n" + + description = "교환/양도 신청을 수락하고 티켓 소유권을 이전합니다.\n\n" + + + "- TRANSFER: 신청자에게 티켓 양도\n" + + "- EXCHANGE: 서로의 티켓을 교환" ) @PatchMapping("/trade-requests/{tradeRequestId}/accept") diff --git a/src/main/java/com/back/b2st/domain/trade/entity/Trade.java b/src/main/java/com/back/b2st/domain/trade/entity/Trade.java index 41612b6ef..f2c8d483b 100644 --- a/src/main/java/com/back/b2st/domain/trade/entity/Trade.java +++ b/src/main/java/com/back/b2st/domain/trade/entity/Trade.java @@ -2,9 +2,9 @@ import java.time.LocalDateTime; -import com.back.b2st.global.jpa.entity.BaseEntity; -import com.back.b2st.global.error.exception.BusinessException; import com.back.b2st.domain.trade.error.TradeErrorCode; +import com.back.b2st.global.error.exception.BusinessException; +import com.back.b2st.global.jpa.entity.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -23,7 +23,7 @@ import lombok.NoArgsConstructor; @Entity - @Table(name = "trade", +@Table(name = "trade", uniqueConstraints = @UniqueConstraint( name = "uk_trade_ticket_active", columnNames = {"ticket_id", "status"} diff --git a/src/main/java/com/back/b2st/domain/trade/repository/TradeRepository.java b/src/main/java/com/back/b2st/domain/trade/repository/TradeRepository.java index e0ee03897..8d1383245 100644 --- a/src/main/java/com/back/b2st/domain/trade/repository/TradeRepository.java +++ b/src/main/java/com/back/b2st/domain/trade/repository/TradeRepository.java @@ -20,7 +20,9 @@ public interface TradeRepository extends JpaRepository { Page findAllByTypeAndStatus(TradeType type, TradeStatus status, Pageable pageable); - List findAllByBuyerIdAndTypeAndStatusOrderByPurchasedAtDesc(Long buyerId, TradeType type, TradeStatus status); + List findAllByBuyerIdAndTypeAndStatusOrderByPurchasedAtDesc(Long buyerId, TradeType type, + TradeStatus status); - List findAllByMemberIdAndTypeAndStatusOrderByPurchasedAtDesc(Long memberId, TradeType type, TradeStatus status); + List findAllByMemberIdAndTypeAndStatusOrderByPurchasedAtDesc(Long memberId, TradeType type, + TradeStatus status); } diff --git a/src/main/java/com/back/b2st/domain/trade/service/TradeRequestService.java b/src/main/java/com/back/b2st/domain/trade/service/TradeRequestService.java index b00b92873..e3d9f173a 100644 --- a/src/main/java/com/back/b2st/domain/trade/service/TradeRequestService.java +++ b/src/main/java/com/back/b2st/domain/trade/service/TradeRequestService.java @@ -7,11 +7,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.back.b2st.domain.notification.event.NotificationEmailEvent; import com.back.b2st.domain.ticket.entity.Ticket; import com.back.b2st.domain.ticket.entity.TicketStatus; import com.back.b2st.domain.ticket.error.TicketErrorCode; import com.back.b2st.domain.ticket.service.TicketService; -import com.back.b2st.domain.notification.event.NotificationEmailEvent; import com.back.b2st.domain.trade.dto.request.CreateTradeRequestReq; import com.back.b2st.domain.trade.dto.response.TradeRequestRes; import com.back.b2st.domain.trade.entity.Trade; @@ -184,7 +184,8 @@ private TradeRequest findTradeRequestById(Long tradeRequestId) { } private TradeRequest findTradeRequestByIdWithLock(Long tradeRequestId) { - TradeRequest tradeRequest = entityManager.find(TradeRequest.class, tradeRequestId, LockModeType.PESSIMISTIC_WRITE); + TradeRequest tradeRequest = entityManager.find(TradeRequest.class, tradeRequestId, + LockModeType.PESSIMISTIC_WRITE); if (tradeRequest == null) { throw new BusinessException(TradeErrorCode.TRADE_REQUEST_NOT_FOUND); } diff --git a/src/main/java/com/back/b2st/domain/venue/venue/controller/VenueController.java b/src/main/java/com/back/b2st/domain/venue/venue/controller/VenueController.java index c43c9e27b..6286ae5a7 100644 --- a/src/main/java/com/back/b2st/domain/venue/venue/controller/VenueController.java +++ b/src/main/java/com/back/b2st/domain/venue/venue/controller/VenueController.java @@ -1,14 +1,15 @@ package com.back.b2st.domain.venue.venue.controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import com.back.b2st.domain.venue.venue.dto.response.VenueRes; import com.back.b2st.domain.venue.venue.service.VenueService; import com.back.b2st.global.common.BaseResponse; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor diff --git a/src/main/java/com/back/b2st/domain/venue/venue/service/VenueService.java b/src/main/java/com/back/b2st/domain/venue/venue/service/VenueService.java index 74aeb33a9..7dac7f1a7 100644 --- a/src/main/java/com/back/b2st/domain/venue/venue/service/VenueService.java +++ b/src/main/java/com/back/b2st/domain/venue/venue/service/VenueService.java @@ -1,5 +1,8 @@ package com.back.b2st.domain.venue.venue.service; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import com.back.b2st.domain.venue.venue.dto.response.VenueRes; import com.back.b2st.domain.venue.venue.repository.VenueRepository; import com.back.b2st.global.error.code.CommonErrorCode; @@ -7,9 +10,6 @@ import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -19,10 +19,10 @@ public class VenueService { public VenueRes getVenue(Long venueId) { return venueRepository.findById(venueId) - .map(VenueRes::from) - .orElseThrow(() -> new BusinessException( - CommonErrorCode.NOT_FOUND, - "venueId=" + venueId - )); + .map(VenueRes::from) + .orElseThrow(() -> new BusinessException( + CommonErrorCode.NOT_FOUND, + "venueId=" + venueId + )); } } diff --git a/src/main/resources/templates/email/notification.html b/src/main/resources/templates/email/notification.html index 0dbf15f17..61a8d863a 100644 --- a/src/main/resources/templates/email/notification.html +++ b/src/main/resources/templates/email/notification.html @@ -2,7 +2,7 @@ - + [TT] 알림