From 325ed4cbab83c729b42653cc12b96fbadc977c69 Mon Sep 17 00:00:00 2001 From: gol2580 Date: Tue, 25 Feb 2025 21:50:00 +0900 Subject: [PATCH] =?UTF-8?q?feat/#58=20=EC=B1=84=ED=8C=85=EB=B0=A9=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=ED=9B=84=20=EC=B1=84=ED=8C=85=20=EC=97=86?= =?UTF-8?q?=EC=9D=B4=205=EB=B6=84=20=EA=B2=BD=EA=B3=BC=20=EC=8B=9C=20?= =?UTF-8?q?=EC=B1=84=ED=8C=85=EB=B0=A9=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/SucceSS/SucceSsApplication.java | 2 + .../SucceSS/config/chat/SchedulerConfig.java | 17 ++++++++ .../service/ChatService/ChatRoomService.java | 42 +++++++++++++------ .../service/ChatService/ChatService.java | 4 ++ 4 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/example/SucceSS/config/chat/SchedulerConfig.java diff --git a/src/main/java/com/example/SucceSS/SucceSsApplication.java b/src/main/java/com/example/SucceSS/SucceSsApplication.java index 41665e1..01dc399 100644 --- a/src/main/java/com/example/SucceSS/SucceSsApplication.java +++ b/src/main/java/com/example/SucceSS/SucceSsApplication.java @@ -3,8 +3,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableScheduling; @EnableJpaAuditing +@EnableScheduling @SpringBootApplication public class SucceSsApplication { diff --git a/src/main/java/com/example/SucceSS/config/chat/SchedulerConfig.java b/src/main/java/com/example/SucceSS/config/chat/SchedulerConfig.java new file mode 100644 index 0000000..8d97eb6 --- /dev/null +++ b/src/main/java/com/example/SucceSS/config/chat/SchedulerConfig.java @@ -0,0 +1,17 @@ +package com.example.SucceSS.config.chat; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +@Configuration +public class SchedulerConfig { + @Bean + public ThreadPoolTaskScheduler taskScheduler() { + ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setPoolSize(10); + scheduler.setThreadNamePrefix("ChatRoomDeletingScheduler-"); + scheduler.initialize(); + return scheduler; + } +} diff --git a/src/main/java/com/example/SucceSS/service/ChatService/ChatRoomService.java b/src/main/java/com/example/SucceSS/service/ChatService/ChatRoomService.java index 82dbd25..8c8a112 100644 --- a/src/main/java/com/example/SucceSS/service/ChatService/ChatRoomService.java +++ b/src/main/java/com/example/SucceSS/service/ChatService/ChatRoomService.java @@ -12,15 +12,25 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.Instant; +import java.util.Date; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + @Service @RequiredArgsConstructor public class ChatRoomService { private final ChatRoomRepository chatRoomRepository; private final ChatRepository chatRepository; + private final ConcurrentHashMap> scheduledTasks = new ConcurrentHashMap<>(); + private final ThreadPoolTaskScheduler taskScheduler; + @Transactional public ChatRoomResponseDto createChatRoom(Member member) { @@ -29,9 +39,8 @@ public ChatRoomResponseDto createChatRoom(Member member) { .title("New Chat") .build(); - chatRoomRepository.save(chatRoom); - - //sendFirstMessage(chatRoom); + chatRoom = chatRoomRepository.save(chatRoom); + scheduleDeletion(chatRoom.getChatRoomId()); return chatRoom.toResponse(); } @@ -47,15 +56,6 @@ public Page getChatPages(Long chatRoomId, Pageable pageable) { .map(ChatResponseDto::fromWithoutLocation); } - /* - private void sendFirstMessage(ChatRoom chatRoom) { - ChatDto dto = ChatDto.toChatDto(chatRoom.getChatRoomId(),chatRoom.getMemberId(), "New Chat", "CHAT"); - producer.sendMessageToUser(dto); - - chatRepository.save(Chat.of(dto)); - } - */ - @Transactional(readOnly = true) public Page getChatRoomPages(Member member, Pageable pageable) { return chatRoomRepository.getPagesByMemberId(member.getId() @@ -67,4 +67,22 @@ private Pageable getChatRoomPageableWithSort(Pageable pageable) { , Sort.by(Sort.Direction.DESC,"updatedAt")); } + public void scheduleDeletion(Long chatRoomId) { + ScheduledFuture future = taskScheduler.schedule( + () -> deleteChatRoom(chatRoomId), + Instant.now().plusSeconds(5*60) + ); + scheduledTasks.put(chatRoomId, future); + } + + public void cancelScheduledDeletion(Long chatRoomId) { + ScheduledFuture future = scheduledTasks.get(chatRoomId); + if (future != null && !future.isDone()) { + future.cancel(false); + } + scheduledTasks.remove(chatRoomId); + } + + + } diff --git a/src/main/java/com/example/SucceSS/service/ChatService/ChatService.java b/src/main/java/com/example/SucceSS/service/ChatService/ChatService.java index 018c567..355b10e 100644 --- a/src/main/java/com/example/SucceSS/service/ChatService/ChatService.java +++ b/src/main/java/com/example/SucceSS/service/ChatService/ChatService.java @@ -33,6 +33,7 @@ public class ChatService { private final ChatRoomRepository chatRoomRepository; private static final String USER = "user"; private static final String LUMI = "lumi"; + private final ChatRoomService chatRoomService; @Value("${spring.huggingface.api.url}") private String API_URL; @@ -160,5 +161,8 @@ public void updateChatRoomInfos(ChatRoom chatRoom, ChatRequestDto chatDto) { chatRoom.updateChatRoomTitle(chatDto.getText()); } chatRoom.setUpdatedDate(LocalDateTime.now()); + + // 삭제 스케줄링 취소 + chatRoomService.cancelScheduledDeletion(chatRoom.getChatRoomId()); } } \ No newline at end of file