From 02260141995b3e3d2606e862e7010d12c7178ea3 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 17:41:46 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20ai=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20MetricPoint=20?= =?UTF-8?q?=EC=8A=A4=ED=85=81=20=EC=82=AD=EC=A0=9C=20(closes=20#36)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/main/java/com/dgu/cap/ai/MetricPoint.java | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 src/main/java/com/dgu/cap/ai/MetricPoint.java diff --git a/src/main/java/com/dgu/cap/ai/MetricPoint.java b/src/main/java/com/dgu/cap/ai/MetricPoint.java deleted file mode 100644 index 28ecdd7..0000000 --- a/src/main/java/com/dgu/cap/ai/MetricPoint.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.dgu.cap.ai; - -/** - * @deprecated Use {@link com.dgu.cap.metric.MetricPoint} instead - */ -@Deprecated -public class MetricPoint { -} 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 2/2] =?UTF-8?q?fix:=20=ED=8B=B0=EC=BC=93=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EB=8F=99=EC=8B=9C=20=EC=83=9D=EC=84=B1=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EB=B0=A9=EC=A7=80=20-=20id=20=EA=B8=B0=EB=B0=98?= =?UTF-8?q?=EC=9C=BC=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); - } }