diff --git a/src/main/java/com/quickpick/ureca/V2/common/init/InitControllerV2.java b/src/main/java/com/quickpick/ureca/V2/common/init/InitControllerV2.java index f83f4de..2883718 100644 --- a/src/main/java/com/quickpick/ureca/V2/common/init/InitControllerV2.java +++ b/src/main/java/com/quickpick/ureca/V2/common/init/InitControllerV2.java @@ -16,7 +16,7 @@ @RestController @RequiredArgsConstructor -@RequestMapping("/init") +@RequestMapping("/init2") public class InitControllerV2 { private final TicketRepositoryV2 ticketRepository; diff --git a/src/main/java/com/quickpick/ureca/v1/common/init/InitService.java b/src/main/java/com/quickpick/ureca/v1/common/init/InitService.java index 2a2ab55..f5d3910 100644 --- a/src/main/java/com/quickpick/ureca/v1/common/init/InitService.java +++ b/src/main/java/com/quickpick/ureca/v1/common/init/InitService.java @@ -1,6 +1,6 @@ package com.quickpick.ureca.v1.common.init; -import com.quickpick.ureca.v1.ticket.domain.Ticket; +import com.quickpick.ureca.v1.ticket.domain.TicketV1; import com.quickpick.ureca.v1.ticket.repository.TicketRepositoryV1; import com.quickpick.ureca.v1.user.domain.User; import com.quickpick.ureca.v1.user.repository.UserRepositoryV1; @@ -23,7 +23,7 @@ public String initialize(int ticketCount, int userCount, LocalDateTime startDate ticketRepository.deleteAll(); userRepositoryV1.deleteAll(); - Ticket ticket = Ticket.builder() + TicketV1 ticket = TicketV1.builder() .name("테스트 티켓") .quantity(ticketCount) .startDate(startDate != null ? startDate : LocalDateTime.now().plusDays(1)) diff --git a/src/main/java/com/quickpick/ureca/v1/reserve/dto/TicketReserveResponseV1.java b/src/main/java/com/quickpick/ureca/v1/reserve/dto/TicketReserveResponseV1.java index 3df44e1..a4d898b 100644 --- a/src/main/java/com/quickpick/ureca/v1/reserve/dto/TicketReserveResponseV1.java +++ b/src/main/java/com/quickpick/ureca/v1/reserve/dto/TicketReserveResponseV1.java @@ -1,6 +1,6 @@ package com.quickpick.ureca.v1.reserve.dto; -import com.quickpick.ureca.v1.ticket.domain.Ticket; +import com.quickpick.ureca.v1.ticket.domain.TicketV1; import com.quickpick.ureca.v1.user.domain.User; public record TicketReserveResponseV1( @@ -9,7 +9,7 @@ public record TicketReserveResponseV1( int remainingQuantity, String reservedByUsername ) { - public static TicketReserveResponseV1 of(Ticket ticket, User user) { + public static TicketReserveResponseV1 of(TicketV1 ticket, User user) { return new TicketReserveResponseV1( ticket.getTicketId(), ticket.getName(), diff --git a/src/main/java/com/quickpick/ureca/v1/reserve/service/ReserveServiceV1.java b/src/main/java/com/quickpick/ureca/v1/reserve/service/ReserveServiceV1.java index c0498ab..e98c280 100644 --- a/src/main/java/com/quickpick/ureca/v1/reserve/service/ReserveServiceV1.java +++ b/src/main/java/com/quickpick/ureca/v1/reserve/service/ReserveServiceV1.java @@ -1,7 +1,7 @@ package com.quickpick.ureca.v1.reserve.service; import com.quickpick.ureca.v1.ticket.cache.TicketSoldOutCacheV1; -import com.quickpick.ureca.v1.ticket.domain.Ticket; +import com.quickpick.ureca.v1.ticket.domain.TicketV1; import com.quickpick.ureca.v1.ticket.repository.TicketRepositoryV1; import com.quickpick.ureca.v1.user.domain.User; import com.quickpick.ureca.v1.user.repository.UserRepositoryV1; @@ -191,7 +191,7 @@ public void reserveTicket(Long userId, Long ticketId) { throw new IllegalStateException("이미 예약함"); } - Ticket ticket = ticketRepositoryV1.findByIdForUpdate(ticketId) + TicketV1 ticket = ticketRepositoryV1.findByIdForUpdate(ticketId) .orElseThrow(() -> new IllegalArgumentException("Ticket not found")); if (ticket.getQuantity() <= 0) { @@ -220,7 +220,7 @@ public void cancelReservation(Long userId, Long ticketId) { userTicketShardingRepositoryV1.delete(userId, ticketId); // 티켓 수량 복원 (비관적 락으로 안전하게 처리) - Ticket ticket = ticketRepositoryV1.findByIdForUpdate(ticketId) + TicketV1 ticket = ticketRepositoryV1.findByIdForUpdate(ticketId) .orElseThrow(() -> new IllegalArgumentException("Ticket not found")); ticket.setQuantity(ticket.getQuantity() + 1); diff --git a/src/main/java/com/quickpick/ureca/v1/ticket/domain/Ticket.java b/src/main/java/com/quickpick/ureca/v1/ticket/domain/TicketV1.java similarity index 93% rename from src/main/java/com/quickpick/ureca/v1/ticket/domain/Ticket.java rename to src/main/java/com/quickpick/ureca/v1/ticket/domain/TicketV1.java index f0b56b4..9bb67cd 100644 --- a/src/main/java/com/quickpick/ureca/v1/ticket/domain/Ticket.java +++ b/src/main/java/com/quickpick/ureca/v1/ticket/domain/TicketV1.java @@ -16,7 +16,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class Ticket extends BaseEntity { +public class TicketV1 extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -51,7 +51,7 @@ public void decreaseCount() { } // Test용 - public Ticket(String name, int i) { + public TicketV1(String name, int i) { this.name = name; this.quantity = i; } diff --git a/src/main/java/com/quickpick/ureca/v1/ticket/repository/TicketRepositoryV1.java b/src/main/java/com/quickpick/ureca/v1/ticket/repository/TicketRepositoryV1.java index 260781a..f78234d 100644 --- a/src/main/java/com/quickpick/ureca/v1/ticket/repository/TicketRepositoryV1.java +++ b/src/main/java/com/quickpick/ureca/v1/ticket/repository/TicketRepositoryV1.java @@ -1,6 +1,6 @@ package com.quickpick.ureca.v1.ticket.repository; -import com.quickpick.ureca.v1.ticket.domain.Ticket; +import com.quickpick.ureca.v1.ticket.domain.TicketV1; import com.quickpick.ureca.v1.ticket.projection.TicketQuantityProjectionV1; import jakarta.persistence.LockModeType; import org.springframework.data.jpa.repository.JpaRepository; @@ -14,28 +14,28 @@ import java.util.Optional; @Repository -public interface TicketRepositoryV1 extends JpaRepository { +public interface TicketRepositoryV1 extends JpaRepository { // 비관적 락 @Lock(LockModeType.PESSIMISTIC_WRITE) @Query(""" - select t from Ticket t where t.ticketId = :ticketId""") - Optional findByIdForUpdate(Long ticketId); + select t from TicketV1 t where t.ticketId = :ticketId""") + Optional findByIdForUpdate(Long ticketId); // 비관적 락 (네이티브 쿼리) @Query(value = "SELECT * FROM ticket WHERE ticket_id = :ticketId FOR UPDATE", nativeQuery = true) - Ticket findByIdForUpdateNative(@Param("ticketId") Long ticketId); + TicketV1 findByIdForUpdateNative(@Param("ticketId") Long ticketId); // open-in-view + FetchJoin + DTO + 비관적 락 @Lock(LockModeType.PESSIMISTIC_WRITE) @Query(""" - select t from Ticket t + select t from TicketV1 t left join fetch t.userTicketV1s ut left join fetch ut.user where t.ticketId = :ticketId """) - Optional findByIdForUpdateWithUsers(Long ticketId); + Optional findByIdForUpdateWithUsers(Long ticketId); // Projection 기반 조회 diff --git a/src/main/java/com/quickpick/ureca/v1/userticket/domain/UserTicketV1.java b/src/main/java/com/quickpick/ureca/v1/userticket/domain/UserTicketV1.java index 1fce7f6..3825d41 100644 --- a/src/main/java/com/quickpick/ureca/v1/userticket/domain/UserTicketV1.java +++ b/src/main/java/com/quickpick/ureca/v1/userticket/domain/UserTicketV1.java @@ -1,6 +1,6 @@ package com.quickpick.ureca.v1.userticket.domain; -import com.quickpick.ureca.v1.ticket.domain.Ticket; +import com.quickpick.ureca.v1.ticket.domain.TicketV1; import com.quickpick.ureca.v1.user.domain.User; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -27,9 +27,9 @@ public class UserTicketV1 { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ticket_id") - private Ticket ticket; + private TicketV1 ticket; - public UserTicketV1(User user, Ticket ticket) { + public UserTicketV1(User user, TicketV1 ticket) { this.user = user; this.ticket = ticket; }