diff --git a/src/main/java/com/deepdirect/deepwebide_be/chat/controller/ChatWebSocketController.java b/src/main/java/com/deepdirect/deepwebide_be/chat/controller/ChatWebSocketController.java index 652d62d3..b3830d23 100644 --- a/src/main/java/com/deepdirect/deepwebide_be/chat/controller/ChatWebSocketController.java +++ b/src/main/java/com/deepdirect/deepwebide_be/chat/controller/ChatWebSocketController.java @@ -30,10 +30,6 @@ public void sendMessage( // 1. WebSocket 세션에서 userId 추출 Long userId = (Long) headerAccessor.getSessionAttributes().get("userId"); - String username = userRepository.findById(userId).get().getUsername(); - log.info("WebSocket 메시지 전송: userId={}, username={}", userId, username); - - System.out.println(request.getMessage()); // 2. 메시지 저장 + DTO 응답 변환 ChatMessageBroadcast broadcast = chatMessageWriteService.saveChatMessage(userId, request); diff --git a/src/main/java/com/deepdirect/deepwebide_be/chat/domain/ChatMessageReference.java b/src/main/java/com/deepdirect/deepwebide_be/chat/domain/ChatMessageReference.java index a1411737..3cf8eb03 100644 --- a/src/main/java/com/deepdirect/deepwebide_be/chat/domain/ChatMessageReference.java +++ b/src/main/java/com/deepdirect/deepwebide_be/chat/domain/ChatMessageReference.java @@ -13,7 +13,8 @@ @Builder public class ChatMessageReference { - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/com/deepdirect/deepwebide_be/chat/service/ChatMessageWriteService.java b/src/main/java/com/deepdirect/deepwebide_be/chat/service/ChatMessageWriteService.java index 93c66930..c3bc02d5 100644 --- a/src/main/java/com/deepdirect/deepwebide_be/chat/service/ChatMessageWriteService.java +++ b/src/main/java/com/deepdirect/deepwebide_be/chat/service/ChatMessageWriteService.java @@ -63,7 +63,7 @@ public ChatMessageBroadcast saveChatMessage(Long userId, ChatMessageRequest requ // 2. 참조 저장 (있으면) CodeReferenceRequest refRequest = request.getCodeReference(); ChatMessageReference reference = null; - if (refRequest != null && refRequest.getPath() != null) { + if (refRequest != null && refRequest.getPath() != null && !refRequest.getPath().isBlank()) { reference = referenceRepository.save(ChatMessageReference.builder() .chatMessage(chatMessage) .path(refRequest.getPath()) diff --git a/src/main/java/com/deepdirect/deepwebide_be/file/service/FileService.java b/src/main/java/com/deepdirect/deepwebide_be/file/service/FileService.java index 819f9d83..2a678aef 100644 --- a/src/main/java/com/deepdirect/deepwebide_be/file/service/FileService.java +++ b/src/main/java/com/deepdirect/deepwebide_be/file/service/FileService.java @@ -66,6 +66,9 @@ public List getFileTree(Long repositoryId, Long userId) { if (parent != null) parent.getChildren().add(node); } } + + sortChildrenRecursively(roots); + return roots; } @@ -504,4 +507,18 @@ private void validateFolderName(String name) { throw new GlobalException(ErrorCode.INVALID_FOLDER_NAME_RESERVED); } + private void sortChildrenRecursively(List nodes) { + if (nodes == null) return; + nodes.sort( + Comparator + // FOLDER가 먼저 오도록 (폴더면 false, 파일이면 true) + .comparing((FileTreeNodeResponse n) -> !n.getFileType().equalsIgnoreCase("FOLDER")) + // 이름 오름차순(대소문자 무시) + .thenComparing(FileTreeNodeResponse::getFileName, String.CASE_INSENSITIVE_ORDER) + ); + for (FileTreeNodeResponse node : nodes) { + sortChildrenRecursively(node.getChildren()); + } + } + } diff --git a/src/main/java/com/deepdirect/deepwebide_be/global/config/RedisConfig.java b/src/main/java/com/deepdirect/deepwebide_be/global/config/RedisConfig.java index 8bb047c4..8a7d076b 100644 --- a/src/main/java/com/deepdirect/deepwebide_be/global/config/RedisConfig.java +++ b/src/main/java/com/deepdirect/deepwebide_be/global/config/RedisConfig.java @@ -1,14 +1,11 @@ package com.deepdirect.deepwebide_be.global.config; import com.deepdirect.deepwebide_be.chat.util.RedisSubscriber; -import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.listener.ChannelTopic; -import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; @Configuration @@ -25,7 +22,6 @@ public class RedisConfig { public RedisMessageListenerContainer redisMessageListenerContainer() { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); -// container.addMessageListener(redisSubscriber, new PatternTopic("chat:*")); return container; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3a9438e4..a1bf3410 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,8 +14,8 @@ spring.h2.console.path=/h2-console # JPA settings (H2) spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=update -spring.jpa.show-sql=true -spring.jpa.properties.hibernate.format_sql=true +#spring.jpa.show-sql=true +#spring.jpa.properties.hibernate.format_sql=true spring.data.redis.host=localhost spring.data.redis.port=6379