From 376e2d9db9bec7e59d0a39dfcde1bf5ec4a519da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9C=EC=A4=80?= Date: Thu, 7 May 2026 18:32:51 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=ED=8B=B0=EC=BC=93=20=EB=B2=88=ED=98=B8?= =?UTF-8?q?=20=EB=8F=99=EC=8B=9C=20=EC=83=9D=EC=84=B1=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=20=EB=B0=A9=EC=A7=80=20-=20id=20=EA=B8=B0=EB=B0=98=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(closes=20#39)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit count()+1 대신 DB auto-increment id 사용으로 동시성 문제 제거 Co-Authored-By: Claude Sonnet 4.6 --- src/main/java/com/dgu/cap/ticket/Ticket.java | 4 ++++ src/main/java/com/dgu/cap/ticket/TicketService.java | 12 +++--------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/dgu/cap/ticket/Ticket.java b/src/main/java/com/dgu/cap/ticket/Ticket.java index 3552e61..a1cd6f5 100644 --- a/src/main/java/com/dgu/cap/ticket/Ticket.java +++ b/src/main/java/com/dgu/cap/ticket/Ticket.java @@ -57,4 +57,8 @@ public void updateStatus(String newStatus) { this.resolvedAt = LocalDateTime.now(); } } + + public void initTicketNumber(String ticketNumber) { + this.ticketNumber = ticketNumber; + } } diff --git a/src/main/java/com/dgu/cap/ticket/TicketService.java b/src/main/java/com/dgu/cap/ticket/TicketService.java index 9ff30f9..8d0c34f 100644 --- a/src/main/java/com/dgu/cap/ticket/TicketService.java +++ b/src/main/java/com/dgu/cap/ticket/TicketService.java @@ -5,8 +5,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.Year; import java.util.List; import java.util.concurrent.TimeUnit; @@ -30,10 +30,8 @@ public boolean isDuplicate(String podName, String anomalyType) { @Transactional public Ticket createTicket(CreateTicketRequest request) { - String ticketNumber = generateTicketNumber(); - Ticket ticket = Ticket.builder() - .ticketNumber(ticketNumber) + .ticketNumber("PENDING") .title(request.getPodName() + " " + request.getAnomalyType() + " 감지") .podName(request.getPodName()) .namespace(request.getNamespace()) @@ -49,6 +47,7 @@ public Ticket createTicket(CreateTicketRequest request) { .build(); ticket = ticketRepository.save(ticket); + ticket.initTicketNumber(String.format("TKT-%d-%03d", Year.now().getValue(), ticket.getId())); if (request.getCpu() != null) { TicketMetricSnapshot snapshot = TicketMetricSnapshot.builder() @@ -112,9 +111,4 @@ public List getActionLogs(Long ticketId) { return actionLogRepository.findByTicketIdOrderByCreatedAtDesc(ticketId); } - private String generateTicketNumber() { - int year = LocalDate.now().getYear(); - long count = ticketRepository.count() + 1; - return String.format("TKT-%d-%03d", year, count); - } }