diff --git a/apiserver/infrastructure/src/main/java/com/zipline/repository/region/RegionRepository.java b/apiserver/infrastructure/src/main/java/com/zipline/repository/region/RegionRepository.java index 5980b3da..89767914 100644 --- a/apiserver/infrastructure/src/main/java/com/zipline/repository/region/RegionRepository.java +++ b/apiserver/infrastructure/src/main/java/com/zipline/repository/region/RegionRepository.java @@ -1,17 +1,19 @@ package com.zipline.repository.region; +import com.zipline.entity.publicitem.Region; import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import com.zipline.entity.publicitem.Region; - @Repository public interface RegionRepository extends JpaRepository { List findByParentCortarNo(Long parentCortarNo); @Query("SELECT concat(gp.cortarName, ' ', p.cortarName, ' ', r.cortarName) FROM Region r LEFT JOIN Region p ON r.parent.cortarNo = p.cortarNo LEFT JOIN Region gp ON p.parent.cortarNo = gp.cortarNo WHERE r.cortarNo = :cortarNo") String findWithParentsByDistrictCode(Long cortarNo); -} + + @Query("SELECT r.cortarName FROM Region r WHERE r.cortarNo = :cortarNo") + String findCortarNameByCortarNo(@Param("cortarNo") String cortarNoText); +} \ No newline at end of file diff --git a/apiserver/service/src/main/java/com/zipline/service/message/MessageServiceImpl.java b/apiserver/service/src/main/java/com/zipline/service/message/MessageServiceImpl.java index 2b713b1f..466ee764 100644 --- a/apiserver/service/src/main/java/com/zipline/service/message/MessageServiceImpl.java +++ b/apiserver/service/src/main/java/com/zipline/service/message/MessageServiceImpl.java @@ -8,6 +8,7 @@ import com.zipline.global.exception.user.UserException; import com.zipline.global.exception.user.errorcode.UserErrorCode; import com.zipline.repository.message.MessageHistoryRepository; +import com.zipline.repository.region.RegionRepository; import com.zipline.repository.user.UserRepository; import com.zipline.service.message.dto.request.MessageHistoryRequestDTO; import com.zipline.service.message.dto.request.SendMessageRequestDTO; @@ -15,6 +16,8 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -30,6 +33,7 @@ public class MessageServiceImpl implements MessageService { private final MessageHistoryParamFormatter messageHistoryParamFormatter; private final MessageHistoryRepository messageHistoryRepository; private final UserRepository userRepository; + private final RegionRepository regionRepository; public void saveMessageHistory(String messageGroupId, Long userUID) { @@ -45,11 +49,44 @@ public void saveMessageHistory(String messageGroupId, Long userUID) { messageHistoryRepository.save(messageHistory); } + private String replaceTemplateValues(String text) { + if (text == null) return null; + + Pattern pattern = Pattern.compile("\\$\\$###\\{([^}]+)}"); + Matcher matcher = pattern.matcher(text); + + StringBuilder result = new StringBuilder(); + while (matcher.find()) { + String key = matcher.group(1); + String replacement = getReplacementValue(key); + matcher.appendReplacement(result, Matcher.quoteReplacement(replacement)); + } + matcher.appendTail(result); + + return result.toString(); + } + + private String getReplacementValue(String key) { + if (key == null || !key.matches("\\d{10}")) { + return key; + } + String cortarName = regionRepository.findCortarNameByCortarNo(key); + + return cortarName != null ? cortarName : key; + } + @Transactional public String sendMessage(List request, Long userUID) { try { - Map wrappedRequest = Map.of("messages", request); + List processedRequest = request.stream() + .map(msg -> { + String processedText = replaceTemplateValues(msg.getText()); + return msg.withText(processedText); + }) + .toList(); + + Map wrappedRequest = Map.of("messages", processedRequest); String response = webClient.post() .uri("/send-many/detail") diff --git a/apiserver/service/src/main/java/com/zipline/service/message/dto/request/SendMessageRequestDTO.java b/apiserver/service/src/main/java/com/zipline/service/message/dto/request/SendMessageRequestDTO.java index f793697b..c4e9e83f 100644 --- a/apiserver/service/src/main/java/com/zipline/service/message/dto/request/SendMessageRequestDTO.java +++ b/apiserver/service/src/main/java/com/zipline/service/message/dto/request/SendMessageRequestDTO.java @@ -1,10 +1,18 @@ package com.zipline.service.message.dto.request; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; @Getter +@AllArgsConstructor +@NoArgsConstructor public class SendMessageRequestDTO { private String from; private String to; private String text; + + public SendMessageRequestDTO withText(String text) { + return new SendMessageRequestDTO(this.from, this.to, text); + } } \ No newline at end of file