Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

@RestController
@RequiredArgsConstructor
@RequestMapping("/init")
@RequestMapping("/init2")
public class InitControllerV2 {

private final TicketRepositoryV2 ticketRepository;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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))
Expand Down
Original file line number Diff line number Diff line change
@@ -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(
Expand All @@ -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(),
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Ticket extends BaseEntity {
public class TicketV1 extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -14,28 +14,28 @@
import java.util.Optional;

@Repository
public interface TicketRepositoryV1 extends JpaRepository<Ticket, Long> {
public interface TicketRepositoryV1 extends JpaRepository<TicketV1, Long> {

// 비관적 락
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("""
select t from Ticket t where t.ticketId = :ticketId""")
Optional<Ticket> findByIdForUpdate(Long ticketId);
select t from TicketV1 t where t.ticketId = :ticketId""")
Optional<TicketV1> 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<Ticket> findByIdForUpdateWithUsers(Long ticketId);
Optional<TicketV1> findByIdForUpdateWithUsers(Long ticketId);


// Projection 기반 조회
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
}
Expand Down
Loading