From 94aaa41dd8a7dc357b3dd588dac48730caf1e04d Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 16 Aug 2025 09:54:24 +0900 Subject: [PATCH 01/29] 2025-08-16 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add : 기본 틀 및 테이블 구성 엔티티 작성 깃헙 기능 숙지가 부족하여 늦게 공부하고 올립니다. --- build.gradle | 2 ++ .../message/api/ApiExceptionAdvice.java | 13 +++++++- .../com/tunaforce/message/cmmn/SlackMsg.java | 24 ++++++-------- .../message/config/AuditorAwareImpl.java | 3 +- .../tunaforce/message/config/JpaConfig.java | 2 +- .../message/controller/LogController.java | 32 +++++++++++++++++++ .../message/controller/MessageController.java | 2 -- .../dto/response/SearchLogResponseDto.java | 17 ++++++++++ .../message/entity/DeliveryRouteLog.java | 2 ++ .../message/entity/MessageManagement.java | 18 +++++++++-- .../MessageCreateJPaRepository.java | 7 ---- .../repository/RoutLogJPaRepository.java | 7 ++++ .../message/service/MessageService.java | 21 ------------ .../message/service/RoutLogService.java | 31 ++++++++++++++++++ src/main/resources/application.properties | 8 +++++ 15 files changed, 137 insertions(+), 52 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/controller/LogController.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/SearchLogResponseDto.java delete mode 100644 src/main/java/com/tunaforce/message/message/repository/MessageCreateJPaRepository.java create mode 100644 src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java delete mode 100644 src/main/java/com/tunaforce/message/message/service/MessageService.java create mode 100644 src/main/java/com/tunaforce/message/message/service/RoutLogService.java diff --git a/build.gradle b/build.gradle index 6db0d76..8a9951d 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,8 @@ dependencies { testImplementation 'org.springframework.amqp:spring-rabbit-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' implementation 'com.slack.api:slack-api-client:1.25.0' + implementation 'com.google.code.gson:gson:2.8.9' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0' } dependencyManagement { diff --git a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java index 8ad5f61..5f0fe72 100644 --- a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java +++ b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java @@ -1,5 +1,6 @@ package com.tunaforce.message.api; +import com.slack.api.methods.SlackApiException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -46,5 +47,15 @@ public ResponseEntity> notFoundExceptionHandler(HttpServletR .ok(apiResponse); } - @ExceptionHandler() + @ExceptionHandler(SlackApiException.class) + public ResponseEntity> slackApiExceptionHandler(HttpServletRequest request, final SlackApiException slackApiException) { + ApiResponse apiResponse = ApiResponse.builder() + .status(ApiStatus.FORBIDDEN.getStatusCode()) + .message(ApiStatus.FORBIDDEN.getMessage()) + .errors(slackApiException.getMessage()) + .build(); + + return ResponseEntity + .ok(apiResponse); + } } \ No newline at end of file diff --git a/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java b/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java index 48e6b25..d96df61 100644 --- a/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java +++ b/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java @@ -1,7 +1,5 @@ package com.tunaforce.message.cmmn; - -import com.msa.slacktest.SLACK.dto.request.RequestSlackSend; import com.slack.api.Slack; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.chat.ChatPostMessageRequest; @@ -10,7 +8,6 @@ import com.slack.api.methods.response.chat.ChatPostMessageResponse; import com.slack.api.methods.response.conversations.ConversationsOpenResponse; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.IOException; @@ -20,19 +17,16 @@ @Component public class SlackMsg { - @Value("${slack.api.token}") - private String slackToken; - - @Value("${slack.channel.id}") - private String channelId; - - // @Value("${slack.user.id}") - // private String userId; - + //토큰은 auth 모듈에서 api로 받아 redis에 저장 +// @Value("${slack.api.token}") +// private String slackToken; + //userid로 변경하여 auth 모듈에서 불러오기 +// @Value("${slack.channel.id}") +// private String channelId; - public RequestSlackSend sendMessage(String message) { + public RequestSlackSend sendMessageChannel(String slackToken, String channelId,String message) { Slack slack = Slack.getInstance(); try { @@ -63,7 +57,7 @@ public RequestSlackSend sendMessage(String message) { ); } } - public void sendDirectMessage(String userId, String message) throws IOException, SlackApiException { + public void sendDirectMessage(String slackToken,String userId, String message) throws IOException, SlackApiException { Slack slack = Slack.getInstance(); // 1. 사용자와의 DM 대화방 열기 @@ -96,7 +90,7 @@ public void sendDirectMessage(String userId, String message) throws IOException, } - public void fetchHistory(Integer brCount) { + public void fetchHistory(String slackToken, String channelId, Integer brCount) { var client = Slack.getInstance().methods(); try { var response = client.conversationsHistory(ConversationsHistoryRequest.builder() diff --git a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java index a7bcac2..187e413 100644 --- a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java +++ b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java @@ -4,13 +4,12 @@ import org.springframework.stereotype.Component; import java.util.Optional; -import java.util.UUID; @Component public class AuditorAwareImpl implements AuditorAware { @Override - public Optional getCurrentAuditor(){ + public Optional getCurrentAuditor() { //SecurityContext로 사용자 정보 반환 return Optional.of(null); } diff --git a/src/main/java/com/tunaforce/message/config/JpaConfig.java b/src/main/java/com/tunaforce/message/config/JpaConfig.java index 1580838..8c63930 100644 --- a/src/main/java/com/tunaforce/message/config/JpaConfig.java +++ b/src/main/java/com/tunaforce/message/config/JpaConfig.java @@ -10,6 +10,6 @@ public class JpaConfig { @Bean public AuditorAware auditorProvider() { - return new AuditAwareImpl(); + return new AuditorAwareImpl(); } } diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java new file mode 100644 index 0000000..658c3c4 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -0,0 +1,32 @@ +package com.tunaforce.message.message.controller; + +import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.message.dto.response.SearchLogResponseDto; +import com.tunaforce.message.message.service.RoutLogService; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Tag(name = "로그 CRUD") +@RestController +@RequestMapping("/log") +@RequiredArgsConstructor +public class LogController { + + private final RoutLogService routLogService; + + @GetMapping + public ResponseEntity>> getLogDatas(){ + + List tempList = routLogService.readAllLog(); + ApiResponse> resultDto = ApiResponse.success(tempList); + return ResponseEntity.ok(resultDto); + } + + +} diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index a6b8043..2ffc59b 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -9,6 +9,4 @@ public class MessageController { - - } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/SearchLogResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/SearchLogResponseDto.java new file mode 100644 index 0000000..c27e87e --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/SearchLogResponseDto.java @@ -0,0 +1,17 @@ +package com.tunaforce.message.message.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +@AllArgsConstructor +public class SearchLogResponseDto { + private String hubId; + private String deliveryId; + private String CompanyId; + private String realDistance; + private String realTime; + private String currStatus; +} diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java index 2403a06..06ad1e9 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java @@ -3,8 +3,10 @@ import jakarta.persistence.*; import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.NoArgsConstructor; +@Getter @NoArgsConstructor @AllArgsConstructor @Entity diff --git a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java index 57e36b7..c9a889c 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java +++ b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java @@ -1,13 +1,15 @@ package com.tunaforce.message.message.entity; +import com.tunaforce.message.message.dto.request.CreateLogRequestDto; import jakarta.persistence.*; import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.NoArgsConstructor; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; +import java.util.UUID; +@Getter @Entity @Table(name = "p_messageLog") @NoArgsConstructor @@ -25,11 +27,21 @@ public class MessageManagement extends Timestamped { private Long receiverId; - public void MessageManagement (String content, Long senderId, Long receiverId) { + public MessageManagement (String content, Long senderId, Long receiverId) { this.content = content; this.senderId = senderId; this.receiverId = receiverId; } + + public MessageManagement (CreateLogRequestDto createLogRequestDto) { + this.content = createLogRequestDto.content(); + this.senderId = createLogRequestDto.senderId(); + this.receiverId = createLogRequestDto.receiverId(); + } + + public void deleteMessageLog(UUID messageId){ + delete(messageId); + } } diff --git a/src/main/java/com/tunaforce/message/message/repository/MessageCreateJPaRepository.java b/src/main/java/com/tunaforce/message/message/repository/MessageCreateJPaRepository.java deleted file mode 100644 index dc16e72..0000000 --- a/src/main/java/com/tunaforce/message/message/repository/MessageCreateJPaRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.tunaforce.message.message.repository; - -import com.tunaforce.message.message.entity.MessageManagement; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface MessageCreateJPaRepository extends JpaRepository { -} diff --git a/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java b/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java new file mode 100644 index 0000000..9ca7e50 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java @@ -0,0 +1,7 @@ +package com.tunaforce.message.message.repository; + +import com.tunaforce.message.message.entity.DeliveryRouteLog; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RoutLogJPaRepository extends JpaRepository { +} diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java deleted file mode 100644 index 1e10923..0000000 --- a/src/main/java/com/tunaforce/message/message/service/MessageService.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.tunaforce.message.message.service; - - -import com.tunaforce.message.message.dto.request.CreateLogRequestDto; -import com.tunaforce.message.message.dto.response.CreateLogResponseDto; -import com.tunaforce.message.message.entity.MessageManagement; -import com.tunaforce.message.message.repository.MessageCreateJPaRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class MessageService { - private final MessageCreateJPaRepository messageCreateJPaRepository; - - public CreateLogResponseDto create(CreateLogRequestDto createLogRequestDto) { - MessageManagement messageManagement = ; - messageCreateJPaRepository.save(); - return - } -} diff --git a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java new file mode 100644 index 0000000..c749132 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java @@ -0,0 +1,31 @@ +package com.tunaforce.message.message.service; + + +import com.tunaforce.message.message.dto.response.SearchLogResponseDto; +import com.tunaforce.message.message.entity.DeliveryRouteLog; +import com.tunaforce.message.message.repository.RoutLogJPaRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class RoutLogService { + private final RoutLogJPaRepository routLogJPaRepository; + + public List readAllLog() { + List results = routLogJPaRepository.findAll(); + return results.stream() + .map(entity -> SearchLogResponseDto.builder() + .hubId(String.valueOf(entity.getHubId())) + .deliveryId(String.valueOf(entity.getDeliveryId())) + .CompanyId(String.valueOf(entity.getCompanyId())) + .realDistance(String.valueOf(entity.getRealDistance())) + .realTime(String.valueOf(entity.getRealTime())) + .currStatus(String.valueOf(entity.getCurrstatus())) + .build() + ).collect(Collectors.toList()); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 00cb0fb..c689a27 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,9 @@ spring.application.name=message + + + + +springdoc.swagger-ui.path=/swagger-ui.html +springdoc.api-docs.path=/v3/api-docs +springdoc.swagger-ui.operations-sorter=alpha +springdoc.swagger-ui.tags-sorter=alpha From 1ca80d709b19b0bcfb47b29337634b8ce8649b31 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 16 Aug 2025 09:56:06 +0900 Subject: [PATCH 02/29] 2025-08-16 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add : 기본 틀 및 테이블 구성 엔티티 작성 깃헙 기능 숙지가 부족하여 늦게 공부하고 올립니다. --- .../message/api/ApiExceptionAdvice.java | 3 +-- .../com/tunaforce/message/cmmn/SlackMsg.java | 18 +++++++++--------- .../message/entity/MessageManagement.java | 10 +++++----- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java index 5f0fe72..2e5447a 100644 --- a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java +++ b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java @@ -1,14 +1,13 @@ package com.tunaforce.message.api; import com.slack.api.methods.SlackApiException; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.resource.NoResourceFoundException; -import jakarta.servlet.http.HttpServletRequest; - @RestControllerAdvice public class ApiExceptionAdvice { @ExceptionHandler(ApiException.class) diff --git a/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java b/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java index d96df61..e10ec3c 100644 --- a/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java +++ b/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java @@ -26,7 +26,7 @@ public class SlackMsg { - public RequestSlackSend sendMessageChannel(String slackToken, String channelId,String message) { + public void sendMessageChannel(String slackToken, String channelId,String message) { Slack slack = Slack.getInstance(); try { @@ -45,16 +45,16 @@ public RequestSlackSend sendMessageChannel(String slackToken, String channelId,S log.error("메시지 전송 실패: " + response.getError()); resultCheck = false; } - return new RequestSlackSend( - resultCheck, - message - ); +// return new RequestSlackSend( +// resultCheck, +// message +// ); } catch (SlackApiException | IOException e) { e.printStackTrace(); - return new RequestSlackSend( - false, - "Error : " + e.getMessage() + message - ); +// return new RequestSlackSend( +// false, +// "Error : " + e.getMessage() + message +// ); } } public void sendDirectMessage(String slackToken,String userId, String message) throws IOException, SlackApiException { diff --git a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java index c9a889c..26e340e 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java +++ b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java @@ -21,25 +21,25 @@ public class MessageManagement extends Timestamped { private Long messageIdx; @Column(nullable = false) private String content; - @Column( name = "sender_Id",updatable = false,nullable = false) + @Column(name = "sender_Id", updatable = false, nullable = false) private Long senderId; - @Column(name = "receiver_Id", updatable = false,nullable = false) + @Column(name = "receiver_Id", updatable = false, nullable = false) private Long receiverId; - public MessageManagement (String content, Long senderId, Long receiverId) { + public MessageManagement(String content, Long senderId, Long receiverId) { this.content = content; this.senderId = senderId; this.receiverId = receiverId; } - public MessageManagement (CreateLogRequestDto createLogRequestDto) { + public MessageManagement(CreateLogRequestDto createLogRequestDto) { this.content = createLogRequestDto.content(); this.senderId = createLogRequestDto.senderId(); this.receiverId = createLogRequestDto.receiverId(); } - public void deleteMessageLog(UUID messageId){ + public void deleteMessageLog(UUID messageId) { delete(messageId); } } From ab3f029132318b9101e15c5aa2c8e554fd0bdfb5 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 16 Aug 2025 14:23:56 +0900 Subject: [PATCH 03/29] =?UTF-8?q?add=20:=20Requestdto=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EB=B0=8F=20Service=EC=9D=98=20CRUD=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/config/MessageAppConfig.java | 11 ++++++++++ .../message/controller/LogController.java | 22 ++++++++++++++++--- ...o.java => CreateMessageLogRequestDto.java} | 2 +- .../dto/request/CreateRouteLogRequestDto.java | 4 ++++ .../message/entity/DeliveryRouteLog.java | 16 +++++++++----- .../message/entity/MessageManagement.java | 10 ++++----- .../repository/RoutLogJPaRepository.java | 7 ++++++ .../message/service/RoutLogService.java | 14 ++++++++++++ .../java/com/tunaforce/message/SlackTest.java | 22 +++++++++++++++++++ 9 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/config/MessageAppConfig.java rename src/main/java/com/tunaforce/message/message/dto/request/{CreateLogRequestDto.java => CreateMessageLogRequestDto.java} (75%) create mode 100644 src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java create mode 100644 src/test/java/com/tunaforce/message/SlackTest.java diff --git a/src/main/java/com/tunaforce/message/config/MessageAppConfig.java b/src/main/java/com/tunaforce/message/config/MessageAppConfig.java new file mode 100644 index 0000000..5a47bce --- /dev/null +++ b/src/main/java/com/tunaforce/message/config/MessageAppConfig.java @@ -0,0 +1,11 @@ +package com.tunaforce.message.config; + +import com.tunaforce.message.cmmn.SlackMsg; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MessageAppConfig { + SlackMsg slackMsg = new SlackMsg(); + + +} diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java index 658c3c4..e35ef97 100644 --- a/src/main/java/com/tunaforce/message/message/controller/LogController.java +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -1,14 +1,13 @@ package com.tunaforce.message.message.controller; import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; import com.tunaforce.message.message.dto.response.SearchLogResponseDto; import com.tunaforce.message.message.service.RoutLogService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -27,6 +26,23 @@ public ResponseEntity>> getLogDatas(){ ApiResponse> resultDto = ApiResponse.success(tempList); return ResponseEntity.ok(resultDto); } + @PostMapping + public ResponseEntity>> createLogDatas(@RequestBody CreateMessageLogRequestDto createMessageLogRequestDto){ + } + //deliveryID 값으로 검색하여 해당 값을 받아 수정 + //수정되는 값은 실제 데이터의 update : real_distance, real_time, curr_status + //실제 총 거리와 시간이 기입되면 배송 완료라고 가정한다. + @PutMapping + public ResponseEntity> updateLogRealData(@RequestParam Long deliveryId ){ + Boolean tempList = routLogService.updateStatus(deliveryId); + ApiResponse resultDto = ApiResponse.success(tempList); + return ResponseEntity.ok(resultDto); + } + //deliveryID 값으로 검색하여 해당 값을 받아 삭제 + @DeleteMapping + public ResponseEntity> deleteLogDatas(@RequestParam String deliveryId ){ + + } } diff --git a/src/main/java/com/tunaforce/message/message/dto/request/CreateLogRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java similarity index 75% rename from src/main/java/com/tunaforce/message/message/dto/request/CreateLogRequestDto.java rename to src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java index 6452ab0..ec93189 100644 --- a/src/main/java/com/tunaforce/message/message/dto/request/CreateLogRequestDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java @@ -1,6 +1,6 @@ package com.tunaforce.message.message.dto.request; -public record CreateLogRequestDto( +public record CreateMessageLogRequestDto( String content, Long senderId, Long receiverId diff --git a/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java new file mode 100644 index 0000000..5f82337 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java @@ -0,0 +1,4 @@ +package com.tunaforce.message.message.dto.request; + +public class CreateRouteLogRequestDto { +} diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java index 06ad1e9..bcd4ecf 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java @@ -6,22 +6,24 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.UUID; + @Getter @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "p_routeLog") -public class DeliveryRouteLog { +public class DeliveryRouteLog extends Timestamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long deliveryIdx; + private UUID deliveryIdx; @Column(name = "delivery_Id", nullable = false) - private String deliveryId; + private UUID deliveryId; @Column(name = "hub_Id", nullable = false) - private String hubId; + private UUID hubId; @Column(name = "company_Id", nullable = false) - private String companyId; + private UUID companyId; @Column(name = "appx_distance", nullable = false) private String appxDistance; @Column(name = "appx_Time", nullable = false) @@ -42,4 +44,8 @@ public void updateRealInfo(){ } + public void deleteLog(UUID deliveryId){ + delete(deliveryId); + } + } diff --git a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java index 26e340e..dc3ea6e 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java +++ b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java @@ -1,6 +1,6 @@ package com.tunaforce.message.message.entity; -import com.tunaforce.message.message.dto.request.CreateLogRequestDto; +import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; @@ -33,10 +33,10 @@ public MessageManagement(String content, Long senderId, Long receiverId) { this.receiverId = receiverId; } - public MessageManagement(CreateLogRequestDto createLogRequestDto) { - this.content = createLogRequestDto.content(); - this.senderId = createLogRequestDto.senderId(); - this.receiverId = createLogRequestDto.receiverId(); + public MessageManagement(CreateMessageLogRequestDto createMessageLogRequestDto) { + this.content = createMessageLogRequestDto.content(); + this.senderId = createMessageLogRequestDto.senderId(); + this.receiverId = createMessageLogRequestDto.receiverId(); } public void deleteMessageLog(UUID messageId) { diff --git a/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java b/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java index 9ca7e50..74f2ae2 100644 --- a/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java +++ b/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java @@ -2,6 +2,13 @@ import com.tunaforce.message.message.entity.DeliveryRouteLog; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; public interface RoutLogJPaRepository extends JpaRepository { + @Query("SELECT D FROM DeliveryRouteLog D WHERE D.deliveryId = :deliveryId") + Optional> findDeliveryRouteLogByDeliveryId(UUID deliveryId); } diff --git a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java index c749132..171b386 100644 --- a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java +++ b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java @@ -8,6 +8,8 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.NoSuchElementException; +import java.util.UUID; import java.util.stream.Collectors; @Service @@ -28,4 +30,16 @@ public List readAllLog() { .build() ).collect(Collectors.toList()); } + + public boolean updateStatus(Long deliveryId){ + return true; + } + + public boolean deleteLog(Long deliveryId){ + DeliveryRouteLog deliveryRouteLog = routLogJPaRepository.findById(deliveryId).orElseThrow(() -> + new NoSuchElementException("데이터가 존재하지 않습니다.")); + + deliveryRouteLog.deleteLog(deliveryRouteLog.getDeliveryIdx()); + return true; + } } diff --git a/src/test/java/com/tunaforce/message/SlackTest.java b/src/test/java/com/tunaforce/message/SlackTest.java new file mode 100644 index 0000000..0919b6c --- /dev/null +++ b/src/test/java/com/tunaforce/message/SlackTest.java @@ -0,0 +1,22 @@ +package com.tunaforce.message; + +import com.slack.api.methods.SlackApiException; +import com.tunaforce.message.cmmn.SlackMsg; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +public class SlackTest { + + @Test + @DisplayName("Slack Messaging Test") + public void SlackTest() throws SlackApiException, IOException { + SlackMsg slackMsg = new SlackMsg(); + String userId = "U08U19Q4N8M"; + String token = "xoxb-8953330136789-9365014243201-bCKjvQWu78vI76Uhgi62taDP"; + slackMsg.sendDirectMessage(token, userId, "Test"); + //Assertions.assertThat(slackMsg.sendDirectMessage(token, userId, "Test")); + } +} From ff40fba3b557d23a9ed198f64d73115dcb31a4fb Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 16 Aug 2025 16:29:44 +0900 Subject: [PATCH 04/29] =?UTF-8?q?add=20:=20=EB=B0=B0=EC=86=A1=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9A=94=EC=B2=AD=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tunaforce/message/MessageApplication.java | 2 ++ .../message/controller/LogController.java | 8 +++++-- .../dto/request/CreateRouteLogRequestDto.java | 16 ++++++++++++++ .../response/GetDeliveriesResponseDto.java | 21 +++++++++++++++++++ .../service/ClientDeliveryService.java | 14 +++++++++++++ 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/GetDeliveriesResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java diff --git a/src/main/java/com/tunaforce/message/MessageApplication.java b/src/main/java/com/tunaforce/message/MessageApplication.java index 3183e04..f370511 100644 --- a/src/main/java/com/tunaforce/message/MessageApplication.java +++ b/src/main/java/com/tunaforce/message/MessageApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication +@EnableFeignClients public class MessageApplication { public static void main(String[] args) { diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java index e35ef97..ca01263 100644 --- a/src/main/java/com/tunaforce/message/message/controller/LogController.java +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -1,7 +1,7 @@ package com.tunaforce.message.message.controller; import com.tunaforce.message.api.ApiResponse; -import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; +import com.tunaforce.message.message.dto.request.CreateRouteLogRequestDto; import com.tunaforce.message.message.dto.response.SearchLogResponseDto; import com.tunaforce.message.message.service.RoutLogService; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,8 +26,12 @@ public ResponseEntity>> getLogDatas(){ ApiResponse> resultDto = ApiResponse.success(tempList); return ResponseEntity.ok(resultDto); } + + //해당 테이블의 생성 시점을 확인할 필요가 있음 + //1, 각 허브에 배송 물건이 도착 했을 경우 routelog 테이블의 생성이 필요함 - @다예(배송 MSA) 허브 도착 시에 + //2. 당일 배송 담당자를 할당 후 생성 @PostMapping - public ResponseEntity>> createLogDatas(@RequestBody CreateMessageLogRequestDto createMessageLogRequestDto){ + public ResponseEntity>> createLogDatas(@RequestBody CreateRouteLogRequestDto routRequests){ } //deliveryID 값으로 검색하여 해당 값을 받아 수정 diff --git a/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java index 5f82337..b253fae 100644 --- a/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java @@ -1,4 +1,20 @@ package com.tunaforce.message.message.dto.request; +import jakarta.persistence.Column; + +import java.util.UUID; + public class CreateRouteLogRequestDto { + private UUID deliveryIdx; + //배송 ID + private UUID deliveryId; + //허브 ID : 배송 테이블 내에 주소가 포함이 되어 있지만 허브ID로 배송 소속 기사 검색을 위함 + private UUID hubId; + //배송 목적지 ID + private UUID companyId; + //네이버API를 사용한 예상 거리 및 시간를 기록 + private String appxDistance; + private String appxTime; + //초기 테이블 생성 시 값은 배송 중으로 고정 + private String currstatus; } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/GetDeliveriesResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/GetDeliveriesResponseDto.java new file mode 100644 index 0000000..a45fb6a --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/GetDeliveriesResponseDto.java @@ -0,0 +1,21 @@ +package com.tunaforce.message.message.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.UUID; + +@Getter +@AllArgsConstructor +public class GetDeliveriesResponseDto { + private Long delivery_id; + private String status; + private Long departure_hub_id; + private Long arrival_hub_id; + private String delivery_address; + private UUID received_userid; + private String received_slackid; + private Long agent_id; + private Long user_id; + private UUID order_id; +} diff --git a/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java b/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java new file mode 100644 index 0000000..580d4b3 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java @@ -0,0 +1,14 @@ +package com.tunaforce.message.message.service; + + +import com.tunaforce.message.message.dto.response.GetDeliveriesResponseDto; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.List; + +@FeignClient(name="delivery-service", url="${DeliveryFeign.url}") +public interface ClientDeliveryService { + @GetMapping("/deliverys") + public List getListDelivery(); +} From b8fafa45f2353fd52c2f25cede1de43c6041d523 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 16 Aug 2025 19:16:11 +0900 Subject: [PATCH 05/29] =?UTF-8?q?add=20:=20=EB=84=A4=EC=9D=B4=EB=B2=84=20D?= =?UTF-8?q?irection=205=20=EB=B0=B0=EC=86=A1=20=EB=A3=A8=ED=8A=B8=20dto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tunaforce/message/cmmn/NaverRouteAPI.java | 48 +++++++++++++++++++ .../message/controller/LogController.java | 4 +- 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java diff --git a/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java b/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java new file mode 100644 index 0000000..adb74d2 --- /dev/null +++ b/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java @@ -0,0 +1,48 @@ +package com.tunaforce.message.cmmn; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@AllArgsConstructor +public class NaverRouteAPI { + //필수 필드만 추가 + // 출발지 + //출발지(경도,위도) + //<예시> start=127.12345,37.12345 + private String start; + // 도착지 + //목적지(경도,위도) + //':'로 구분하여 최대 10개의 목적지 입력 가능 + //입력한 목적지 중 가장 적은 비용으로 도달할 수 있는 목적지에 대한 경로 조회 <예시> goal=123.45678,34.56789:124.56789,35.67890 + private String goal; + //추후 리팩토링 시 추가 + //경유지 +// private String waypoints; + //경로 조회 옵션 + //trafast | tracomfort | traoptimal (기본값) | traavoidtoll | traavoidcaronly + //trafast : 실시간 빠른 길 + //tracomfort : 실시간 편한 길 + //traoptimal : 실시간 최적 + //traavoidtoll : 무료 우선 + //traavoidcaronly : 자동차 전용 도로 회피 우선 +// private String option; + //차량 타입 + //1 (기본값) | 2 | 3 | 4 | 5 | 6 + //1 : 1종 소형차 2축 차량(윤폭 279.4 mm 이하 승용차, 소형 승합차, 소형 화물차) + //2 : 2종 2축 차량(윤폭 279.4 mm 초과, 윤거 1,800 mm 이하 중형 승합차, 중형 화물차) 3 : 3종 대형차 2축 차량(윤폭 279.4 mm 초과, 윤거 1,800 mm 초과 대형 승합차, 2축 대형 + //화물차) + //4 : 4종 3축 대형 화물차 + //5 : 5종 4축 이상 특수 화물차 + //6 : 1종 경형 자동차(배기량 1000 cc 미만으로 길이 3.6 m, 너비 1.6 m, 높이 2.0 m 이하) +// private String cartype; + //연료 타입 + // asoline (기본값) | highgradegasoline | diesel | lpg + // gasoline : 휘발유 + // highgradegasoline : 고급 휘발유 + // diesel : 경유 + // lpg : LPG + // 유류비 계산에 활용 +// private String fueltype; +} diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java index ca01263..1e15965 100644 --- a/src/main/java/com/tunaforce/message/message/controller/LogController.java +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -32,7 +32,7 @@ public ResponseEntity>> getLogDatas(){ //2. 당일 배송 담당자를 할당 후 생성 @PostMapping public ResponseEntity>> createLogDatas(@RequestBody CreateRouteLogRequestDto routRequests){ - + return ResponseEntity.ok(null); } //deliveryID 값으로 검색하여 해당 값을 받아 수정 //수정되는 값은 실제 데이터의 update : real_distance, real_time, curr_status @@ -46,7 +46,7 @@ public ResponseEntity> updateLogRealData(@RequestParam Long //deliveryID 값으로 검색하여 해당 값을 받아 삭제 @DeleteMapping public ResponseEntity> deleteLogDatas(@RequestParam String deliveryId ){ - + return ResponseEntity.ok(null); } } From c0efea4353c2c45052cba8f819f7cb9b2d2e6657 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 16 Aug 2025 23:41:27 +0900 Subject: [PATCH 06/29] =?UTF-8?q?add=20:=20=EB=84=A4=EC=9D=B4=EB=B2=84=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20dto=20=EB=B0=8F=20=EC=9A=94=EC=B2=AD=20dto?= =?UTF-8?q?=20fix=20:=20Naver=20Uri=20=EC=8A=A4=ED=8A=B8=EB=A7=81=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=ED=95=A8=EC=88=98=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EB=82=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tunaforce/message/cmmn/NaverRouteAPI.java | 60 ++++++++++--------- .../dto/response/MapRouteResponseDto.java | 5 ++ .../message/service/ClientNaverApi.java | 11 ++++ 3 files changed, 48 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/MapRouteResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/service/ClientNaverApi.java diff --git a/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java b/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java index adb74d2..327d786 100644 --- a/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java +++ b/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java @@ -2,47 +2,51 @@ import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.RequiredArgsConstructor; @Getter @AllArgsConstructor public class NaverRouteAPI { //필수 필드만 추가 // 출발지 - //출발지(경도,위도) - //<예시> start=127.12345,37.12345 + //출발지(경도,위도) + //<예시> start=127.12345,37.12345 private String start; // 도착지 //목적지(경도,위도) - //':'로 구분하여 최대 10개의 목적지 입력 가능 - //입력한 목적지 중 가장 적은 비용으로 도달할 수 있는 목적지에 대한 경로 조회 <예시> goal=123.45678,34.56789:124.56789,35.67890 + //':'로 구분하여 최대 10개의 목적지 입력 가능 + //입력한 목적지 중 가장 적은 비용으로 도달할 수 있는 목적지에 대한 경로 조회 <예시> goal=123.45678,34.56789:124.56789,35.67890 private String goal; //추후 리팩토링 시 추가 - //경유지 + //경유지 // private String waypoints; - //경로 조회 옵션 - //trafast | tracomfort | traoptimal (기본값) | traavoidtoll | traavoidcaronly - //trafast : 실시간 빠른 길 - //tracomfort : 실시간 편한 길 - //traoptimal : 실시간 최적 - //traavoidtoll : 무료 우선 - //traavoidcaronly : 자동차 전용 도로 회피 우선 + //경로 조회 옵션 + //trafast | tracomfort | traoptimal (기본값) | traavoidtoll | traavoidcaronly + //trafast : 실시간 빠른 길 + //tracomfort : 실시간 편한 길 + //traoptimal : 실시간 최적 + //traavoidtoll : 무료 우선 + //traavoidcaronly : 자동차 전용 도로 회피 우선 // private String option; - //차량 타입 - //1 (기본값) | 2 | 3 | 4 | 5 | 6 - //1 : 1종 소형차 2축 차량(윤폭 279.4 mm 이하 승용차, 소형 승합차, 소형 화물차) - //2 : 2종 2축 차량(윤폭 279.4 mm 초과, 윤거 1,800 mm 이하 중형 승합차, 중형 화물차) 3 : 3종 대형차 2축 차량(윤폭 279.4 mm 초과, 윤거 1,800 mm 초과 대형 승합차, 2축 대형 - //화물차) - //4 : 4종 3축 대형 화물차 - //5 : 5종 4축 이상 특수 화물차 - //6 : 1종 경형 자동차(배기량 1000 cc 미만으로 길이 3.6 m, 너비 1.6 m, 높이 2.0 m 이하) + //차량 타입 + //1 (기본값) | 2 | 3 | 4 | 5 | 6 + //1 : 1종 소형차 2축 차량(윤폭 279.4 mm 이하 승용차, 소형 승합차, 소형 화물차) + //2 : 2종 2축 차량(윤폭 279.4 mm 초과, 윤거 1,800 mm 이하 중형 승합차, 중형 화물차) 3 : 3종 대형차 2축 차량(윤폭 279.4 mm 초과, 윤거 1,800 mm 초과 대형 승합차, 2축 대형 + //화물차) + //4 : 4종 3축 대형 화물차 + //5 : 5종 4축 이상 특수 화물차 + //6 : 1종 경형 자동차(배기량 1000 cc 미만으로 길이 3.6 m, 너비 1.6 m, 높이 2.0 m 이하) // private String cartype; - //연료 타입 - // asoline (기본값) | highgradegasoline | diesel | lpg - // gasoline : 휘발유 - // highgradegasoline : 고급 휘발유 - // diesel : 경유 - // lpg : LPG - // 유류비 계산에 활용 + //연료 타입 + // asoline (기본값) | highgradegasoline | diesel | lpg + // gasoline : 휘발유 + // highgradegasoline : 고급 휘발유 + // diesel : 경유 + // lpg : LPG + // 유류비 계산에 활용 // private String fueltype; + + public String returnQueryUri() { + return "?start=" + this.start + "&goal=" + this.goal; + } + } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/MapRouteResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/MapRouteResponseDto.java new file mode 100644 index 0000000..c1dfb7f --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/MapRouteResponseDto.java @@ -0,0 +1,5 @@ +package com.tunaforce.message.message.dto.response; + + +public class MapRouteResponseDto { +} diff --git a/src/main/java/com/tunaforce/message/message/service/ClientNaverApi.java b/src/main/java/com/tunaforce/message/message/service/ClientNaverApi.java new file mode 100644 index 0000000..deac97a --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/ClientNaverApi.java @@ -0,0 +1,11 @@ +package com.tunaforce.message.message.service; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +@FeignClient(name = "NaverMap", url = " https://naveropenapi.apigw.ntruss.com/map-direction/v1") +public interface ClientNaverApi { + @GetMapping("/driving") + + +} From 5155840001258993fbdd387eb004332caa571874 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sun, 17 Aug 2025 00:22:42 +0900 Subject: [PATCH 07/29] Remove application.yml from a git --- src/main/resources/application.properties | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 src/main/resources/application.properties diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index c689a27..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,9 +0,0 @@ -spring.application.name=message - - - - -springdoc.swagger-ui.path=/swagger-ui.html -springdoc.api-docs.path=/v3/api-docs -springdoc.swagger-ui.operations-sorter=alpha -springdoc.swagger-ui.tags-sorter=alpha From 26960f2c3230070ada0fd0c374de07ccc32c06b6 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sun, 17 Aug 2025 20:25:04 +0900 Subject: [PATCH 08/29] =?UTF-8?q?add=20:=20UserInformationResponseDto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80(=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EB=AA=A9=EC=A0=81)=20error=20:=20Naver=20=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=EC=9A=A9=20=EC=A0=95=EB=B3=B4=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=9C=20=EC=9D=B8=EC=A6=9D=EC=9D=B4=20=EC=95=88=EB=90=A8?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=B4=EB=A5=98=20add=20:=20eureka=20?= =?UTF-8?q?=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8=ED=8A=B8=20=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=93=A4=20=EC=B6=94=EA=B0=80=20add=20:=20sql=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20yml=EC=97=90=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80=20chore=20:=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20controller=20CRUD=20=EC=9E=91=EC=84=B1=20chore=20:?= =?UTF-8?q?=20MessageController=EB=82=B4=EC=97=90=20SendMessage=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EC=B6=94=EA=B0=80=20add=20:=20MasterToken=20?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=20=EC=B6=94=EA=B0=80,=20Token=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=20=EB=A0=88=ED=8F=AC=EC=A7=80=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20=ED=85=8C=EC=9D=B4=EB=B8=94=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- build.gradle | 1 + .../tunaforce/message/MessageApplication.java | 2 + .../message/cmmn/CoordinatesData.java | 18 +++++++ .../{NaverRouteAPI.java => RouteData.java} | 2 +- .../message/config/AuditorAwareImpl.java | 3 +- .../tunaforce/message/config/JpaConfig.java | 6 +-- .../message/controller/LogController.java | 9 +++- .../message/controller/MessageController.java | 31 +++++++++++- .../request/CreateMessageLogRequestDto.java | 3 +- .../dto/request/CreateRouteLogRequestDto.java | 2 - .../response/CreateMessageLogResponseDto.java | 18 +++++++ .../response/UserInformationResponseDto.java | 16 +++++++ .../message/message/entity/MasterToken.java | 25 ++++++++++ .../repository/RoutLogJPaRepository.java | 5 +- .../repository/TokenKeyJpaRepository.java | 10 ++++ .../service/ClientCoordinatesService.java | 32 +++++++++++++ .../service/ClientDeliveryService.java | 2 + .../message/service/ClientNaverApi.java | 11 ----- .../message/service/MessageService.java | 48 +++++++++++++++++++ .../message/service/RoutLogService.java | 2 +- .../tunaforce/message/GetCoordinatesTest.java | 32 +++++++++++++ 22 files changed, 253 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java rename src/main/java/com/tunaforce/message/cmmn/{NaverRouteAPI.java => RouteData.java} (98%) create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/CreateMessageLogResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/entity/MasterToken.java create mode 100644 src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java create mode 100644 src/main/java/com/tunaforce/message/message/service/ClientCoordinatesService.java delete mode 100644 src/main/java/com/tunaforce/message/message/service/ClientNaverApi.java create mode 100644 src/main/java/com/tunaforce/message/message/service/MessageService.java create mode 100644 src/test/java/com/tunaforce/message/GetCoordinatesTest.java diff --git a/.gitignore b/.gitignore index c2065bc..3e1c923 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,8 @@ bin/ out/ !**/src/main/**/out/ !**/src/test/**/out/ - +*.yml +/application.yml ### NetBeans ### /nbproject/private/ /nbbuild/ diff --git a/build.gradle b/build.gradle index 8a9951d..7cd3b5b 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,7 @@ dependencies { implementation 'com.slack.api:slack-api-client:1.25.0' implementation 'com.google.code.gson:gson:2.8.9' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0' + implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' } dependencyManagement { diff --git a/src/main/java/com/tunaforce/message/MessageApplication.java b/src/main/java/com/tunaforce/message/MessageApplication.java index f370511..0bb3717 100644 --- a/src/main/java/com/tunaforce/message/MessageApplication.java +++ b/src/main/java/com/tunaforce/message/MessageApplication.java @@ -2,10 +2,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients +@EnableDiscoveryClient public class MessageApplication { public static void main(String[] args) { diff --git a/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java b/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java new file mode 100644 index 0000000..2e87216 --- /dev/null +++ b/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java @@ -0,0 +1,18 @@ +package com.tunaforce.message.cmmn; + + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; + +//네이버 페인 클라이언트 인터페이스 +@FeignClient(name = "naverGeocode", url = "https://naveropenapi.apigw.ntruss.com") +public interface CoordinatesData { + @GetMapping("/map-geocode/v2/geocode") + String getGeocode( + @RequestHeader("X-NCP-APIGW-API-KEY-ID") String clientId, + @RequestHeader("X-NCP-APIGW-API-KEY") String clientSecret, + @RequestParam("query") String address + ); +} diff --git a/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java b/src/main/java/com/tunaforce/message/cmmn/RouteData.java similarity index 98% rename from src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java rename to src/main/java/com/tunaforce/message/cmmn/RouteData.java index 327d786..5f7b550 100644 --- a/src/main/java/com/tunaforce/message/cmmn/NaverRouteAPI.java +++ b/src/main/java/com/tunaforce/message/cmmn/RouteData.java @@ -5,7 +5,7 @@ @Getter @AllArgsConstructor -public class NaverRouteAPI { +public class RouteData { //필수 필드만 추가 // 출발지 //출발지(경도,위도) diff --git a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java index 187e413..61eb36e 100644 --- a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java +++ b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java @@ -1,11 +1,10 @@ package com.tunaforce.message.config; import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; import java.util.Optional; -@Component + public class AuditorAwareImpl implements AuditorAware { @Override diff --git a/src/main/java/com/tunaforce/message/config/JpaConfig.java b/src/main/java/com/tunaforce/message/config/JpaConfig.java index 8c63930..ba8b7d6 100644 --- a/src/main/java/com/tunaforce/message/config/JpaConfig.java +++ b/src/main/java/com/tunaforce/message/config/JpaConfig.java @@ -1,14 +1,12 @@ package com.tunaforce.message.config; -import org.springframework.context.annotation.Bean; import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; -@Component + public class JpaConfig { - @Bean + public AuditorAware auditorProvider() { return new AuditorAwareImpl(); } diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java index 1e15965..01e7a6f 100644 --- a/src/main/java/com/tunaforce/message/message/controller/LogController.java +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -3,6 +3,7 @@ import com.tunaforce.message.api.ApiResponse; import com.tunaforce.message.message.dto.request.CreateRouteLogRequestDto; import com.tunaforce.message.message.dto.response.SearchLogResponseDto; +import com.tunaforce.message.message.service.ClientCoordinatesService; import com.tunaforce.message.message.service.RoutLogService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -18,10 +19,13 @@ public class LogController { private final RoutLogService routLogService; + private final ClientCoordinatesService ccs; @GetMapping - public ResponseEntity>> getLogDatas(){ - + public ResponseEntity>> getLogDatas() throws Exception { + String Id = "s6m0vmxur3"; + String Key = "9y18o5DVhbDAa9PqKdIs82WlzdhiNJIzuniTRYKT"; + var resultsData = ccs.getCoordinates(Id, Key, "대구 비산동 320-9"); List tempList = routLogService.readAllLog(); ApiResponse> resultDto = ApiResponse.success(tempList); return ResponseEntity.ok(resultDto); @@ -32,6 +36,7 @@ public ResponseEntity>> getLogDatas(){ //2. 당일 배송 담당자를 할당 후 생성 @PostMapping public ResponseEntity>> createLogDatas(@RequestBody CreateRouteLogRequestDto routRequests){ + return ResponseEntity.ok(null); } //deliveryID 값으로 검색하여 해당 값을 받아 수정 diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index 2ffc59b..7503cdf 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -1,12 +1,39 @@ package com.tunaforce.message.message.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.slack.api.methods.SlackApiException; +import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.cmmn.SlackMsg; +import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; +import com.tunaforce.message.message.dto.response.CreateMessageLogResponseDto; +import com.tunaforce.message.message.dto.response.UserInformationResponseDto; +import com.tunaforce.message.message.entity.MasterToken; +import com.tunaforce.message.message.repository.TokenKeyJpaRepository; +import com.tunaforce.message.message.service.ClientAuthService; +import com.tunaforce.message.message.service.MessageService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; @RestController +@RequiredArgsConstructor @RequestMapping("/messages") public class MessageController { + private final MessageService messageService; + @PostMapping + public ResponseEntity> sendMessage ( + @RequestBody CreateMessageLogRequestDto createMessageLogRequestDto, + @RequestHeader("userId") Long senderId + + ) throws SlackApiException, IOException { + //헤더 값과 파라미터 값의 각각의 user_id를 받아서 feignClient로 auth에서 사용자 정보를 반환 + //senderId와 createMessageLogRequestDto.receiverId를 각각 페인클라이언트에서 정보값을 반환 + ApiResponse resultDto = ApiResponse.success(messageService.sendMessage(senderId, createMessageLogRequestDto)); + return ResponseEntity.ok(resultDto); + } } diff --git a/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java index ec93189..1b3c175 100644 --- a/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java @@ -2,7 +2,8 @@ public record CreateMessageLogRequestDto( String content, - Long senderId, + //Sender의 경우 헤더에 포함된 user_id로 구분 + //Long senderId, Long receiverId ) { diff --git a/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java index b253fae..05d332e 100644 --- a/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/request/CreateRouteLogRequestDto.java @@ -1,7 +1,5 @@ package com.tunaforce.message.message.dto.request; -import jakarta.persistence.Column; - import java.util.UUID; public class CreateRouteLogRequestDto { diff --git a/src/main/java/com/tunaforce/message/message/dto/response/CreateMessageLogResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/CreateMessageLogResponseDto.java new file mode 100644 index 0000000..b6ab29a --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/CreateMessageLogResponseDto.java @@ -0,0 +1,18 @@ +package com.tunaforce.message.message.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CreateMessageLogResponseDto { + private String senderId; + private String content; + private String receiverId; + + + public String getFormMessage(){ + return "From. " + senderId + + " -> " + content; + } +} diff --git a/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java new file mode 100644 index 0000000..3b7eade --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java @@ -0,0 +1,16 @@ +package com.tunaforce.message.message.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class UserInformationResponseDto { + private Long userId; + private String name; + private String slackId; + private String role; + private String deptId; +} diff --git a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java b/src/main/java/com/tunaforce/message/message/entity/MasterToken.java new file mode 100644 index 0000000..009a0ec --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/entity/MasterToken.java @@ -0,0 +1,25 @@ +package com.tunaforce.message.message.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@Table(name = "p_master_tokens") +@NoArgsConstructor +@AllArgsConstructor +public class MasterToken { + @Id + private Long userId; + @Column(length = 150, name = "map_id") + private String mapAuthId; + @Column(length = 150, name = "map_key") + private String mapAuthKey; + @Column(length = 150, name = "message_token") + private String messageAppToken; +} diff --git a/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java b/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java index 74f2ae2..40f2417 100644 --- a/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java +++ b/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java @@ -3,12 +3,15 @@ import com.tunaforce.message.message.entity.DeliveryRouteLog; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; import java.util.List; import java.util.Optional; import java.util.UUID; -public interface RoutLogJPaRepository extends JpaRepository { +@Repository +public interface RoutLogJPaRepository extends JpaRepository { + @Query("SELECT D FROM DeliveryRouteLog D WHERE D.deliveryId = :deliveryId") Optional> findDeliveryRouteLogByDeliveryId(UUID deliveryId); } diff --git a/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java b/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java new file mode 100644 index 0000000..afe2098 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java @@ -0,0 +1,10 @@ +package com.tunaforce.message.message.repository; + +import com.tunaforce.message.message.entity.MasterToken; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TokenKeyJpaRepository extends JpaRepository { + +} diff --git a/src/main/java/com/tunaforce/message/message/service/ClientCoordinatesService.java b/src/main/java/com/tunaforce/message/message/service/ClientCoordinatesService.java new file mode 100644 index 0000000..3c5c616 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/ClientCoordinatesService.java @@ -0,0 +1,32 @@ +package com.tunaforce.message.message.service; + +import com.tunaforce.message.cmmn.CoordinatesData; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class ClientCoordinatesService { + private final CoordinatesData coordinatesData; + + public String[] getCoordinates(String clientId, String clientSecret, String address) throws Exception { + String result = coordinatesData.getGeocode( + clientId, + clientSecret, + address + ); + log.info("the Data from Naver : " + result); + // JSON 파싱 (Jackson 등 사용) + com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper(); + com.fasterxml.jackson.databind.JsonNode root = mapper.readTree(result); + if (root.path("addresses").isArray() && root.path("addresses").size() > 0) { + com.fasterxml.jackson.databind.JsonNode addr = root.path("addresses").get(0); + String x = addr.get("x").asText(); // 경도 + String y = addr.get("y").asText(); // 위도 + return new String[]{x, y}; + } + return null; + } +} diff --git a/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java b/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java index 580d4b3..f45f2f2 100644 --- a/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java +++ b/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java @@ -3,10 +3,12 @@ import com.tunaforce.message.message.dto.response.GetDeliveriesResponseDto; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; import java.util.List; +@Service @FeignClient(name="delivery-service", url="${DeliveryFeign.url}") public interface ClientDeliveryService { @GetMapping("/deliverys") diff --git a/src/main/java/com/tunaforce/message/message/service/ClientNaverApi.java b/src/main/java/com/tunaforce/message/message/service/ClientNaverApi.java deleted file mode 100644 index deac97a..0000000 --- a/src/main/java/com/tunaforce/message/message/service/ClientNaverApi.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tunaforce.message.message.service; - -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; - -@FeignClient(name = "NaverMap", url = " https://naveropenapi.apigw.ntruss.com/map-direction/v1") -public interface ClientNaverApi { - @GetMapping("/driving") - - -} diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java new file mode 100644 index 0000000..f243b6e --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/MessageService.java @@ -0,0 +1,48 @@ +package com.tunaforce.message.message.service; + +import com.slack.api.methods.SlackApiException; +import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.cmmn.SlackMsg; +import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; +import com.tunaforce.message.message.dto.response.CreateMessageLogResponseDto; +import com.tunaforce.message.message.dto.response.UserInformationResponseDto; +import com.tunaforce.message.message.entity.MasterToken; +import com.tunaforce.message.message.repository.TokenKeyJpaRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +@Service +@RequiredArgsConstructor +public class MessageService { + private final TokenKeyJpaRepository tokenKeyJpaRepository; + + private final ClientAuthService clientAuthService; + //슬랙 앱으로 보내는 함수 사용 + private final SlackMsg slackMsg; + + public CreateMessageLogResponseDto sendMessage(Long senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { + UserInformationResponseDto senderAppId = clientAuthService.getUserInfo(senderId); + UserInformationResponseDto receiverAppId = clientAuthService.getUserInfo(createMessageLogRequestDto.receiverId()); + //redis에 저장로직 추후 추가 + + //받은 값과 조회한 값을 기준으로 응답 데이터 만듬 + CreateMessageLogResponseDto resultData = new CreateMessageLogResponseDto( + senderAppId.getName(), + createMessageLogRequestDto.content(), + receiverAppId.getName() + ); + ApiResponse resultDto = ApiResponse.success(resultData); + //앱을 통한 메세지 송신 로직 구성 + + //토큰 받아오는 로직 + //이 테이블은 여러개의 값이 존재할 수 없음 + MasterToken tempKeys = tokenKeyJpaRepository.findAll().get(0); + + + slackMsg.sendDirectMessage(tempKeys.getMessageAppToken(), receiverAppId.getSlackId(), createMessageLogRequestDto.content()); + + return resultData; + } +} diff --git a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java index 171b386..c8f288e 100644 --- a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java +++ b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java @@ -35,7 +35,7 @@ public boolean updateStatus(Long deliveryId){ return true; } - public boolean deleteLog(Long deliveryId){ + public boolean deleteLog(UUID deliveryId){ DeliveryRouteLog deliveryRouteLog = routLogJPaRepository.findById(deliveryId).orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다.")); diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java new file mode 100644 index 0000000..998e4aa --- /dev/null +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -0,0 +1,32 @@ +package com.tunaforce.message; + +import com.tunaforce.message.message.service.ClientCoordinatesService; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.openfeign.EnableFeignClients; + +import java.util.Arrays; + + +@SpringBootTest +//@AutoConfigureWireMock(port = 0) // 랜덤 포트 WireMock 구동 +@EnableFeignClients +//@ActiveProfiles("test") +public class GetCoordinatesTest { + + @Autowired + private ClientCoordinatesService ccs; + + @Test + @DisplayName("경도 위도 데이터 수신 테스트") + void getCoordinatesTest() throws Exception { + + String Id = "s6m0vmxur3"; + String Key = "9y18o5DVhbDAa9PqKdIs82WlzdhiNJIzuniTRYKT"; + + var resultsData = ccs.getCoordinates( Id, Key,"대구 비산동 320-9"); + System.out.println("resultsData = " + Arrays.toString(resultsData)); + } +} From 760ed540c2fa22ceff4baed31c7249c2ba3dec04 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sun, 17 Aug 2025 20:42:50 +0900 Subject: [PATCH 09/29] =?UTF-8?q?error=20:=20=EC=BB=A4=EB=B0=8B=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tunaforce/message/api/ApiExceptionAdvice.java | 4 ++-- .../message/config/MessageAppConfig.java | 11 ----------- .../dto/request/CreateMessageLogRequestDto.java | 2 +- .../message/service/ClientAuthService.java | 15 +++++++++++++++ 4 files changed, 18 insertions(+), 14 deletions(-) delete mode 100644 src/main/java/com/tunaforce/message/config/MessageAppConfig.java create mode 100644 src/main/java/com/tunaforce/message/message/service/ClientAuthService.java diff --git a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java index 2e5447a..b0d91f5 100644 --- a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java +++ b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java @@ -49,8 +49,8 @@ public ResponseEntity> notFoundExceptionHandler(HttpServletR @ExceptionHandler(SlackApiException.class) public ResponseEntity> slackApiExceptionHandler(HttpServletRequest request, final SlackApiException slackApiException) { ApiResponse apiResponse = ApiResponse.builder() - .status(ApiStatus.FORBIDDEN.getStatusCode()) - .message(ApiStatus.FORBIDDEN.getMessage()) + .status(ApiStatus.NOT_FOUND.getStatusCode()) + .message(ApiStatus.NOT_FOUND.getMessage()) .errors(slackApiException.getMessage()) .build(); diff --git a/src/main/java/com/tunaforce/message/config/MessageAppConfig.java b/src/main/java/com/tunaforce/message/config/MessageAppConfig.java deleted file mode 100644 index 5a47bce..0000000 --- a/src/main/java/com/tunaforce/message/config/MessageAppConfig.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tunaforce.message.config; - -import com.tunaforce.message.cmmn.SlackMsg; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class MessageAppConfig { - SlackMsg slackMsg = new SlackMsg(); - - -} diff --git a/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java index 1b3c175..fdc41fd 100644 --- a/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java @@ -3,7 +3,7 @@ public record CreateMessageLogRequestDto( String content, //Sender의 경우 헤더에 포함된 user_id로 구분 - //Long senderId, + Long senderId, Long receiverId ) { diff --git a/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java b/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java new file mode 100644 index 0000000..f8e68a1 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java @@ -0,0 +1,15 @@ +package com.tunaforce.message.message.service; + + +import com.tunaforce.message.message.dto.response.UserInformationResponseDto; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(name = "auth-Service", url = "auth url 확인 후 기입") +public interface ClientAuthService { + //시용자 정보의 앱 ID가 필요 + @GetMapping("/users/{user_id}") + public UserInformationResponseDto getUserInfo(@PathVariable("user_id") Long userId); + +} From 3df42593a4dee66af9fcd95de82d393edf57123f Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sun, 17 Aug 2025 20:44:11 +0900 Subject: [PATCH 10/29] test --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3e1c923..ab8d764 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ out/ !**/src/test/**/out/ *.yml /application.yml +SwaggerConfig.java ### NetBeans ### /nbproject/private/ /nbbuild/ From e4d684cddce8dc5038eecd285161bf2f129d27ef Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sun, 17 Aug 2025 21:31:30 +0900 Subject: [PATCH 11/29] =?UTF-8?q?error=20:=20=EC=BB=A4=EB=B0=8B=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++- build.gradle | 1 + .../tunaforce/message/MessageApplication.java | 4 +++ .../message/api/ApiExceptionAdvice.java | 4 +-- .../message/config/AuditorAwareImpl.java | 3 +- .../tunaforce/message/config/JpaConfig.java | 6 ++-- .../message/controller/LogController.java | 35 ++++++++++++++++--- .../message/controller/MessageController.java | 31 ++++++++++++++-- .../message/entity/DeliveryRouteLog.java | 16 ++++++--- .../message/entity/MessageManagement.java | 10 +++--- .../repository/RoutLogJPaRepository.java | 12 ++++++- .../message/service/RoutLogService.java | 14 ++++++++ 12 files changed, 113 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index c2065bc..ab8d764 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,9 @@ bin/ out/ !**/src/main/**/out/ !**/src/test/**/out/ - +*.yml +/application.yml +SwaggerConfig.java ### NetBeans ### /nbproject/private/ /nbbuild/ diff --git a/build.gradle b/build.gradle index 8a9951d..7cd3b5b 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,7 @@ dependencies { implementation 'com.slack.api:slack-api-client:1.25.0' implementation 'com.google.code.gson:gson:2.8.9' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0' + implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' } dependencyManagement { diff --git a/src/main/java/com/tunaforce/message/MessageApplication.java b/src/main/java/com/tunaforce/message/MessageApplication.java index 3183e04..0bb3717 100644 --- a/src/main/java/com/tunaforce/message/MessageApplication.java +++ b/src/main/java/com/tunaforce/message/MessageApplication.java @@ -2,8 +2,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication +@EnableFeignClients +@EnableDiscoveryClient public class MessageApplication { public static void main(String[] args) { diff --git a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java index 2e5447a..b0d91f5 100644 --- a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java +++ b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java @@ -49,8 +49,8 @@ public ResponseEntity> notFoundExceptionHandler(HttpServletR @ExceptionHandler(SlackApiException.class) public ResponseEntity> slackApiExceptionHandler(HttpServletRequest request, final SlackApiException slackApiException) { ApiResponse apiResponse = ApiResponse.builder() - .status(ApiStatus.FORBIDDEN.getStatusCode()) - .message(ApiStatus.FORBIDDEN.getMessage()) + .status(ApiStatus.NOT_FOUND.getStatusCode()) + .message(ApiStatus.NOT_FOUND.getMessage()) .errors(slackApiException.getMessage()) .build(); diff --git a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java index 187e413..61eb36e 100644 --- a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java +++ b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java @@ -1,11 +1,10 @@ package com.tunaforce.message.config; import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; import java.util.Optional; -@Component + public class AuditorAwareImpl implements AuditorAware { @Override diff --git a/src/main/java/com/tunaforce/message/config/JpaConfig.java b/src/main/java/com/tunaforce/message/config/JpaConfig.java index 8c63930..ba8b7d6 100644 --- a/src/main/java/com/tunaforce/message/config/JpaConfig.java +++ b/src/main/java/com/tunaforce/message/config/JpaConfig.java @@ -1,14 +1,12 @@ package com.tunaforce.message.config; -import org.springframework.context.annotation.Bean; import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; -@Component + public class JpaConfig { - @Bean + public AuditorAware auditorProvider() { return new AuditorAwareImpl(); } diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java index 658c3c4..01e7a6f 100644 --- a/src/main/java/com/tunaforce/message/message/controller/LogController.java +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -1,14 +1,14 @@ package com.tunaforce.message.message.controller; import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.message.dto.request.CreateRouteLogRequestDto; import com.tunaforce.message.message.dto.response.SearchLogResponseDto; +import com.tunaforce.message.message.service.ClientCoordinatesService; import com.tunaforce.message.message.service.RoutLogService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -19,14 +19,39 @@ public class LogController { private final RoutLogService routLogService; + private final ClientCoordinatesService ccs; @GetMapping - public ResponseEntity>> getLogDatas(){ - + public ResponseEntity>> getLogDatas() throws Exception { + String Id = "s6m0vmxur3"; + String Key = "9y18o5DVhbDAa9PqKdIs82WlzdhiNJIzuniTRYKT"; + var resultsData = ccs.getCoordinates(Id, Key, "대구 비산동 320-9"); List tempList = routLogService.readAllLog(); ApiResponse> resultDto = ApiResponse.success(tempList); return ResponseEntity.ok(resultDto); } + //해당 테이블의 생성 시점을 확인할 필요가 있음 + //1, 각 허브에 배송 물건이 도착 했을 경우 routelog 테이블의 생성이 필요함 - @다예(배송 MSA) 허브 도착 시에 + //2. 당일 배송 담당자를 할당 후 생성 + @PostMapping + public ResponseEntity>> createLogDatas(@RequestBody CreateRouteLogRequestDto routRequests){ + + return ResponseEntity.ok(null); + } + //deliveryID 값으로 검색하여 해당 값을 받아 수정 + //수정되는 값은 실제 데이터의 update : real_distance, real_time, curr_status + //실제 총 거리와 시간이 기입되면 배송 완료라고 가정한다. + @PutMapping + public ResponseEntity> updateLogRealData(@RequestParam Long deliveryId ){ + Boolean tempList = routLogService.updateStatus(deliveryId); + ApiResponse resultDto = ApiResponse.success(tempList); + return ResponseEntity.ok(resultDto); + } + //deliveryID 값으로 검색하여 해당 값을 받아 삭제 + @DeleteMapping + public ResponseEntity> deleteLogDatas(@RequestParam String deliveryId ){ + return ResponseEntity.ok(null); + } } diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index 2ffc59b..7503cdf 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -1,12 +1,39 @@ package com.tunaforce.message.message.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.slack.api.methods.SlackApiException; +import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.cmmn.SlackMsg; +import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; +import com.tunaforce.message.message.dto.response.CreateMessageLogResponseDto; +import com.tunaforce.message.message.dto.response.UserInformationResponseDto; +import com.tunaforce.message.message.entity.MasterToken; +import com.tunaforce.message.message.repository.TokenKeyJpaRepository; +import com.tunaforce.message.message.service.ClientAuthService; +import com.tunaforce.message.message.service.MessageService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; @RestController +@RequiredArgsConstructor @RequestMapping("/messages") public class MessageController { + private final MessageService messageService; + @PostMapping + public ResponseEntity> sendMessage ( + @RequestBody CreateMessageLogRequestDto createMessageLogRequestDto, + @RequestHeader("userId") Long senderId + + ) throws SlackApiException, IOException { + //헤더 값과 파라미터 값의 각각의 user_id를 받아서 feignClient로 auth에서 사용자 정보를 반환 + //senderId와 createMessageLogRequestDto.receiverId를 각각 페인클라이언트에서 정보값을 반환 + ApiResponse resultDto = ApiResponse.success(messageService.sendMessage(senderId, createMessageLogRequestDto)); + return ResponseEntity.ok(resultDto); + } } diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java index 06ad1e9..bcd4ecf 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java @@ -6,22 +6,24 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.UUID; + @Getter @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "p_routeLog") -public class DeliveryRouteLog { +public class DeliveryRouteLog extends Timestamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long deliveryIdx; + private UUID deliveryIdx; @Column(name = "delivery_Id", nullable = false) - private String deliveryId; + private UUID deliveryId; @Column(name = "hub_Id", nullable = false) - private String hubId; + private UUID hubId; @Column(name = "company_Id", nullable = false) - private String companyId; + private UUID companyId; @Column(name = "appx_distance", nullable = false) private String appxDistance; @Column(name = "appx_Time", nullable = false) @@ -42,4 +44,8 @@ public void updateRealInfo(){ } + public void deleteLog(UUID deliveryId){ + delete(deliveryId); + } + } diff --git a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java index 26e340e..dc3ea6e 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java +++ b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java @@ -1,6 +1,6 @@ package com.tunaforce.message.message.entity; -import com.tunaforce.message.message.dto.request.CreateLogRequestDto; +import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; @@ -33,10 +33,10 @@ public MessageManagement(String content, Long senderId, Long receiverId) { this.receiverId = receiverId; } - public MessageManagement(CreateLogRequestDto createLogRequestDto) { - this.content = createLogRequestDto.content(); - this.senderId = createLogRequestDto.senderId(); - this.receiverId = createLogRequestDto.receiverId(); + public MessageManagement(CreateMessageLogRequestDto createMessageLogRequestDto) { + this.content = createMessageLogRequestDto.content(); + this.senderId = createMessageLogRequestDto.senderId(); + this.receiverId = createMessageLogRequestDto.receiverId(); } public void deleteMessageLog(UUID messageId) { diff --git a/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java b/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java index 9ca7e50..40f2417 100644 --- a/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java +++ b/src/main/java/com/tunaforce/message/message/repository/RoutLogJPaRepository.java @@ -2,6 +2,16 @@ import com.tunaforce.message.message.entity.DeliveryRouteLog; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; -public interface RoutLogJPaRepository extends JpaRepository { +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface RoutLogJPaRepository extends JpaRepository { + + @Query("SELECT D FROM DeliveryRouteLog D WHERE D.deliveryId = :deliveryId") + Optional> findDeliveryRouteLogByDeliveryId(UUID deliveryId); } diff --git a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java index c749132..c8f288e 100644 --- a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java +++ b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java @@ -8,6 +8,8 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.NoSuchElementException; +import java.util.UUID; import java.util.stream.Collectors; @Service @@ -28,4 +30,16 @@ public List readAllLog() { .build() ).collect(Collectors.toList()); } + + public boolean updateStatus(Long deliveryId){ + return true; + } + + public boolean deleteLog(UUID deliveryId){ + DeliveryRouteLog deliveryRouteLog = routLogJPaRepository.findById(deliveryId).orElseThrow(() -> + new NoSuchElementException("데이터가 존재하지 않습니다.")); + + deliveryRouteLog.deleteLog(deliveryRouteLog.getDeliveryIdx()); + return true; + } } From decf54440219193aaa398f8f71acae610dbba7ee Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sun, 17 Aug 2025 22:24:37 +0900 Subject: [PATCH 12/29] =?UTF-8?q?fix=20:=20SQL=20=ED=82=A4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EC=8B=9C=20UUID=20=EA=B0=92=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=20=EC=98=88=EC=A0=9C=20=EA=B2=80=EC=83=89=20=ED=9B=84=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/message/controller/MessageController.java | 11 ++--------- .../message/message/entity/DeliveryRouteLog.java | 4 ++-- .../tunaforce/message/message/entity/MasterToken.java | 7 +++---- .../message/message/service/ClientAuthService.java | 4 ++-- 4 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index 7503cdf..1ed2f1b 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -3,16 +3,10 @@ import com.slack.api.methods.SlackApiException; import com.tunaforce.message.api.ApiResponse; -import com.tunaforce.message.cmmn.SlackMsg; import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; import com.tunaforce.message.message.dto.response.CreateMessageLogResponseDto; -import com.tunaforce.message.message.dto.response.UserInformationResponseDto; -import com.tunaforce.message.message.entity.MasterToken; -import com.tunaforce.message.message.repository.TokenKeyJpaRepository; -import com.tunaforce.message.message.service.ClientAuthService; import com.tunaforce.message.message.service.MessageService; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -28,12 +22,11 @@ public class MessageController { public ResponseEntity> sendMessage ( @RequestBody CreateMessageLogRequestDto createMessageLogRequestDto, @RequestHeader("userId") Long senderId - ) throws SlackApiException, IOException { + ApiResponse resultDto = + ApiResponse.success(messageService.sendMessage(senderId, createMessageLogRequestDto)); //헤더 값과 파라미터 값의 각각의 user_id를 받아서 feignClient로 auth에서 사용자 정보를 반환 //senderId와 createMessageLogRequestDto.receiverId를 각각 페인클라이언트에서 정보값을 반환 - ApiResponse resultDto = ApiResponse.success(messageService.sendMessage(senderId, createMessageLogRequestDto)); - return ResponseEntity.ok(resultDto); } } diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java index bcd4ecf..412a7cf 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java @@ -5,7 +5,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; - import java.util.UUID; @Getter @@ -16,7 +15,8 @@ public class DeliveryRouteLog extends Timestamped { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GeneratedValue(generator = "UUID") + @Column(name = "deliveryIdx", updatable = false, nullable = false) private UUID deliveryIdx; @Column(name = "delivery_Id", nullable = false) private UUID deliveryId; diff --git a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java b/src/main/java/com/tunaforce/message/message/entity/MasterToken.java index 009a0ec..728c130 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java +++ b/src/main/java/com/tunaforce/message/message/entity/MasterToken.java @@ -1,9 +1,6 @@ package com.tunaforce.message.message.entity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -15,7 +12,9 @@ @AllArgsConstructor public class MasterToken { @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long userId; + @Column(length = 150, name = "map_id") private String mapAuthId; @Column(length = 150, name = "map_key") diff --git a/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java b/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java index f8e68a1..a010cec 100644 --- a/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java +++ b/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java @@ -6,10 +6,10 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -@FeignClient(name = "auth-Service", url = "auth url 확인 후 기입") +@FeignClient(name = "auth-Service", url = "${Naver.API.Geocoding}") public interface ClientAuthService { //시용자 정보의 앱 ID가 필요 @GetMapping("/users/{user_id}") - public UserInformationResponseDto getUserInfo(@PathVariable("user_id") Long userId); + UserInformationResponseDto getUserInfo(@PathVariable("user_id") Long userId); } From a7733040dedf8c1618a48d68b141e70a031df03e Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sun, 17 Aug 2025 23:11:48 +0900 Subject: [PATCH 13/29] =?UTF-8?q?fix=20:=20SQL=20=ED=82=A4=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EC=8B=9C=20UUID=20=EA=B0=92=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=20=EC=98=88=EC=A0=9C=20=EA=B2=80=EC=83=89=20=ED=9B=84=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/message/entity/DeliveryRouteLog.java | 10 ++++++++-- src/test/java/com/tunaforce/message/SlackTest.java | 9 +++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java index 06ad1e9..6427e6f 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java @@ -6,16 +6,18 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.UUID; + @Getter @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "p_routeLog") -public class DeliveryRouteLog { +public class DeliveryRouteLog extends Timestamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long deliveryIdx; + private UUID deliveryIdx; @Column(name = "delivery_Id", nullable = false) private String deliveryId; @Column(name = "hub_Id", nullable = false) @@ -42,4 +44,8 @@ public void updateRealInfo(){ } + public void deleteLog(UUID deliveryId){ + delete(deliveryId); + } + } diff --git a/src/test/java/com/tunaforce/message/SlackTest.java b/src/test/java/com/tunaforce/message/SlackTest.java index 0919b6c..8d66d45 100644 --- a/src/test/java/com/tunaforce/message/SlackTest.java +++ b/src/test/java/com/tunaforce/message/SlackTest.java @@ -2,21 +2,26 @@ import com.slack.api.methods.SlackApiException; import com.tunaforce.message.cmmn.SlackMsg; +import com.tunaforce.message.message.service.MessageService; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.io.IOException; + public class SlackTest { + @Test @DisplayName("Slack Messaging Test") public void SlackTest() throws SlackApiException, IOException { SlackMsg slackMsg = new SlackMsg(); String userId = "U08U19Q4N8M"; - String token = "xoxb-8953330136789-9365014243201-bCKjvQWu78vI76Uhgi62taDP"; - slackMsg.sendDirectMessage(token, userId, "Test"); + String token = "xoxb-8953330136789-9365014243201-aBZLUFfIsQkid5JXZr9a22aV"; + slackMsg.sendDirectMessage(token, userId, "Writing Test"); //Assertions.assertThat(slackMsg.sendDirectMessage(token, userId, "Test")); } } From 0ebaebdde03205b0794a3bf3318df88abf758bef Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Mon, 18 Aug 2025 14:26:26 +0900 Subject: [PATCH 14/29] =?UTF-8?q?fix=20:=20MapKeyRequestDto=20Valid=20NotN?= =?UTF-8?q?ull=20=EC=84=A0=EC=96=B8=20add=20:=20Controller=20Registration?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/RegistrationController.java | 60 +++++++++++++++ .../message/dto/request/MapKeyRequestDto.java | 17 ++++ .../dto/response/MapKeyReesponseDto.java | 25 ++++++ .../message/message/entity/MasterToken.java | 30 +++++++- .../repository/TokenKeyJpaRepository.java | 4 +- .../message/service/RegistrationService.java | 77 +++++++++++++++++++ 6 files changed, 208 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/controller/RegistrationController.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/request/MapKeyRequestDto.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/service/RegistrationService.java diff --git a/src/main/java/com/tunaforce/message/message/controller/RegistrationController.java b/src/main/java/com/tunaforce/message/message/controller/RegistrationController.java new file mode 100644 index 0000000..086a28f --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/controller/RegistrationController.java @@ -0,0 +1,60 @@ +package com.tunaforce.message.message.controller; + +import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.message.dto.request.MapKeyRequestDto; +import com.tunaforce.message.message.dto.response.MapKeyReesponseDto; +import com.tunaforce.message.message.service.RegistrationService; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.resource.NoResourceFoundException; + +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("/token") +@RequiredArgsConstructor +public class RegistrationController { + + private final RegistrationService registrationService; + + @GetMapping + public ResponseEntity>> getAllTokens() { + return ResponseEntity.ok(ApiResponse.success(registrationService.getAllTokens())); + } + + @GetMapping("/{userId}") + public ResponseEntity> getTokens(@PathVariable UUID userId) + throws NoResourceFoundException { + MapKeyReesponseDto token = registrationService.getTokens(userId); + return ResponseEntity.ok(ApiResponse.success(token)); + } + + + + //map관련 키 value 등록 + //userId 는 필수 값 + + @PostMapping + public ResponseEntity> mapRegisterToken( + @RequestBody @Valid MapKeyRequestDto mapKeyRequestDto + ) throws NoResourceFoundException { + registrationService.updateTokens(mapKeyRequestDto); + ApiResponse resultDto = ApiResponse.success("null"); + return ResponseEntity.ok(resultDto); + } + + + @DeleteMapping + public ResponseEntity> deleteToken( + @RequestParam UUID userId + ) throws NoResourceFoundException { + registrationService.deleteTokens(userId); + ApiResponse resultDto = ApiResponse.success("null"); + return ResponseEntity.ok(resultDto); + } + + +} diff --git a/src/main/java/com/tunaforce/message/message/dto/request/MapKeyRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/MapKeyRequestDto.java new file mode 100644 index 0000000..cf41dad --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/request/MapKeyRequestDto.java @@ -0,0 +1,17 @@ +package com.tunaforce.message.message.dto.request; + +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.UUID; + +@Getter +@AllArgsConstructor +public class MapKeyRequestDto { + @NotNull + private UUID userId; + private String mapId; + private String mapkey; + private String messageToken; +} diff --git a/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java new file mode 100644 index 0000000..8c3353a --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java @@ -0,0 +1,25 @@ +package com.tunaforce.message.message.dto.response; + +import com.tunaforce.message.message.entity.MasterToken; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +import java.util.UUID; + +@Getter +@AllArgsConstructor +@Builder +public class MapKeyReesponseDto { + private UUID userId; + private String mapId; + private String mapKey; + private String messageAppToken; + + public MapKeyReesponseDto(MasterToken token) { + this.userId = token.getUserId(); + this.mapId = token.getMapId(); + this.mapKey = token.getMapKey(); + this.messageAppToken = token.getMessageAppToken(); + } +} diff --git a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java b/src/main/java/com/tunaforce/message/message/entity/MasterToken.java index 728c130..02c7921 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java +++ b/src/main/java/com/tunaforce/message/message/entity/MasterToken.java @@ -1,24 +1,46 @@ package com.tunaforce.message.message.entity; +import com.tunaforce.message.message.dto.request.MapKeyRequestDto; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.UUID; @Getter +@Setter @Entity @Table(name = "p_master_tokens") @NoArgsConstructor @AllArgsConstructor -public class MasterToken { +public class MasterToken extends Timestamped { + //추후 리팩토링 + // 구조 변경 필요 + // 사용 앱 이름 + // 사용 헤더명 이름 + // 사용 키 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long userId; + private UUID userId; @Column(length = 150, name = "map_id") - private String mapAuthId; + private String mapId; @Column(length = 150, name = "map_key") - private String mapAuthKey; + private String mapKey; @Column(length = 150, name = "message_token") private String messageAppToken; + + public MasterToken(MapKeyRequestDto mapKeyRequestDto) { + this.userId = mapKeyRequestDto.getUserId(); + this.mapId = mapKeyRequestDto.getMapId(); + this.mapKey = mapKeyRequestDto.getMapkey(); + this.messageAppToken = mapKeyRequestDto.getMessageToken(); + + } + + public void deleteTokens(UUID userId) { + delete(userId); + } } diff --git a/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java b/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java index afe2098..2b6209c 100644 --- a/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java +++ b/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java @@ -4,7 +4,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.UUID; + @Repository -public interface TokenKeyJpaRepository extends JpaRepository { +public interface TokenKeyJpaRepository extends JpaRepository { } diff --git a/src/main/java/com/tunaforce/message/message/service/RegistrationService.java b/src/main/java/com/tunaforce/message/message/service/RegistrationService.java new file mode 100644 index 0000000..fbea904 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/RegistrationService.java @@ -0,0 +1,77 @@ +package com.tunaforce.message.message.service; + + +import com.tunaforce.message.message.dto.request.MapKeyRequestDto; +import com.tunaforce.message.message.dto.response.MapKeyReesponseDto; +import com.tunaforce.message.message.entity.MasterToken; +import com.tunaforce.message.message.repository.TokenKeyJpaRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.web.servlet.resource.NoResourceFoundException; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class RegistrationService { + + private final TokenKeyJpaRepository tokenKeyJpaRepository; + + //앱 토큰 추가 + @Transactional + public MapKeyReesponseDto updateTokens(MapKeyRequestDto mapKeyRequestDto) + throws NoResourceFoundException { + UUID userId = mapKeyRequestDto.getUserId(); + + // 1. userId로 기존 엔티티 조회 + MasterToken token = tokenKeyJpaRepository.findById(userId).orElseThrow( + ()-> new NoResourceFoundException(HttpMethod.GET,"해당 userId가 존재하지 않습니다.") + ); + + // 2. null이 아닌 필드만 업데이트 + if (mapKeyRequestDto.getMapId() != null) { + token.setMapId(mapKeyRequestDto.getMapId()); + } + if (mapKeyRequestDto.getMapkey() != null) { + token.setMapKey(mapKeyRequestDto.getMapkey()); + } + if (mapKeyRequestDto.getMessageToken() != null) { + token.setMessageAppToken(mapKeyRequestDto.getMessageToken()); + } + MapKeyReesponseDto resultDto = new MapKeyReesponseDto(token); + // 3. 트랜잭션 커밋 시점에 자동 업데이트 됨 + return resultDto; + } + //앱 변경시에 논리적 DB 제거 + public void deleteTokens(UUID userId) throws NoResourceFoundException { + MasterToken mT = tokenKeyJpaRepository.findById(userId).orElseThrow( + ()-> new NoResourceFoundException(HttpMethod.GET,"해당 userId가 존재하지 않습니다.") + ); + + mT.delete(userId); + } + + public MapKeyReesponseDto getTokens(UUID userId) throws NoResourceFoundException { + MasterToken mT = tokenKeyJpaRepository.findById(userId).orElseThrow( + ()-> new NoResourceFoundException(HttpMethod.GET,"Token not found")); + + return MapKeyReesponseDto.builder() + .userId(mT.getUserId()) + .mapId(mT.getMapId()) + .mapKey(mT.getMapKey()) + .messageAppToken(mT.getMessageAppToken()) + .build(); + + } + + public List getAllTokens(){ + List mT = tokenKeyJpaRepository.findAll(); + return mT.stream() + .map(MapKeyReesponseDto::new) + .toList(); + } +} From 5b8773902eeb5afda7a1ecbc4e31cad559998482 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Mon, 18 Aug 2025 14:29:24 +0900 Subject: [PATCH 15/29] =?UTF-8?q?chore=20:=20Controller=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B0=84=EA=B2=B0=ED=99=94=20=EB=B0=8F=20Service?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/cmmn/CoordinatesData.java | 4 +-- .../message/controller/LogController.java | 8 ++--- .../message/service/MessageService.java | 1 + .../{ => feignClient}/ClientAuthService.java | 2 +- .../feignClient/ClientCoordinatesService.java | 33 +++++++++++++++++++ .../ClientDeliveryService.java | 2 +- .../tunaforce/message/GetCoordinatesTest.java | 30 +++++++++-------- 7 files changed, 59 insertions(+), 21 deletions(-) rename src/main/java/com/tunaforce/message/message/service/{ => feignClient}/ClientAuthService.java (89%) create mode 100644 src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java rename src/main/java/com/tunaforce/message/message/service/{ => feignClient}/ClientDeliveryService.java (88%) diff --git a/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java b/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java index 2e87216..0ca0fb2 100644 --- a/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java +++ b/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java @@ -7,9 +7,9 @@ import org.springframework.web.bind.annotation.RequestParam; //네이버 페인 클라이언트 인터페이스 -@FeignClient(name = "naverGeocode", url = "https://naveropenapi.apigw.ntruss.com") +@FeignClient(name = "naverGeocode", url = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/") public interface CoordinatesData { - @GetMapping("/map-geocode/v2/geocode") + @GetMapping("/geocode") String getGeocode( @RequestHeader("X-NCP-APIGW-API-KEY-ID") String clientId, @RequestHeader("X-NCP-APIGW-API-KEY") String clientSecret, diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java index 01e7a6f..ace427a 100644 --- a/src/main/java/com/tunaforce/message/message/controller/LogController.java +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -3,15 +3,17 @@ import com.tunaforce.message.api.ApiResponse; import com.tunaforce.message.message.dto.request.CreateRouteLogRequestDto; import com.tunaforce.message.message.dto.response.SearchLogResponseDto; -import com.tunaforce.message.message.service.ClientCoordinatesService; +import com.tunaforce.message.message.service.feignClient.ClientCoordinatesService; import com.tunaforce.message.message.service.RoutLogService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +@Slf4j @Tag(name = "로그 CRUD") @RestController @RequestMapping("/log") @@ -21,11 +23,9 @@ public class LogController { private final RoutLogService routLogService; private final ClientCoordinatesService ccs; + @GetMapping public ResponseEntity>> getLogDatas() throws Exception { - String Id = "s6m0vmxur3"; - String Key = "9y18o5DVhbDAa9PqKdIs82WlzdhiNJIzuniTRYKT"; - var resultsData = ccs.getCoordinates(Id, Key, "대구 비산동 320-9"); List tempList = routLogService.readAllLog(); ApiResponse> resultDto = ApiResponse.success(tempList); return ResponseEntity.ok(resultDto); diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java index f243b6e..66016b2 100644 --- a/src/main/java/com/tunaforce/message/message/service/MessageService.java +++ b/src/main/java/com/tunaforce/message/message/service/MessageService.java @@ -8,6 +8,7 @@ import com.tunaforce.message.message.dto.response.UserInformationResponseDto; import com.tunaforce.message.message.entity.MasterToken; import com.tunaforce.message.message.repository.TokenKeyJpaRepository; +import com.tunaforce.message.message.service.feignClient.ClientAuthService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java similarity index 89% rename from src/main/java/com/tunaforce/message/message/service/ClientAuthService.java rename to src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java index a010cec..fde0bad 100644 --- a/src/main/java/com/tunaforce/message/message/service/ClientAuthService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.service; +package com.tunaforce.message.message.service.feignClient; import com.tunaforce.message.message.dto.response.UserInformationResponseDto; diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java new file mode 100644 index 0000000..6e157e6 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java @@ -0,0 +1,33 @@ +package com.tunaforce.message.message.service.feignClient; + +import com.tunaforce.message.cmmn.CoordinatesData; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class ClientCoordinatesService { + private final CoordinatesData coordinatesData; + + public String getCoordinates(String clientId, String clientSecret, String address) throws Exception { + String result = coordinatesData.getGeocode( + clientId, + clientSecret, + address + ); + log.info("the Data from Naver : " + result); + // JSON 파싱 (Jackson 등 사용) +// com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper(); +// com.fasterxml.jackson.databind.JsonNode root = mapper.readTree(result); +// if (root.path("addresses").isArray() && root.path("addresses").size() > 0) { +// com.fasterxml.jackson.databind.JsonNode addr = root.path("addresses").get(0); +// String x = addr.get("x").asText(); // 경도 +// String y = addr.get("y").asText(); // 위도 +// return new String[]{x, y}; +// } +// return null; + return result; + } +} diff --git a/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java similarity index 88% rename from src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java rename to src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java index f45f2f2..7a80437 100644 --- a/src/main/java/com/tunaforce/message/message/service/ClientDeliveryService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.service; +package com.tunaforce.message.message.service.feignClient; import com.tunaforce.message.message.dto.response.GetDeliveriesResponseDto; diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index 998e4aa..e778a27 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -1,32 +1,36 @@ package com.tunaforce.message; -import com.tunaforce.message.message.service.ClientCoordinatesService; +import com.tunaforce.message.cmmn.CoordinatesData; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.openfeign.EnableFeignClients; - -import java.util.Arrays; - +import org.springframework.context.annotation.Configuration; +@Configuration @SpringBootTest -//@AutoConfigureWireMock(port = 0) // 랜덤 포트 WireMock 구동 -@EnableFeignClients -//@ActiveProfiles("test") public class GetCoordinatesTest { @Autowired - private ClientCoordinatesService ccs; + private CoordinatesData coordinatesData; + + @Test @DisplayName("경도 위도 데이터 수신 테스트") void getCoordinatesTest() throws Exception { - String Id = "s6m0vmxur3"; - String Key = "9y18o5DVhbDAa9PqKdIs82WlzdhiNJIzuniTRYKT"; + String Id = "osh066qnrv"; + String Key = "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj"; + + String result = coordinatesData.getGeocode( + Id, + Key, + "대구 비산동 320-9" + ); + - var resultsData = ccs.getCoordinates( Id, Key,"대구 비산동 320-9"); - System.out.println("resultsData = " + Arrays.toString(resultsData)); + //String resultsData = ccs.getCoordinates( Id, Key,"대구 비산동 320-9"); + System.out.println("resultsData = " + result); } } From baf02f97d977de2d95f92adb613b1df40dd3efd4 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Mon, 18 Aug 2025 14:43:24 +0900 Subject: [PATCH 16/29] =?UTF-8?q?chore=20:=20Controller=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B0=84=EA=B2=B0=ED=99=94=20=EB=B0=8F=20Service?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/controller/MessageController.java | 3 ++ .../service/ClientCoordinatesService.java | 32 ------------------- 2 files changed, 3 insertions(+), 32 deletions(-) delete mode 100644 src/main/java/com/tunaforce/message/message/service/ClientCoordinatesService.java diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index 2ffc59b..3c555af 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -9,4 +9,7 @@ public class MessageController { + //게이트 웨이에서 마스터 관리자를 제외한 모든 사용자에 대한 접근 제한(GET만 OPEN) + + } diff --git a/src/main/java/com/tunaforce/message/message/service/ClientCoordinatesService.java b/src/main/java/com/tunaforce/message/message/service/ClientCoordinatesService.java deleted file mode 100644 index 3c5c616..0000000 --- a/src/main/java/com/tunaforce/message/message/service/ClientCoordinatesService.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.tunaforce.message.message.service; - -import com.tunaforce.message.cmmn.CoordinatesData; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -@Slf4j -@Service -@RequiredArgsConstructor -public class ClientCoordinatesService { - private final CoordinatesData coordinatesData; - - public String[] getCoordinates(String clientId, String clientSecret, String address) throws Exception { - String result = coordinatesData.getGeocode( - clientId, - clientSecret, - address - ); - log.info("the Data from Naver : " + result); - // JSON 파싱 (Jackson 등 사용) - com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper(); - com.fasterxml.jackson.databind.JsonNode root = mapper.readTree(result); - if (root.path("addresses").isArray() && root.path("addresses").size() > 0) { - com.fasterxml.jackson.databind.JsonNode addr = root.path("addresses").get(0); - String x = addr.get("x").asText(); // 경도 - String y = addr.get("y").asText(); // 위도 - return new String[]{x, y}; - } - return null; - } -} From 3531ab228c106af725d5db1fc0b742323386e988 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Mon, 18 Aug 2025 14:47:56 +0900 Subject: [PATCH 17/29] =?UTF-8?q?chore=20:=20Message=20dto=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...sageLogResponseDto.java => MessageLogResponseDto.java} | 2 +- .../tunaforce/message/message/service/MessageService.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/com/tunaforce/message/message/dto/response/{CreateMessageLogResponseDto.java => MessageLogResponseDto.java} (88%) diff --git a/src/main/java/com/tunaforce/message/message/dto/response/CreateMessageLogResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/MessageLogResponseDto.java similarity index 88% rename from src/main/java/com/tunaforce/message/message/dto/response/CreateMessageLogResponseDto.java rename to src/main/java/com/tunaforce/message/message/dto/response/MessageLogResponseDto.java index b6ab29a..b603a2f 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/CreateMessageLogResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/MessageLogResponseDto.java @@ -5,7 +5,7 @@ @Getter @AllArgsConstructor -public class CreateMessageLogResponseDto { +public class MessageLogResponseDto { private String senderId; private String content; private String receiverId; diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java index 66016b2..1344444 100644 --- a/src/main/java/com/tunaforce/message/message/service/MessageService.java +++ b/src/main/java/com/tunaforce/message/message/service/MessageService.java @@ -4,7 +4,7 @@ import com.tunaforce.message.api.ApiResponse; import com.tunaforce.message.cmmn.SlackMsg; import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; -import com.tunaforce.message.message.dto.response.CreateMessageLogResponseDto; +import com.tunaforce.message.message.dto.response.MessageLogResponseDto; import com.tunaforce.message.message.dto.response.UserInformationResponseDto; import com.tunaforce.message.message.entity.MasterToken; import com.tunaforce.message.message.repository.TokenKeyJpaRepository; @@ -23,18 +23,18 @@ public class MessageService { //슬랙 앱으로 보내는 함수 사용 private final SlackMsg slackMsg; - public CreateMessageLogResponseDto sendMessage(Long senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { + public MessageLogResponseDto sendMessage(Long senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { UserInformationResponseDto senderAppId = clientAuthService.getUserInfo(senderId); UserInformationResponseDto receiverAppId = clientAuthService.getUserInfo(createMessageLogRequestDto.receiverId()); //redis에 저장로직 추후 추가 //받은 값과 조회한 값을 기준으로 응답 데이터 만듬 - CreateMessageLogResponseDto resultData = new CreateMessageLogResponseDto( + MessageLogResponseDto resultData = new MessageLogResponseDto( senderAppId.getName(), createMessageLogRequestDto.content(), receiverAppId.getName() ); - ApiResponse resultDto = ApiResponse.success(resultData); + ApiResponse resultDto = ApiResponse.success(resultData); //앱을 통한 메세지 송신 로직 구성 //토큰 받아오는 로직 From 51be0bce593422bfe46a07eeabecc4c02eeb641a Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Mon, 18 Aug 2025 19:54:25 +0900 Subject: [PATCH 18/29] =?UTF-8?q?chore=20:=20Message=20Controller=20CRUD?= =?UTF-8?q?=20=EC=9E=91=EC=97=85=20fix=20:=20Naver=20API=20URL=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20fix=20:=20userID=20UUID=EB=A1=9C=20=EC=9D=BC?= =?UTF-8?q?=EA=B4=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/controller/MessageController.java | 41 +++++++++++++++++-- .../request/CreateMessageLogRequestDto.java | 6 ++- .../dto/response/MessageLogResponseDto.java | 16 ++++++-- .../dto/response/SearchLogResponseDto.java | 2 + .../response/UserInformationResponseDto.java | 4 +- .../message/entity/MessageManagement.java | 15 +++++-- .../repository/MessageLogRepository.java | 7 ++++ .../message/service/MessageService.java | 32 ++++++++++++--- .../feignClient/ClientAuthService.java | 4 +- 9 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/repository/MessageLogRepository.java diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index 3c555af..b8e50c8 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -1,15 +1,50 @@ package com.tunaforce.message.message.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.slack.api.methods.SlackApiException; +import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; +import com.tunaforce.message.message.dto.response.MessageLogResponseDto; +import com.tunaforce.message.message.service.MessageService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; @RestController @RequestMapping("/messages") +@RequiredArgsConstructor public class MessageController { + private final MessageService msgService; + + //게이트 웨이에서 마스터 관리자를 제외한 모든 사용자에 대한 접근 제한(POST만 OPEN) + @GetMapping + public ResponseEntity>> getLogDatas( + + ) { + + List tempSR = msgService.getAllLog(); + ApiResponse> reaultDto = ApiResponse.success(tempSR); + return ResponseEntity.ok(reaultDto); + } + + @PostMapping + public ResponseEntity> sendMessage( + @RequestBody CreateMessageLogRequestDto createMessageLogRequestDto, + @RequestHeader("userId") UUID userId + ) throws SlackApiException, IOException { + + //slackMsg 클래스 내부의 함수 호출 + String mlr = msgService.sendMessage(userId ,createMessageLogRequestDto); + ApiResponse reaultDto = ApiResponse.success(mlr); - //게이트 웨이에서 마스터 관리자를 제외한 모든 사용자에 대한 접근 제한(GET만 OPEN) + return ResponseEntity.ok(reaultDto); + //테이블에 로그를 남기는 로직 구현 + } } diff --git a/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java index fdc41fd..0d72562 100644 --- a/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java @@ -1,10 +1,12 @@ package com.tunaforce.message.message.dto.request; +import java.util.UUID; + public record CreateMessageLogRequestDto( String content, //Sender의 경우 헤더에 포함된 user_id로 구분 - Long senderId, - Long receiverId + UUID senderId, + UUID receiverId ) { } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/MessageLogResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/MessageLogResponseDto.java index b603a2f..dc483ff 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/MessageLogResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/MessageLogResponseDto.java @@ -3,16 +3,26 @@ import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.UUID; + @Getter @AllArgsConstructor public class MessageLogResponseDto { - private String senderId; + private String senderName; private String content; - private String receiverId; + private String receiverName; + private UUID senderId; + private UUID receiverId; + + public MessageLogResponseDto(String name, String content, String name1) { + this.senderName = name; + this.content = content; + this.receiverName = name1; + } public String getFormMessage(){ - return "From. " + senderId + + return "From. " + senderName + " -> " + content; } } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/SearchLogResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/SearchLogResponseDto.java index c27e87e..e7cd9f0 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/SearchLogResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/SearchLogResponseDto.java @@ -14,4 +14,6 @@ public class SearchLogResponseDto { private String realDistance; private String realTime; private String currStatus; + + } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java index 3b7eade..a976c27 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java @@ -4,11 +4,13 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.UUID; + @Getter @AllArgsConstructor @NoArgsConstructor public class UserInformationResponseDto { - private Long userId; + private UUID userId; private String name; private String slackId; private String role; diff --git a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java index dc3ea6e..8786afc 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java +++ b/src/main/java/com/tunaforce/message/message/entity/MessageManagement.java @@ -1,11 +1,14 @@ package com.tunaforce.message.message.entity; +import com.slack.api.methods.SlackApiException; import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; +import com.tunaforce.message.message.dto.response.MessageLogResponseDto; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import java.io.IOException; import java.util.UUID; @@ -22,17 +25,23 @@ public class MessageManagement extends Timestamped { @Column(nullable = false) private String content; @Column(name = "sender_Id", updatable = false, nullable = false) - private Long senderId; + private UUID senderId; @Column(name = "receiver_Id", updatable = false, nullable = false) - private Long receiverId; + private UUID receiverId; - public MessageManagement(String content, Long senderId, Long receiverId) { + public MessageManagement(String content, UUID senderId, UUID receiverId) { this.content = content; this.senderId = senderId; this.receiverId = receiverId; } + public MessageManagement(MessageLogResponseDto messageLogResponseDto){ + this.content = messageLogResponseDto.getContent(); + this.senderId = messageLogResponseDto.getSenderId(); + this.receiverId = messageLogResponseDto.getReceiverId(); + } + public MessageManagement(CreateMessageLogRequestDto createMessageLogRequestDto) { this.content = createMessageLogRequestDto.content(); this.senderId = createMessageLogRequestDto.senderId(); diff --git a/src/main/java/com/tunaforce/message/message/repository/MessageLogRepository.java b/src/main/java/com/tunaforce/message/message/repository/MessageLogRepository.java new file mode 100644 index 0000000..25dec71 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/repository/MessageLogRepository.java @@ -0,0 +1,7 @@ +package com.tunaforce.message.message.repository; + +import com.tunaforce.message.message.entity.MessageManagement; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MessageLogRepository extends JpaRepository { +} diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java index 1344444..3374809 100644 --- a/src/main/java/com/tunaforce/message/message/service/MessageService.java +++ b/src/main/java/com/tunaforce/message/message/service/MessageService.java @@ -5,25 +5,32 @@ import com.tunaforce.message.cmmn.SlackMsg; import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; import com.tunaforce.message.message.dto.response.MessageLogResponseDto; +import com.tunaforce.message.message.dto.response.SearchLogResponseDto; import com.tunaforce.message.message.dto.response.UserInformationResponseDto; import com.tunaforce.message.message.entity.MasterToken; +import com.tunaforce.message.message.entity.MessageManagement; +import com.tunaforce.message.message.repository.MessageLogRepository; import com.tunaforce.message.message.repository.TokenKeyJpaRepository; import com.tunaforce.message.message.service.feignClient.ClientAuthService; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.io.IOException; +import java.util.List; +import java.util.Optional; +import java.util.UUID; @Service @RequiredArgsConstructor public class MessageService { private final TokenKeyJpaRepository tokenKeyJpaRepository; - + private final MessageLogRepository messageLogRepository; private final ClientAuthService clientAuthService; //슬랙 앱으로 보내는 함수 사용 private final SlackMsg slackMsg; - public MessageLogResponseDto sendMessage(Long senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { + public String sendMessage(UUID senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { UserInformationResponseDto senderAppId = clientAuthService.getUserInfo(senderId); UserInformationResponseDto receiverAppId = clientAuthService.getUserInfo(createMessageLogRequestDto.receiverId()); //redis에 저장로직 추후 추가 @@ -34,16 +41,29 @@ public MessageLogResponseDto sendMessage(Long senderId, CreateMessageLogRequestD createMessageLogRequestDto.content(), receiverAppId.getName() ); - ApiResponse resultDto = ApiResponse.success(resultData); + //ApiResponse resultDto = ApiResponse.success("null"); //앱을 통한 메세지 송신 로직 구성 //토큰 받아오는 로직 //이 테이블은 여러개의 값이 존재할 수 없음 - MasterToken tempKeys = tokenKeyJpaRepository.findAll().get(0); + MasterToken tempKeys = tokenKeyJpaRepository.findByDeletedAt().get(0); + + + slackMsg.sendDirectMessage(tempKeys.getMessageAppToken(), receiverAppId.getSlackId(), resultData.getFormMessage()); + return "null"; + + } - slackMsg.sendDirectMessage(tempKeys.getMessageAppToken(), receiverAppId.getSlackId(), createMessageLogRequestDto.content()); + public List getAllLog(){ + List msgManagement = messageLogRepository.findAll(); - return resultData; + return msgManagement.stream() + .map(entity -> new CreateMessageLogRequestDto( + entity.getContent(), + entity.getSenderId(), + entity.getReceiverId() + )) + .toList(); } } diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java index fde0bad..fea02a5 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java @@ -6,10 +6,12 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import java.util.UUID; + @FeignClient(name = "auth-Service", url = "${Naver.API.Geocoding}") public interface ClientAuthService { //시용자 정보의 앱 ID가 필요 @GetMapping("/users/{user_id}") - UserInformationResponseDto getUserInfo(@PathVariable("user_id") Long userId); + UserInformationResponseDto getUserInfo(@PathVariable("user_id") UUID userId); } From b82151d4ed74044c19ed27920e228fdd1018a9ff Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Mon, 18 Aug 2025 20:11:16 +0900 Subject: [PATCH 19/29] =?UTF-8?q?add=20:=20hub=20FeignClient=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20chore=20:=20Token=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C?= =?UTF-8?q?=EC=97=90=20=EB=85=BC=EB=A6=AC=EC=A0=81=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EC=A0=9C=EC=99=B8=20=EC=BF=BC=EB=A6=AC=EB=AC=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tunaforce/message/cmmn/CoordinatesData.java | 2 +- .../message/message/dto/msa_dto/HubResponseDto.java | 11 +++++++++++ .../message/message/entity/MasterToken.java | 1 - .../message/repository/TokenKeyJpaRepository.java | 5 +++++ .../service/feignClient/ClientHubService.java | 13 +++++++++++++ 5 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/dto/msa_dto/HubResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/service/feignClient/ClientHubService.java diff --git a/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java b/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java index 0ca0fb2..4b045c6 100644 --- a/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java +++ b/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java @@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.RequestParam; //네이버 페인 클라이언트 인터페이스 -@FeignClient(name = "naverGeocode", url = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/") +@FeignClient(name = "naverGeocode", url = "${Naver.API.Geocoding}") public interface CoordinatesData { @GetMapping("/geocode") String getGeocode( diff --git a/src/main/java/com/tunaforce/message/message/dto/msa_dto/HubResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/msa_dto/HubResponseDto.java new file mode 100644 index 0000000..43b2aa2 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/msa_dto/HubResponseDto.java @@ -0,0 +1,11 @@ +package com.tunaforce.message.message.dto.msa_dto; + +public record HubResponseDto( + Long Id, + String hubName, + String hubAddress, + String latitude, + String longitude +) { + +} diff --git a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java b/src/main/java/com/tunaforce/message/message/entity/MasterToken.java index 02c7921..0415527 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java +++ b/src/main/java/com/tunaforce/message/message/entity/MasterToken.java @@ -22,7 +22,6 @@ public class MasterToken extends Timestamped { // 사용 헤더명 이름 // 사용 키 @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) private UUID userId; @Column(length = 150, name = "map_id") diff --git a/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java b/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java index 2b6209c..87222bb 100644 --- a/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java +++ b/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java @@ -2,11 +2,16 @@ import com.tunaforce.message.message.entity.MasterToken; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.UUID; @Repository public interface TokenKeyJpaRepository extends JpaRepository { + @Query("SELECT M FROM MasterToken M WHERE M.deletedAt != null") + List findByDeletedAt(); + } diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientHubService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientHubService.java new file mode 100644 index 0000000..f2c961e --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientHubService.java @@ -0,0 +1,13 @@ +package com.tunaforce.message.message.service.feignClient; + +import com.tunaforce.message.message.dto.msa_dto.HubResponseDto; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(name = "hub-Service", url = "${Clients.Hub}") +public interface ClientHubService { + @GetMapping("/hubs/{hub_id}") + HubResponseDto getHub(@PathVariable("hub_id") String hub_id); + +} From d97f175cd1af920ad6fd7b5030c6f899e6671174 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Mon, 18 Aug 2025 20:16:10 +0900 Subject: [PATCH 20/29] =?UTF-8?q?delete=20:=20ResultData=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=20=EC=97=86=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tunaforce/message/cmmn/ResultData.java | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/main/java/com/tunaforce/message/cmmn/ResultData.java diff --git a/src/main/java/com/tunaforce/message/cmmn/ResultData.java b/src/main/java/com/tunaforce/message/cmmn/ResultData.java deleted file mode 100644 index 176af13..0000000 --- a/src/main/java/com/tunaforce/message/cmmn/ResultData.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.tunaforce.message.cmmn; - -public class ResultData { - private boolean success; - private T data; - private String error; - - public ResultData(boolean success, T data, String error) { - this.success = success; - this.data = data; - this.error = error; - } -} \ No newline at end of file From 1afd743e10f685dca21fd6be028d8eba802f41bb Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Tue, 19 Aug 2025 09:28:30 +0900 Subject: [PATCH 21/29] =?UTF-8?q?add=20:=20naver=20api=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=EC=8B=9C=20=ED=95=84=EC=9A=94=ED=95=9C=20dto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=20=20=20-=20Address=20=20=20=20-=20Meta?= =?UTF-8?q?=20=20=20=20-=20rootGeocodeResponseDto=20=20=20=20-=20AddressEl?= =?UTF-8?q?ement=20add=20:=20test=20=EB=AA=A8=EB=93=88=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20fix=20:=20=EB=B0=B0=EC=86=A1=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=ED=98=91=EC=9D=98=20=ED=9B=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=20=20=20-=20=EC=97=85=EC=B2=B4=20?= =?UTF-8?q?=EB=B0=B0=EC=86=A1=20=EB=8B=B4=EB=8B=B9=EC=9E=90=20=EB=B0=B0?= =?UTF-8?q?=EC=A0=95=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84=20=20=20=20?= =?UTF-8?q?-=20=EB=B0=B0=EC=86=A1=20=EB=8B=B4=EB=8B=B9=EC=9E=90=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=20=EB=B0=B0=EC=86=A1=20API=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...esData.java => ClientCoordinatesData.java} | 2 +- .../message/cmmn/ClientRoutesData.java | 17 +++++++ .../message/message/dto/naverMap/Address.java | 13 +++++ .../message/dto/naverMap/AddressElement.java | 10 ++++ .../message/message/dto/naverMap/Meta.java | 7 +++ .../dto/naverMap/rootGeocodeResponseDto.java | 13 +++++ .../message/entity/DeliveryStatus.java | 18 +++++++ .../message/service/RoutLogService.java | 8 +++ .../feignClient/ClientCoordinatesService.java | 8 +-- .../feignClient/ClientDeliveryService.java | 6 ++- .../tunaforce/message/GetCoordinatesTest.java | 51 +++++++++++++++++-- 11 files changed, 143 insertions(+), 10 deletions(-) rename src/main/java/com/tunaforce/message/cmmn/{CoordinatesData.java => ClientCoordinatesData.java} (94%) create mode 100644 src/main/java/com/tunaforce/message/cmmn/ClientRoutesData.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverMap/rootGeocodeResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java diff --git a/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java b/src/main/java/com/tunaforce/message/cmmn/ClientCoordinatesData.java similarity index 94% rename from src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java rename to src/main/java/com/tunaforce/message/cmmn/ClientCoordinatesData.java index 4b045c6..623c50b 100644 --- a/src/main/java/com/tunaforce/message/cmmn/CoordinatesData.java +++ b/src/main/java/com/tunaforce/message/cmmn/ClientCoordinatesData.java @@ -8,7 +8,7 @@ //네이버 페인 클라이언트 인터페이스 @FeignClient(name = "naverGeocode", url = "${Naver.API.Geocoding}") -public interface CoordinatesData { +public interface ClientCoordinatesData { @GetMapping("/geocode") String getGeocode( @RequestHeader("X-NCP-APIGW-API-KEY-ID") String clientId, diff --git a/src/main/java/com/tunaforce/message/cmmn/ClientRoutesData.java b/src/main/java/com/tunaforce/message/cmmn/ClientRoutesData.java new file mode 100644 index 0000000..700c33d --- /dev/null +++ b/src/main/java/com/tunaforce/message/cmmn/ClientRoutesData.java @@ -0,0 +1,17 @@ +package com.tunaforce.message.cmmn; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; + +@FeignClient(name = "naverRoute", url = "${Naver.API.Directions 5}") +public interface ClientRoutesData { + @GetMapping("/driving") + String getRoute( + @RequestHeader("X-NCP-APIGW-API-KEY-ID") String clientId, + @RequestHeader("X-NCP-APIGW-API-KEY") String clientSecret, + @RequestParam String start, + @RequestParam String goal + ); +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java new file mode 100644 index 0000000..9c6234e --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java @@ -0,0 +1,13 @@ +package com.tunaforce.message.message.dto.naverMap; + +import java.util.List; + +public record Address( + String roadAddress, + String jibunAddress, + String englishAddress, + List addressElements, + String x, + String y, + double distance +) {} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java new file mode 100644 index 0000000..b6c575c --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java @@ -0,0 +1,10 @@ +package com.tunaforce.message.message.dto.naverMap; + +import java.util.List; + +public record AddressElement( + List types, + String longName, + String shortName, + String code +) {} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java new file mode 100644 index 0000000..e585bd4 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java @@ -0,0 +1,7 @@ +package com.tunaforce.message.message.dto.naverMap; + +public record Meta( + int totalCount, + int page, + int count +) {} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/rootGeocodeResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/rootGeocodeResponseDto.java new file mode 100644 index 0000000..ef4edca --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverMap/rootGeocodeResponseDto.java @@ -0,0 +1,13 @@ +package com.tunaforce.message.message.dto.naverMap; + +//가장 기본 클래스 + +import java.util.List; + +public record rootGeocodeResponseDto( + String status, + Meta meta, + List
addresses, + String errorMessage +) {} + diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java new file mode 100644 index 0000000..0f3d331 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java @@ -0,0 +1,18 @@ +package com.tunaforce.message.message.entity; + + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +import java.util.UUID; + +@Entity +@Table(name = "p_delivery_status") +public class DeliveryStatus extends Timestamped { + @Id + private UUID userId; + @Column(length = 100) + private String hub_id; +} diff --git a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java index c8f288e..58badf4 100644 --- a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java +++ b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java @@ -1,6 +1,8 @@ package com.tunaforce.message.message.service; +import com.tunaforce.message.cmmn.ClientRoutesData; +import com.tunaforce.message.cmmn.RouteData; import com.tunaforce.message.message.dto.response.SearchLogResponseDto; import com.tunaforce.message.message.entity.DeliveryRouteLog; import com.tunaforce.message.message.repository.RoutLogJPaRepository; @@ -16,6 +18,7 @@ @RequiredArgsConstructor public class RoutLogService { private final RoutLogJPaRepository routLogJPaRepository; + private final ClientRoutesData clientRoutesData; public List readAllLog() { List results = routLogJPaRepository.findAll(); @@ -42,4 +45,9 @@ public boolean deleteLog(UUID deliveryId){ deliveryRouteLog.deleteLog(deliveryRouteLog.getDeliveryIdx()); return true; } + + public void getRoute(RouteData routeData){ + + + } } diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java index 6e157e6..8325569 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java @@ -1,6 +1,6 @@ package com.tunaforce.message.message.service.feignClient; -import com.tunaforce.message.cmmn.CoordinatesData; +import com.tunaforce.message.cmmn.ClientCoordinatesData; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -9,10 +9,10 @@ @Service @RequiredArgsConstructor public class ClientCoordinatesService { - private final CoordinatesData coordinatesData; + private final ClientCoordinatesData clientCoordinatesData; - public String getCoordinates(String clientId, String clientSecret, String address) throws Exception { - String result = coordinatesData.getGeocode( + public String getCoordinates(String clientId, String clientSecret, String address) { + String result = clientCoordinatesData.getGeocode( clientId, clientSecret, address diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java index 7a80437..813f7ce 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java @@ -12,5 +12,9 @@ @FeignClient(name="delivery-service", url="${DeliveryFeign.url}") public interface ClientDeliveryService { @GetMapping("/deliverys") - public List getListDelivery(); + List getListDelivery(); + //업체 배송 담당자 조건으로 쿼리 + + + //업체 배송 담당자 배정 후 배송 테이블에 업체 배송 담당자 ID 업데이트 } diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index e778a27..de347da 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -1,6 +1,10 @@ package com.tunaforce.message; -import com.tunaforce.message.cmmn.CoordinatesData; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.tunaforce.message.cmmn.ClientCoordinatesData; +import com.tunaforce.message.cmmn.ClientRoutesData; +import com.tunaforce.message.message.dto.naverMap.rootGeocodeResponseDto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -12,7 +16,9 @@ public class GetCoordinatesTest { @Autowired - private CoordinatesData coordinatesData; + private ClientCoordinatesData clientCoordinatesData; + @Autowired + private ClientRoutesData clientRoutesData; @@ -23,14 +29,51 @@ void getCoordinatesTest() throws Exception { String Id = "osh066qnrv"; String Key = "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj"; - String result = coordinatesData.getGeocode( + String result = clientCoordinatesData.getGeocode( Id, Key, - "대구 비산동 320-9" + "거창군 마리면 풍계1길 27-103" ); + ObjectMapper test = new ObjectMapper(); + rootGeocodeResponseDto tester = test.readValue(result, rootGeocodeResponseDto.class); //String resultsData = ccs.getCoordinates( Id, Key,"대구 비산동 320-9"); System.out.println("resultsData = " + result); } + + @Test + @DisplayName("루트 데이터 수신 테스트") + void getRouteTest() throws JsonProcessingException { + + ObjectMapper test = new ObjectMapper(); + + String Id = "osh066qnrv"; + String Key = "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj"; + + String start = clientCoordinatesData.getGeocode( + Id, + Key, + "대구광역시 서구 비산동 320-9" + ); + + rootGeocodeResponseDto startPt = test.readValue(start, rootGeocodeResponseDto.class); + + String goal = clientCoordinatesData.getGeocode( + Id, + Key, + "거창군 마리면 풍계1길 27-103" + ); + rootGeocodeResponseDto goalPt = test.readValue(goal, rootGeocodeResponseDto.class); + + String result = clientRoutesData.getRoute( + Id, + Key, + startPt.addresses().get(0).x()+","+startPt.addresses().get(0).y(), + goalPt.addresses().get(0).x()+","+goalPt.addresses().get(0).y() + ); + + System.out.println("result = " + result); + } + } From 9f5a3d1571197e8626eb67a96dfa24daf9f8063f Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Tue, 19 Aug 2025 12:21:44 +0900 Subject: [PATCH 22/29] =?UTF-8?q?add=20:=20naver=20=EC=97=B0=EB=8F=99=20dt?= =?UTF-8?q?o=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/message/dto/naverMap/Address.java | 25 +++++++----- .../message/dto/naverMap/AddressElement.java | 20 +++++++--- .../message/message/dto/naverMap/Meta.java | 17 +++++--- .../dto/naverMap/geocodeResponseDto.java | 18 +++++++++ .../dto/naverMap/rootGeocodeResponseDto.java | 13 ------- .../message/message/dto/naverRoute/Goal.java | 9 +++++ .../message/message/dto/naverRoute/Guide.java | 10 +++++ .../message/message/dto/naverRoute/Route.java | 8 ++++ .../message/dto/naverRoute/Section.java | 11 ++++++ .../message/message/dto/naverRoute/Start.java | 8 ++++ .../message/dto/naverRoute/Summary.java | 16 ++++++++ .../message/dto/naverRoute/Traoptimal.java | 11 ++++++ .../dto/naverRoute/direction5ResponseDto.java | 9 +++++ .../tunaforce/message/GetCoordinatesTest.java | 39 ++++++++++--------- 14 files changed, 163 insertions(+), 51 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverMap/geocodeResponseDto.java delete mode 100644 src/main/java/com/tunaforce/message/message/dto/naverMap/rootGeocodeResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverRoute/Goal.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverRoute/Guide.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverRoute/Route.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverRoute/Section.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverRoute/Start.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverRoute/Summary.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverRoute/Traoptimal.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/naverRoute/direction5ResponseDto.java diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java index 9c6234e..627baf5 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java +++ b/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java @@ -1,13 +1,20 @@ package com.tunaforce.message.message.dto.naverMap; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + import java.util.List; -public record Address( - String roadAddress, - String jibunAddress, - String englishAddress, - List addressElements, - String x, - String y, - double distance -) {} +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class Address { + private String roadAddress; + private String jibunAddress; + private String englishAddress; + private List addressElements; + private String x; + private String y; + private double distance; +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java index b6c575c..13c35a6 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java +++ b/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java @@ -1,10 +1,18 @@ package com.tunaforce.message.message.dto.naverMap; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + import java.util.List; -public record AddressElement( - List types, - String longName, - String shortName, - String code -) {} + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class AddressElement { + private List types; + private String longName; + private String shortName; + private String code; +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java index e585bd4..0222793 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java +++ b/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java @@ -1,7 +1,14 @@ package com.tunaforce.message.message.dto.naverMap; -public record Meta( - int totalCount, - int page, - int count -) {} +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class Meta { + private int totalCount; + private int page; + private int count; +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/geocodeResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/geocodeResponseDto.java new file mode 100644 index 0000000..234082e --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverMap/geocodeResponseDto.java @@ -0,0 +1,18 @@ +package com.tunaforce.message.message.dto.naverMap; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class geocodeResponseDto { + public String status; + public Meta meta; + public List
addresses; + public String errorMessage; + +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/rootGeocodeResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/naverMap/rootGeocodeResponseDto.java deleted file mode 100644 index ef4edca..0000000 --- a/src/main/java/com/tunaforce/message/message/dto/naverMap/rootGeocodeResponseDto.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.tunaforce.message.message.dto.naverMap; - -//가장 기본 클래스 - -import java.util.List; - -public record rootGeocodeResponseDto( - String status, - Meta meta, - List
addresses, - String errorMessage -) {} - diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Goal.java b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Goal.java new file mode 100644 index 0000000..d83cb4a --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Goal.java @@ -0,0 +1,9 @@ +package com.tunaforce.message.message.dto.naverRoute; + +import java.util.List; + +public record Goal( + int dir, + List location +) { +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Guide.java b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Guide.java new file mode 100644 index 0000000..21c004d --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Guide.java @@ -0,0 +1,10 @@ +package com.tunaforce.message.message.dto.naverRoute; + +public record Guide( + int distance, + int duration, + String instructions, + int pointIndex, + int type +) { +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Route.java b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Route.java new file mode 100644 index 0000000..f95170c --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Route.java @@ -0,0 +1,8 @@ +package com.tunaforce.message.message.dto.naverRoute; + +import java.util.List; + +public record Route( + List traoptimal +) { +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Section.java b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Section.java new file mode 100644 index 0000000..96fd177 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Section.java @@ -0,0 +1,11 @@ +package com.tunaforce.message.message.dto.naverRoute; + +public record Section( + int congestion, + int distance, + String name, + int pointCount, + int pointIndex, + int speed +) { +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Start.java b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Start.java new file mode 100644 index 0000000..c2f93f8 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Start.java @@ -0,0 +1,8 @@ +package com.tunaforce.message.message.dto.naverRoute; + +import java.util.List; + +public record Start( + List location +) { +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Summary.java b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Summary.java new file mode 100644 index 0000000..2333fb1 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Summary.java @@ -0,0 +1,16 @@ +package com.tunaforce.message.message.dto.naverRoute; + +import java.util.List; + +public record Summary( + List> bbox, + String departureTime, + int distance, + int duration, + int fuelPrice, + Goal goal, + Start start, + int taxiFare, + int tollFare +) { +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Traoptimal.java b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Traoptimal.java new file mode 100644 index 0000000..ac15430 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverRoute/Traoptimal.java @@ -0,0 +1,11 @@ +package com.tunaforce.message.message.dto.naverRoute; + +import java.util.List; + +public record Traoptimal( + List guide, + List> path, + List
section, + Summary summary +) { +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/direction5ResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/naverRoute/direction5ResponseDto.java new file mode 100644 index 0000000..6c51093 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/naverRoute/direction5ResponseDto.java @@ -0,0 +1,9 @@ +package com.tunaforce.message.message.dto.naverRoute; + +public record direction5ResponseDto( + int code, + String message, + String currentDateTime, + Route route +) {} + diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index de347da..3501225 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -1,10 +1,11 @@ package com.tunaforce.message; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.tunaforce.message.cmmn.ClientCoordinatesData; import com.tunaforce.message.cmmn.ClientRoutesData; -import com.tunaforce.message.message.dto.naverMap.rootGeocodeResponseDto; +import com.tunaforce.message.message.dto.naverMap.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -35,45 +36,47 @@ void getCoordinatesTest() throws Exception { "거창군 마리면 풍계1길 27-103" ); ObjectMapper test = new ObjectMapper(); - rootGeocodeResponseDto tester = test.readValue(result, rootGeocodeResponseDto.class); - + geocodeResponseDto tester = test.readValue(result, geocodeResponseDto.class); + String ss= tester.addresses.get(0).getX(); //String resultsData = ccs.getCoordinates( Id, Key,"대구 비산동 320-9"); + System.out.println("ss = " + ss); System.out.println("resultsData = " + result); } @Test @DisplayName("루트 데이터 수신 테스트") - void getRouteTest() throws JsonProcessingException { - - ObjectMapper test = new ObjectMapper(); - + void getRoute() throws JsonProcessingException { String Id = "osh066qnrv"; String Key = "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj"; - String start = clientCoordinatesData.getGeocode( + String geochang = clientCoordinatesData.getGeocode( Id, Key, - "대구광역시 서구 비산동 320-9" + "거창군 마리면 풍계1길 27-103" ); - rootGeocodeResponseDto startPt = test.readValue(start, rootGeocodeResponseDto.class); - - String goal = clientCoordinatesData.getGeocode( + String daegu = clientCoordinatesData.getGeocode( Id, Key, - "거창군 마리면 풍계1길 27-103" + "대구광역시 서구 비산동 320-9" ); - rootGeocodeResponseDto goalPt = test.readValue(goal, rootGeocodeResponseDto.class); - String result = clientRoutesData.getRoute( + ObjectMapper test = new ObjectMapper(); + geocodeResponseDto geochangdto = test.readValue(geochang, geocodeResponseDto.class); + geocodeResponseDto daegudto = test.readValue(daegu, geocodeResponseDto.class); + + String resultData = clientRoutesData.getRoute( Id, Key, - startPt.addresses().get(0).x()+","+startPt.addresses().get(0).y(), - goalPt.addresses().get(0).x()+","+goalPt.addresses().get(0).y() + daegudto.getAddresses().get(0).getX()+","+daegudto.getAddresses().get(0).getY(), + geochangdto.getAddresses().get(0).getX()+","+geochangdto.getAddresses().get(0).getY() + ); - System.out.println("result = " + result); + + + System.out.println("resultData = " + resultData); } } From 008611df796b1d61ec9acddbf9bb99a0446f2deb Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Wed, 20 Aug 2025 10:32:44 +0900 Subject: [PATCH 23/29] =?UTF-8?q?add=20:=20Naver=20=EA=B4=80=EB=A0=A8=20cl?= =?UTF-8?q?ass=20=EC=B6=94=EA=B0=80=20fix=20:=20JpaConfig=20Bean=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EC=97=90=EB=9F=AC=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=95=9C=20UUID=20=EC=83=9D=EC=84=B1=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tunaforce/message/MessageApplication.java | 2 + .../message/api/ApiExceptionAdvice.java | 13 ++++++ .../message/config/AuditorAwareImpl.java | 14 +++++-- .../tunaforce/message/config/JpaConfig.java | 8 +++- .../maps/controller/mapInfoController.java | 34 ++++++++++++++++ .../dto/naverMap/Address.java | 2 +- .../dto/naverMap/AddressElement.java | 2 +- .../{message => maps}/dto/naverMap/Meta.java | 2 +- .../dto/naverMap/geocodeResponseDto.java | 2 +- .../dto/naverRoute/Goal.java | 2 +- .../dto/naverRoute/Guide.java | 2 +- .../dto/naverRoute/Route.java | 2 +- .../dto/naverRoute/Section.java | 2 +- .../dto/naverRoute/Start.java | 2 +- .../dto/naverRoute/Summary.java | 2 +- .../dto/naverRoute/Traoptimal.java | 2 +- .../dto/naverRoute/direction5ResponseDto.java | 2 +- .../response/CoordinatesDataResponseDto.java | 12 ++++++ .../maps/repository/mapInfoRepository.java | 13 ++++++ .../service}/ClientCoordinatesData.java | 2 +- .../service}/ClientRoutesData.java | 2 +- .../message/maps/service/mapInfoService.java | 40 +++++++++++++++++++ .../message/controller/MessageController.java | 4 +- .../request/CreateMessageLogRequestDto.java | 4 ++ .../message/dto/request/MapKeyRequestDto.java | 2 +- .../dto/response/MapKeyReesponseDto.java | 2 +- .../message/entity/DeliveryRouteLog.java | 2 +- .../message/service/MessageService.java | 23 ++++++----- .../message/service/RoutLogService.java | 2 +- .../feignClient/ClientCoordinatesService.java | 2 +- .../controller/RegistrationController.java | 10 +++-- .../entity/MasterToken.java | 5 +-- .../repository/TokenKeyJpaRepository.java | 6 +-- .../service/RegistrationService.java | 21 +++++++--- .../tunaforce/message/GetCoordinatesTest.java | 6 +-- .../com/tunaforce/message/TimstampedTest.java | 40 +++++++++++++++++++ 36 files changed, 239 insertions(+), 54 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverMap/Address.java (88%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverMap/AddressElement.java (85%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverMap/Meta.java (81%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverMap/geocodeResponseDto.java (85%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverRoute/Goal.java (64%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverRoute/Guide.java (72%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverRoute/Route.java (61%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverRoute/Section.java (75%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverRoute/Start.java (60%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverRoute/Summary.java (83%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverRoute/Traoptimal.java (76%) rename src/main/java/com/tunaforce/message/{message => maps}/dto/naverRoute/direction5ResponseDto.java (71%) create mode 100644 src/main/java/com/tunaforce/message/maps/dto/response/CoordinatesDataResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/maps/repository/mapInfoRepository.java rename src/main/java/com/tunaforce/message/{cmmn => maps/service}/ClientCoordinatesData.java (93%) rename src/main/java/com/tunaforce/message/{cmmn => maps/service}/ClientRoutesData.java (93%) create mode 100644 src/main/java/com/tunaforce/message/maps/service/mapInfoService.java rename src/main/java/com/tunaforce/message/{message => token}/controller/RegistrationController.java (88%) rename src/main/java/com/tunaforce/message/{message => token}/entity/MasterToken.java (91%) rename src/main/java/com/tunaforce/message/{message => token}/repository/TokenKeyJpaRepository.java (67%) rename src/main/java/com/tunaforce/message/{message => token}/service/RegistrationService.java (82%) create mode 100644 src/test/java/com/tunaforce/message/TimstampedTest.java diff --git a/src/main/java/com/tunaforce/message/MessageApplication.java b/src/main/java/com/tunaforce/message/MessageApplication.java index 0bb3717..e0e109a 100644 --- a/src/main/java/com/tunaforce/message/MessageApplication.java +++ b/src/main/java/com/tunaforce/message/MessageApplication.java @@ -4,10 +4,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication @EnableFeignClients @EnableDiscoveryClient +@EnableJpaAuditing public class MessageApplication { public static void main(String[] args) { diff --git a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java index b0d91f5..5d2f9ad 100644 --- a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java +++ b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java @@ -8,6 +8,8 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.resource.NoResourceFoundException; +import java.util.NoSuchElementException; + @RestControllerAdvice public class ApiExceptionAdvice { @ExceptionHandler(ApiException.class) @@ -45,6 +47,17 @@ public ResponseEntity> notFoundExceptionHandler(HttpServletR return ResponseEntity .ok(apiResponse); } + @ExceptionHandler(NoSuchElementException.class) + public ResponseEntity> noSuchElementExceptionHandler(HttpServletRequest request, final NoSuchElementException NoSuchElementException) { + ApiResponse apiResponse = ApiResponse.builder() + .status(ApiStatus.NOT_FOUND.getStatusCode()) + .message(ApiStatus.NOT_FOUND.getMessage()) + .errors(NoSuchElementException.getMessage()) + .build(); + + return ResponseEntity + .ok(apiResponse); + } @ExceptionHandler(SlackApiException.class) public ResponseEntity> slackApiExceptionHandler(HttpServletRequest request, final SlackApiException slackApiException) { diff --git a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java index 61eb36e..67f1327 100644 --- a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java +++ b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java @@ -1,15 +1,21 @@ package com.tunaforce.message.config; +import org.jetbrains.annotations.NotNull; import org.springframework.data.domain.AuditorAware; +import org.springframework.stereotype.Component; import java.util.Optional; +import java.util.UUID; -public class AuditorAwareImpl implements AuditorAware { +public class AuditorAwareImpl implements AuditorAware { + @NotNull @Override - public Optional getCurrentAuditor() { - //SecurityContext로 사용자 정보 반환 - return Optional.of(null); + public Optional getCurrentAuditor() { + // TODO: 실제 서비스는 현재 로그인 사용자 ID 반환 +// return Optional.of("00000000-0000-0000-0000-000000000000"); + //return Optional.of(UUID.fromString("00000000-0000-0000-0000-000000000000")); // 임시 UUID + return Optional.of(UUID.randomUUID()); } } diff --git a/src/main/java/com/tunaforce/message/config/JpaConfig.java b/src/main/java/com/tunaforce/message/config/JpaConfig.java index ba8b7d6..9d30cb1 100644 --- a/src/main/java/com/tunaforce/message/config/JpaConfig.java +++ b/src/main/java/com/tunaforce/message/config/JpaConfig.java @@ -1,13 +1,17 @@ package com.tunaforce.message.config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.data.domain.AuditorAware; +import java.util.UUID; +@Configuration public class JpaConfig { - - public AuditorAware auditorProvider() { + @Bean + public AuditorAware auditorProvider() { return new AuditorAwareImpl(); } } diff --git a/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java b/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java new file mode 100644 index 0000000..b74fc6d --- /dev/null +++ b/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java @@ -0,0 +1,34 @@ +package com.tunaforce.message.maps.controller; + + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.maps.dto.response.CoordinatesDataResponseDto; +import com.tunaforce.message.maps.service.mapInfoService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/maps") +@RequiredArgsConstructor +public class mapInfoController { + + private final mapInfoService mapInfoService; + + //좌표 반환 API + @GetMapping("/Coordinates") + public ResponseEntity> getCoords(@RequestParam String address) throws JsonProcessingException { + CoordinatesDataResponseDto resultDto = mapInfoService.getCoords(address); + ApiResponse resultResponse = ApiResponse.success(resultDto); + return ResponseEntity.ok(resultResponse); + + } + + + //경로 추적 - 예상 거리와 예상 시간 봔환 + +} diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java b/src/main/java/com/tunaforce/message/maps/dto/naverMap/Address.java similarity index 88% rename from src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java rename to src/main/java/com/tunaforce/message/maps/dto/naverMap/Address.java index 627baf5..e425f3d 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverMap/Address.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverMap/Address.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverMap; +package com.tunaforce.message.maps.dto.naverMap; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java b/src/main/java/com/tunaforce/message/maps/dto/naverMap/AddressElement.java similarity index 85% rename from src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java rename to src/main/java/com/tunaforce/message/maps/dto/naverMap/AddressElement.java index 13c35a6..6691e73 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverMap/AddressElement.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverMap/AddressElement.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverMap; +package com.tunaforce.message.maps.dto.naverMap; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java b/src/main/java/com/tunaforce/message/maps/dto/naverMap/Meta.java similarity index 81% rename from src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java rename to src/main/java/com/tunaforce/message/maps/dto/naverMap/Meta.java index 0222793..a0cb7e6 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverMap/Meta.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverMap/Meta.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverMap; +package com.tunaforce.message.maps.dto.naverMap; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverMap/geocodeResponseDto.java b/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java similarity index 85% rename from src/main/java/com/tunaforce/message/message/dto/naverMap/geocodeResponseDto.java rename to src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java index 234082e..740e2d5 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverMap/geocodeResponseDto.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverMap; +package com.tunaforce.message.maps.dto.naverMap; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Goal.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Goal.java similarity index 64% rename from src/main/java/com/tunaforce/message/message/dto/naverRoute/Goal.java rename to src/main/java/com/tunaforce/message/maps/dto/naverRoute/Goal.java index d83cb4a..ed32fb1 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Goal.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Goal.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverRoute; +package com.tunaforce.message.maps.dto.naverRoute; import java.util.List; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Guide.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Guide.java similarity index 72% rename from src/main/java/com/tunaforce/message/message/dto/naverRoute/Guide.java rename to src/main/java/com/tunaforce/message/maps/dto/naverRoute/Guide.java index 21c004d..70cd737 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Guide.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Guide.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverRoute; +package com.tunaforce.message.maps.dto.naverRoute; public record Guide( int distance, diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Route.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Route.java similarity index 61% rename from src/main/java/com/tunaforce/message/message/dto/naverRoute/Route.java rename to src/main/java/com/tunaforce/message/maps/dto/naverRoute/Route.java index f95170c..4c0b37b 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Route.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Route.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverRoute; +package com.tunaforce.message.maps.dto.naverRoute; import java.util.List; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Section.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Section.java similarity index 75% rename from src/main/java/com/tunaforce/message/message/dto/naverRoute/Section.java rename to src/main/java/com/tunaforce/message/maps/dto/naverRoute/Section.java index 96fd177..f2cebcf 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Section.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Section.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverRoute; +package com.tunaforce.message.maps.dto.naverRoute; public record Section( int congestion, diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Start.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Start.java similarity index 60% rename from src/main/java/com/tunaforce/message/message/dto/naverRoute/Start.java rename to src/main/java/com/tunaforce/message/maps/dto/naverRoute/Start.java index c2f93f8..689a45a 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Start.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Start.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverRoute; +package com.tunaforce.message.maps.dto.naverRoute; import java.util.List; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Summary.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Summary.java similarity index 83% rename from src/main/java/com/tunaforce/message/message/dto/naverRoute/Summary.java rename to src/main/java/com/tunaforce/message/maps/dto/naverRoute/Summary.java index 2333fb1..9f9a63f 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Summary.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Summary.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverRoute; +package com.tunaforce.message.maps.dto.naverRoute; import java.util.List; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Traoptimal.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Traoptimal.java similarity index 76% rename from src/main/java/com/tunaforce/message/message/dto/naverRoute/Traoptimal.java rename to src/main/java/com/tunaforce/message/maps/dto/naverRoute/Traoptimal.java index ac15430..f28b41d 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverRoute/Traoptimal.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/Traoptimal.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverRoute; +package com.tunaforce.message.maps.dto.naverRoute; import java.util.List; diff --git a/src/main/java/com/tunaforce/message/message/dto/naverRoute/direction5ResponseDto.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/direction5ResponseDto.java similarity index 71% rename from src/main/java/com/tunaforce/message/message/dto/naverRoute/direction5ResponseDto.java rename to src/main/java/com/tunaforce/message/maps/dto/naverRoute/direction5ResponseDto.java index 6c51093..f9ad62e 100644 --- a/src/main/java/com/tunaforce/message/message/dto/naverRoute/direction5ResponseDto.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/direction5ResponseDto.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.naverRoute; +package com.tunaforce.message.maps.dto.naverRoute; public record direction5ResponseDto( int code, diff --git a/src/main/java/com/tunaforce/message/maps/dto/response/CoordinatesDataResponseDto.java b/src/main/java/com/tunaforce/message/maps/dto/response/CoordinatesDataResponseDto.java new file mode 100644 index 0000000..fc72138 --- /dev/null +++ b/src/main/java/com/tunaforce/message/maps/dto/response/CoordinatesDataResponseDto.java @@ -0,0 +1,12 @@ +package com.tunaforce.message.maps.dto.response; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CoordinatesDataResponseDto { + private String xLatitude; + private String yLongitude; +} diff --git a/src/main/java/com/tunaforce/message/maps/repository/mapInfoRepository.java b/src/main/java/com/tunaforce/message/maps/repository/mapInfoRepository.java new file mode 100644 index 0000000..da7f5e8 --- /dev/null +++ b/src/main/java/com/tunaforce/message/maps/repository/mapInfoRepository.java @@ -0,0 +1,13 @@ +package com.tunaforce.message.maps.repository; + +import com.tunaforce.message.token.entity.MasterToken; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.Optional; +import java.util.UUID; + +public interface mapInfoRepository extends JpaRepository { + @Query("select m from MasterToken m where m.deletedAt != null ") + Optional getMasterToken(); +} diff --git a/src/main/java/com/tunaforce/message/cmmn/ClientCoordinatesData.java b/src/main/java/com/tunaforce/message/maps/service/ClientCoordinatesData.java similarity index 93% rename from src/main/java/com/tunaforce/message/cmmn/ClientCoordinatesData.java rename to src/main/java/com/tunaforce/message/maps/service/ClientCoordinatesData.java index 623c50b..593e065 100644 --- a/src/main/java/com/tunaforce/message/cmmn/ClientCoordinatesData.java +++ b/src/main/java/com/tunaforce/message/maps/service/ClientCoordinatesData.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.cmmn; +package com.tunaforce.message.maps.service; import org.springframework.cloud.openfeign.FeignClient; diff --git a/src/main/java/com/tunaforce/message/cmmn/ClientRoutesData.java b/src/main/java/com/tunaforce/message/maps/service/ClientRoutesData.java similarity index 93% rename from src/main/java/com/tunaforce/message/cmmn/ClientRoutesData.java rename to src/main/java/com/tunaforce/message/maps/service/ClientRoutesData.java index 700c33d..6a819c4 100644 --- a/src/main/java/com/tunaforce/message/cmmn/ClientRoutesData.java +++ b/src/main/java/com/tunaforce/message/maps/service/ClientRoutesData.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.cmmn; +package com.tunaforce.message.maps.service; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; diff --git a/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java b/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java new file mode 100644 index 0000000..ad3209c --- /dev/null +++ b/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java @@ -0,0 +1,40 @@ +package com.tunaforce.message.maps.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.tunaforce.message.maps.dto.response.CoordinatesDataResponseDto; +import com.tunaforce.message.token.entity.MasterToken; +import com.tunaforce.message.maps.repository.mapInfoRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.NoSuchElementException; + +@Service +@RequiredArgsConstructor +public class mapInfoService { + + private final ClientCoordinatesData clientCoordinatesData; + private final mapInfoRepository mapInfoRepository; + + // 경도 위도 값 반환 부 + public CoordinatesDataResponseDto getCoords(String address) throws JsonProcessingException { + MasterToken masterToken = mapInfoRepository.getMasterToken().orElseThrow( + () -> new NoSuchElementException("MasterTokens not found") + ); + //DB에서 가져와야함 + String Id = masterToken.getMapId(); + String Key = masterToken.getMapKey(); + + String result = clientCoordinatesData.getGeocode( + Id, + Key, + address + ); + ObjectMapper dataParser = new ObjectMapper(); + + return dataParser.readValue(result, CoordinatesDataResponseDto.class); + + + } +} diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index b8e50c8..8bd91a5 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -32,6 +32,7 @@ public ResponseEntity>> getLogDatas return ResponseEntity.ok(reaultDto); } + @PostMapping public ResponseEntity> sendMessage( @RequestBody CreateMessageLogRequestDto createMessageLogRequestDto, @@ -44,7 +45,8 @@ public ResponseEntity> sendMessage( return ResponseEntity.ok(reaultDto); //테이블에 로그를 남기는 로직 구현 - } + + } diff --git a/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java index 0d72562..e43b1bc 100644 --- a/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/request/CreateMessageLogRequestDto.java @@ -1,11 +1,15 @@ package com.tunaforce.message.message.dto.request; +import jakarta.validation.constraints.NotNull; + import java.util.UUID; public record CreateMessageLogRequestDto( + @NotNull String content, //Sender의 경우 헤더에 포함된 user_id로 구분 UUID senderId, + @NotNull UUID receiverId ) { diff --git a/src/main/java/com/tunaforce/message/message/dto/request/MapKeyRequestDto.java b/src/main/java/com/tunaforce/message/message/dto/request/MapKeyRequestDto.java index cf41dad..761ed7a 100644 --- a/src/main/java/com/tunaforce/message/message/dto/request/MapKeyRequestDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/request/MapKeyRequestDto.java @@ -9,7 +9,7 @@ @Getter @AllArgsConstructor public class MapKeyRequestDto { - @NotNull + @NotNull(message = "userId가 누락 되었습니다.") private UUID userId; private String mapId; private String mapkey; diff --git a/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java index 8c3353a..554bbce 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java @@ -1,6 +1,6 @@ package com.tunaforce.message.message.dto.response; -import com.tunaforce.message.message.entity.MasterToken; +import com.tunaforce.message.token.entity.MasterToken; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java index 6427e6f..e6be879 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryRouteLog.java @@ -16,7 +16,7 @@ public class DeliveryRouteLog extends Timestamped { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + //@GeneratedValue(strategy = GenerationType.IDENTITY) private UUID deliveryIdx; @Column(name = "delivery_Id", nullable = false) private String deliveryId; diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java index 3374809..9fd51dd 100644 --- a/src/main/java/com/tunaforce/message/message/service/MessageService.java +++ b/src/main/java/com/tunaforce/message/message/service/MessageService.java @@ -1,24 +1,20 @@ package com.tunaforce.message.message.service; import com.slack.api.methods.SlackApiException; -import com.tunaforce.message.api.ApiResponse; import com.tunaforce.message.cmmn.SlackMsg; import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; import com.tunaforce.message.message.dto.response.MessageLogResponseDto; -import com.tunaforce.message.message.dto.response.SearchLogResponseDto; import com.tunaforce.message.message.dto.response.UserInformationResponseDto; -import com.tunaforce.message.message.entity.MasterToken; +import com.tunaforce.message.token.entity.MasterToken; import com.tunaforce.message.message.entity.MessageManagement; import com.tunaforce.message.message.repository.MessageLogRepository; -import com.tunaforce.message.message.repository.TokenKeyJpaRepository; +import com.tunaforce.message.token.repository.TokenKeyJpaRepository; import com.tunaforce.message.message.service.feignClient.ClientAuthService; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.List; -import java.util.Optional; import java.util.UUID; @Service @@ -31,26 +27,33 @@ public class MessageService { private final SlackMsg slackMsg; public String sendMessage(UUID senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { + //원래는 senderId와 receiverId를 Auth에서 name을 받아서 입력하도록 함 + //테스트로 주석 처리 + //senderID는 나중에 messageManagement에서 값을 반환 받을 때 필요 + //여기서 senderId는 유저아이디임 slackID가 아님 UserInformationResponseDto senderAppId = clientAuthService.getUserInfo(senderId); UserInformationResponseDto receiverAppId = clientAuthService.getUserInfo(createMessageLogRequestDto.receiverId()); + //redis에 저장로직 추후 추가 //받은 값과 조회한 값을 기준으로 응답 데이터 만듬 MessageLogResponseDto resultData = new MessageLogResponseDto( senderAppId.getName(), createMessageLogRequestDto.content(), - receiverAppId.getName() + receiverAppId.getName(), + senderId, + createMessageLogRequestDto.receiverId() ); - //ApiResponse resultDto = ApiResponse.success("null"); //앱을 통한 메세지 송신 로직 구성 //토큰 받아오는 로직 - //이 테이블은 여러개의 값이 존재할 수 없음 + //이 테이블은 논리적으로 제거가 안된 값이 여러개의 값이 존재할 수 없음 + //deletedAt 부분인 null이 아닌 값 즉 논리적 제거가 되지 않은 값 MasterToken tempKeys = tokenKeyJpaRepository.findByDeletedAt().get(0); - slackMsg.sendDirectMessage(tempKeys.getMessageAppToken(), receiverAppId.getSlackId(), resultData.getFormMessage()); + return "null"; } diff --git a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java index 58badf4..bc8e1a3 100644 --- a/src/main/java/com/tunaforce/message/message/service/RoutLogService.java +++ b/src/main/java/com/tunaforce/message/message/service/RoutLogService.java @@ -1,7 +1,7 @@ package com.tunaforce.message.message.service; -import com.tunaforce.message.cmmn.ClientRoutesData; +import com.tunaforce.message.maps.service.ClientRoutesData; import com.tunaforce.message.cmmn.RouteData; import com.tunaforce.message.message.dto.response.SearchLogResponseDto; import com.tunaforce.message.message.entity.DeliveryRouteLog; diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java index 8325569..b8502d6 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientCoordinatesService.java @@ -1,6 +1,6 @@ package com.tunaforce.message.message.service.feignClient; -import com.tunaforce.message.cmmn.ClientCoordinatesData; +import com.tunaforce.message.maps.service.ClientCoordinatesData; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/tunaforce/message/message/controller/RegistrationController.java b/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java similarity index 88% rename from src/main/java/com/tunaforce/message/message/controller/RegistrationController.java rename to src/main/java/com/tunaforce/message/token/controller/RegistrationController.java index 086a28f..e797230 100644 --- a/src/main/java/com/tunaforce/message/message/controller/RegistrationController.java +++ b/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java @@ -1,9 +1,10 @@ -package com.tunaforce.message.message.controller; +package com.tunaforce.message.token.controller; import com.tunaforce.message.api.ApiResponse; import com.tunaforce.message.message.dto.request.MapKeyRequestDto; import com.tunaforce.message.message.dto.response.MapKeyReesponseDto; -import com.tunaforce.message.message.service.RegistrationService; +import com.tunaforce.message.token.service.RegistrationService; +import jakarta.transaction.Transactional; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -38,10 +39,11 @@ public ResponseEntity> getTokens(@PathVariable U //userId 는 필수 값 @PostMapping + @Transactional public ResponseEntity> mapRegisterToken( @RequestBody @Valid MapKeyRequestDto mapKeyRequestDto - ) throws NoResourceFoundException { - registrationService.updateTokens(mapKeyRequestDto); + ) { + registrationService.createTokens(mapKeyRequestDto); ApiResponse resultDto = ApiResponse.success("null"); return ResponseEntity.ok(resultDto); } diff --git a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java b/src/main/java/com/tunaforce/message/token/entity/MasterToken.java similarity index 91% rename from src/main/java/com/tunaforce/message/message/entity/MasterToken.java rename to src/main/java/com/tunaforce/message/token/entity/MasterToken.java index 0415527..8a8ace3 100644 --- a/src/main/java/com/tunaforce/message/message/entity/MasterToken.java +++ b/src/main/java/com/tunaforce/message/token/entity/MasterToken.java @@ -1,6 +1,7 @@ -package com.tunaforce.message.message.entity; +package com.tunaforce.message.token.entity; import com.tunaforce.message.message.dto.request.MapKeyRequestDto; +import com.tunaforce.message.message.entity.Timestamped; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Getter; @@ -23,7 +24,6 @@ public class MasterToken extends Timestamped { // 사용 키 @Id private UUID userId; - @Column(length = 150, name = "map_id") private String mapId; @Column(length = 150, name = "map_key") @@ -36,7 +36,6 @@ public MasterToken(MapKeyRequestDto mapKeyRequestDto) { this.mapId = mapKeyRequestDto.getMapId(); this.mapKey = mapKeyRequestDto.getMapkey(); this.messageAppToken = mapKeyRequestDto.getMessageToken(); - } public void deleteTokens(UUID userId) { diff --git a/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java b/src/main/java/com/tunaforce/message/token/repository/TokenKeyJpaRepository.java similarity index 67% rename from src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java rename to src/main/java/com/tunaforce/message/token/repository/TokenKeyJpaRepository.java index 87222bb..2ca10b6 100644 --- a/src/main/java/com/tunaforce/message/message/repository/TokenKeyJpaRepository.java +++ b/src/main/java/com/tunaforce/message/token/repository/TokenKeyJpaRepository.java @@ -1,6 +1,6 @@ -package com.tunaforce.message.message.repository; +package com.tunaforce.message.token.repository; -import com.tunaforce.message.message.entity.MasterToken; +import com.tunaforce.message.token.entity.MasterToken; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -11,7 +11,7 @@ @Repository public interface TokenKeyJpaRepository extends JpaRepository { - @Query("SELECT M FROM MasterToken M WHERE M.deletedAt != null") + @Query("SELECT M FROM MasterToken M WHERE M.deletedAt is null") List findByDeletedAt(); } diff --git a/src/main/java/com/tunaforce/message/message/service/RegistrationService.java b/src/main/java/com/tunaforce/message/token/service/RegistrationService.java similarity index 82% rename from src/main/java/com/tunaforce/message/message/service/RegistrationService.java rename to src/main/java/com/tunaforce/message/token/service/RegistrationService.java index fbea904..898d5e1 100644 --- a/src/main/java/com/tunaforce/message/message/service/RegistrationService.java +++ b/src/main/java/com/tunaforce/message/token/service/RegistrationService.java @@ -1,19 +1,17 @@ -package com.tunaforce.message.message.service; +package com.tunaforce.message.token.service; import com.tunaforce.message.message.dto.request.MapKeyRequestDto; import com.tunaforce.message.message.dto.response.MapKeyReesponseDto; -import com.tunaforce.message.message.entity.MasterToken; -import com.tunaforce.message.message.repository.TokenKeyJpaRepository; +import com.tunaforce.message.token.entity.MasterToken; +import com.tunaforce.message.token.repository.TokenKeyJpaRepository; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.web.servlet.resource.NoResourceFoundException; import java.util.*; -import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -46,6 +44,19 @@ public MapKeyReesponseDto updateTokens(MapKeyRequestDto mapKeyRequestDto) // 3. 트랜잭션 커밋 시점에 자동 업데이트 됨 return resultDto; } + + //@Transactional + public void createTokens(MapKeyRequestDto mapKeyRequestDto){ + MasterToken masterToken = new MasterToken( + mapKeyRequestDto.getUserId(), + mapKeyRequestDto.getMapId(), + mapKeyRequestDto.getMapkey(), + mapKeyRequestDto.getMessageToken() + ); + MasterToken temp = tokenKeyJpaRepository.save(masterToken); + } + + //앱 변경시에 논리적 DB 제거 public void deleteTokens(UUID userId) throws NoResourceFoundException { MasterToken mT = tokenKeyJpaRepository.findById(userId).orElseThrow( diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index 3501225..b8697d7 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -3,9 +3,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.tunaforce.message.cmmn.ClientCoordinatesData; -import com.tunaforce.message.cmmn.ClientRoutesData; -import com.tunaforce.message.message.dto.naverMap.*; +import com.tunaforce.message.maps.service.ClientCoordinatesData; +import com.tunaforce.message.maps.service.ClientRoutesData; +import com.tunaforce.message.maps.dto.naverMap.geocodeResponseDto; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/test/java/com/tunaforce/message/TimstampedTest.java b/src/test/java/com/tunaforce/message/TimstampedTest.java new file mode 100644 index 0000000..6face5a --- /dev/null +++ b/src/test/java/com/tunaforce/message/TimstampedTest.java @@ -0,0 +1,40 @@ +package com.tunaforce.message; + +import com.tunaforce.message.token.entity.MasterToken; +import com.tunaforce.message.message.dto.request.MapKeyRequestDto; +import com.tunaforce.message.token.repository.TokenKeyJpaRepository; +import jakarta.transaction.Transactional; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.UUID; + +@SpringBootTest +@Transactional +public class TimstampedTest { + + @Autowired + private TokenKeyJpaRepository tokenKeyJpaRepository; + + @Test + @DisplayName("DB insert 추가 테스트") + public void insertToken() { + + MapKeyRequestDto mapKeyRequestDto = new MapKeyRequestDto( + UUID.randomUUID(), + "osh066qnrv", + "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj", + "xoxb-8953330136789-9365014243201-rkNUnlaP1FndcylHCJB3OleP" + ); + + MasterToken masterToken = new MasterToken(mapKeyRequestDto); + + tokenKeyJpaRepository.save(masterToken); + + Assertions.assertThat(masterToken.getCreatedAt()).isNotNull(); + + } +} From 15f228afab5abe7c49a63db88a420efc71c62e81 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Wed, 20 Aug 2025 15:02:53 +0900 Subject: [PATCH 24/29] =?UTF-8?q?add=20:=20=EA=B2=BD=EB=A1=9C=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20=ED=95=A8=EC=88=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80=20fix=20:=20=EB=B0=B0?= =?UTF-8?q?=EC=86=A1=20=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8=ED=8A=B8=20URI?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tunaforce/message/MessageApplication.java | 2 + .../maps/controller/mapInfoController.java | 9 ++- .../maps/dto/naverMap/geocodeResponseDto.java | 11 ++++ .../message/maps/service/mapInfoService.java | 33 +++++++++- .../message/DirectMessageScheduler.java | 43 +++++++++++++ .../message/controller/LogController.java | 8 --- .../dto/response/MapRouteResponseDto.java | 5 -- .../UserInformationResponseDto.java | 2 +- .../hub}/HubResponseDto.java | 2 +- .../dto/response/hub/HubsResponseDto.java | 12 ++++ .../{ => map}/MapKeyReesponseDto.java | 2 +- .../dto/response/map/MapRouteResponseDto.java | 5 ++ .../message/entity/DeliveryStatus.java | 6 ++ .../message/repository/StatusRepository.java | 10 +++ .../message/service/MessageService.java | 15 ++++- .../feignClient/ClientAuthService.java | 2 +- .../feignClient/ClientDeliveryService.java | 2 +- .../service/feignClient/ClientHubService.java | 10 ++- .../controller/RegistrationController.java | 2 +- .../token/service/RegistrationService.java | 2 +- .../tunaforce/message/GetCoordinatesTest.java | 64 ++++++++++++++++++- 21 files changed, 218 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java delete mode 100644 src/main/java/com/tunaforce/message/message/dto/response/MapRouteResponseDto.java rename src/main/java/com/tunaforce/message/message/dto/response/{ => auth}/UserInformationResponseDto.java (85%) rename src/main/java/com/tunaforce/message/message/dto/{msa_dto => response/hub}/HubResponseDto.java (73%) create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/hub/HubsResponseDto.java rename src/main/java/com/tunaforce/message/message/dto/response/{ => map}/MapKeyReesponseDto.java (91%) create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/map/MapRouteResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/repository/StatusRepository.java diff --git a/src/main/java/com/tunaforce/message/MessageApplication.java b/src/main/java/com/tunaforce/message/MessageApplication.java index e0e109a..d23ec06 100644 --- a/src/main/java/com/tunaforce/message/MessageApplication.java +++ b/src/main/java/com/tunaforce/message/MessageApplication.java @@ -5,11 +5,13 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableFeignClients @EnableDiscoveryClient @EnableJpaAuditing +@EnableScheduling public class MessageApplication { public static void main(String[] args) { diff --git a/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java b/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java index b74fc6d..c09cb73 100644 --- a/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java +++ b/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.tunaforce.message.api.ApiResponse; +import com.tunaforce.message.maps.dto.naverMap.geocodeResponseDto; import com.tunaforce.message.maps.dto.response.CoordinatesDataResponseDto; import com.tunaforce.message.maps.service.mapInfoService; import lombok.RequiredArgsConstructor; @@ -22,8 +23,12 @@ public class mapInfoController { //좌표 반환 API @GetMapping("/Coordinates") public ResponseEntity> getCoords(@RequestParam String address) throws JsonProcessingException { - CoordinatesDataResponseDto resultDto = mapInfoService.getCoords(address); - ApiResponse resultResponse = ApiResponse.success(resultDto); + geocodeResponseDto resultDto = mapInfoService.getCoords(address); + CoordinatesDataResponseDto resultCoordinate = new CoordinatesDataResponseDto( + resultDto.getAddresses().get(0).getX(), + resultDto.getAddresses().get(0).getY() + ); + ApiResponse resultResponse = ApiResponse.success(resultCoordinate); return ResponseEntity.ok(resultResponse); } diff --git a/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java b/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java index 740e2d5..8bfd60c 100644 --- a/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.ArrayList; import java.util.List; @Getter @@ -15,4 +16,14 @@ public class geocodeResponseDto { public List
addresses; public String errorMessage; + public List getPoints() { + + List points = new ArrayList<>(); + + for (Address address : this.addresses) { + points.add(address.getX()+","+ address.getY()); + } + + return points; + }; } diff --git a/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java b/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java index ad3209c..20993d2 100644 --- a/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java +++ b/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java @@ -2,6 +2,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.tunaforce.message.cmmn.RouteData; +import com.tunaforce.message.maps.dto.naverMap.geocodeResponseDto; +import com.tunaforce.message.maps.dto.naverRoute.direction5ResponseDto; import com.tunaforce.message.maps.dto.response.CoordinatesDataResponseDto; import com.tunaforce.message.token.entity.MasterToken; import com.tunaforce.message.maps.repository.mapInfoRepository; @@ -15,10 +18,11 @@ public class mapInfoService { private final ClientCoordinatesData clientCoordinatesData; + private final ClientRoutesData clientRoutesData; private final mapInfoRepository mapInfoRepository; // 경도 위도 값 반환 부 - public CoordinatesDataResponseDto getCoords(String address) throws JsonProcessingException { + public geocodeResponseDto getCoords(String address) throws JsonProcessingException { MasterToken masterToken = mapInfoRepository.getMasterToken().orElseThrow( () -> new NoSuchElementException("MasterTokens not found") ); @@ -33,8 +37,33 @@ public CoordinatesDataResponseDto getCoords(String address) throws JsonProcessin ); ObjectMapper dataParser = new ObjectMapper(); - return dataParser.readValue(result, CoordinatesDataResponseDto.class); + return dataParser.readValue(result, geocodeResponseDto.class); } + + + //허브에서 경위도가 자체 + public direction5ResponseDto getRoute(RouteData routeData) throws JsonProcessingException { + //각 주소로 경위도를 반환한다. + geocodeResponseDto startCoordinate = getCoords(routeData.getStart()); + geocodeResponseDto endCoordinate = getCoords(routeData.getGoal()); + //네이버 API 필요 ID KEY + MasterToken masterToken = mapInfoRepository.getMasterToken().orElseThrow( + () -> new NoSuchElementException("MasterTokens not found") + ); + //DB에서 가져와야함 + String Id = masterToken.getMapId(); + String Key = masterToken.getMapKey(); + + String rowData = clientRoutesData.getRoute( + Id, + Key, + startCoordinate.getPoints().get(0), + endCoordinate.getPoints().get(0) + ); + + ObjectMapper dataParser = new ObjectMapper(); + return dataParser.readValue(rowData, direction5ResponseDto.class); + } } diff --git a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java new file mode 100644 index 0000000..02885fa --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java @@ -0,0 +1,43 @@ +package com.tunaforce.message.message; + + +import com.tunaforce.message.message.dto.response.hub.HubsResponseDto; +import com.tunaforce.message.message.entity.DeliveryStatus; +import com.tunaforce.message.message.repository.StatusRepository; +import com.tunaforce.message.message.service.feignClient.ClientHubService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +@Component + +public class DirectMessageScheduler { + + @Autowired + private StatusRepository statusRepository; + @Autowired + private ClientHubService clientHubService; + + @Scheduled(cron = "${scheduler.second} ${scheduler.minute} ${scheduler.hour} * * *") // 매일 오전 6시 (초, 분, 시, 일, 월, 요일) + public void directMessageScheduler() { + //hub 리스트를 받아온다 + HubsResponseDto resultHubs = clientHubService.getHubs(0,1); + + //허브 별 담당자 조회 + + + //status db 검색 + //어제 마지막 값을 받아온다(배달원 순번 값) + DeliveryStatus deliveryStatus = statusRepository.findAll().get(0); + UUID turnNo = deliveryStatus.getUserId(); + + //금일 예정 되어 있는 배송들 리스트 + + + //배송인원들 리스트 + + + } +} diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java index ace427a..e286f5e 100644 --- a/src/main/java/com/tunaforce/message/message/controller/LogController.java +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -31,14 +31,6 @@ public ResponseEntity>> getLogDatas() thr return ResponseEntity.ok(resultDto); } - //해당 테이블의 생성 시점을 확인할 필요가 있음 - //1, 각 허브에 배송 물건이 도착 했을 경우 routelog 테이블의 생성이 필요함 - @다예(배송 MSA) 허브 도착 시에 - //2. 당일 배송 담당자를 할당 후 생성 - @PostMapping - public ResponseEntity>> createLogDatas(@RequestBody CreateRouteLogRequestDto routRequests){ - - return ResponseEntity.ok(null); - } //deliveryID 값으로 검색하여 해당 값을 받아 수정 //수정되는 값은 실제 데이터의 update : real_distance, real_time, curr_status //실제 총 거리와 시간이 기입되면 배송 완료라고 가정한다. diff --git a/src/main/java/com/tunaforce/message/message/dto/response/MapRouteResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/MapRouteResponseDto.java deleted file mode 100644 index c1dfb7f..0000000 --- a/src/main/java/com/tunaforce/message/message/dto/response/MapRouteResponseDto.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.tunaforce.message.message.dto.response; - - -public class MapRouteResponseDto { -} diff --git a/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/auth/UserInformationResponseDto.java similarity index 85% rename from src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java rename to src/main/java/com/tunaforce/message/message/dto/response/auth/UserInformationResponseDto.java index a976c27..3f52e33 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/UserInformationResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/auth/UserInformationResponseDto.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.response; +package com.tunaforce.message.message.dto.response.auth; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/tunaforce/message/message/dto/msa_dto/HubResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/hub/HubResponseDto.java similarity index 73% rename from src/main/java/com/tunaforce/message/message/dto/msa_dto/HubResponseDto.java rename to src/main/java/com/tunaforce/message/message/dto/response/hub/HubResponseDto.java index 43b2aa2..427cf89 100644 --- a/src/main/java/com/tunaforce/message/message/dto/msa_dto/HubResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/hub/HubResponseDto.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.msa_dto; +package com.tunaforce.message.message.dto.response.hub; public record HubResponseDto( Long Id, diff --git a/src/main/java/com/tunaforce/message/message/dto/response/hub/HubsResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/hub/HubsResponseDto.java new file mode 100644 index 0000000..ed21dbd --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/hub/HubsResponseDto.java @@ -0,0 +1,12 @@ +package com.tunaforce.message.message.dto.response.hub; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.List; + +@Getter +@AllArgsConstructor +public class HubsResponseDto { + List content; +} diff --git a/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/map/MapKeyReesponseDto.java similarity index 91% rename from src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java rename to src/main/java/com/tunaforce/message/message/dto/response/map/MapKeyReesponseDto.java index 554bbce..47a792d 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/MapKeyReesponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/map/MapKeyReesponseDto.java @@ -1,4 +1,4 @@ -package com.tunaforce.message.message.dto.response; +package com.tunaforce.message.message.dto.response.map; import com.tunaforce.message.token.entity.MasterToken; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/tunaforce/message/message/dto/response/map/MapRouteResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/map/MapRouteResponseDto.java new file mode 100644 index 0000000..6a2f0d1 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/map/MapRouteResponseDto.java @@ -0,0 +1,5 @@ +package com.tunaforce.message.message.dto.response.map; + + +public class MapRouteResponseDto { +} diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java index 0f3d331..7bc7a58 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java @@ -5,11 +5,17 @@ import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; import java.util.UUID; +@Getter @Entity @Table(name = "p_delivery_status") +@AllArgsConstructor +@NoArgsConstructor public class DeliveryStatus extends Timestamped { @Id private UUID userId; diff --git a/src/main/java/com/tunaforce/message/message/repository/StatusRepository.java b/src/main/java/com/tunaforce/message/message/repository/StatusRepository.java new file mode 100644 index 0000000..1a6f3e8 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/repository/StatusRepository.java @@ -0,0 +1,10 @@ +package com.tunaforce.message.message.repository; + +import com.tunaforce.message.message.entity.DeliveryStatus; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface StatusRepository extends JpaRepository { + +} diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java index 9fd51dd..4862bbc 100644 --- a/src/main/java/com/tunaforce/message/message/service/MessageService.java +++ b/src/main/java/com/tunaforce/message/message/service/MessageService.java @@ -4,7 +4,7 @@ import com.tunaforce.message.cmmn.SlackMsg; import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; import com.tunaforce.message.message.dto.response.MessageLogResponseDto; -import com.tunaforce.message.message.dto.response.UserInformationResponseDto; +import com.tunaforce.message.message.dto.response.auth.UserInformationResponseDto; import com.tunaforce.message.token.entity.MasterToken; import com.tunaforce.message.message.entity.MessageManagement; import com.tunaforce.message.message.repository.MessageLogRepository; @@ -44,14 +44,23 @@ public String sendMessage(UUID senderId, CreateMessageLogRequestDto createMessag senderId, createMessageLogRequestDto.receiverId() ); - //앱을 통한 메세지 송신 로직 구성 //토큰 받아오는 로직 //이 테이블은 논리적으로 제거가 안된 값이 여러개의 값이 존재할 수 없음 //deletedAt 부분인 null이 아닌 값 즉 논리적 제거가 되지 않은 값 MasterToken tempKeys = tokenKeyJpaRepository.findByDeletedAt().get(0); - slackMsg.sendDirectMessage(tempKeys.getMessageAppToken(), receiverAppId.getSlackId(), resultData.getFormMessage()); + slackMsg.sendDirectMessage( + tempKeys.getMessageAppToken(), + receiverAppId.getSlackId(), + resultData.getFormMessage() + ); + + //로그는 송신이 된 후에 쌓여야 함 + MessageManagement messageManagement = new MessageManagement(resultData); + messageLogRepository.save(messageManagement); + //앱을 통한 메세지 송신 로직 구성 + return "null"; diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java index fea02a5..e19e29e 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java @@ -1,7 +1,7 @@ package com.tunaforce.message.message.service.feignClient; -import com.tunaforce.message.message.dto.response.UserInformationResponseDto; +import com.tunaforce.message.message.dto.response.auth.UserInformationResponseDto; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java index 813f7ce..b26e8f5 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java @@ -11,7 +11,7 @@ @Service @FeignClient(name="delivery-service", url="${DeliveryFeign.url}") public interface ClientDeliveryService { - @GetMapping("/deliverys") + @GetMapping("/deliverㅑs") List getListDelivery(); //업체 배송 담당자 조건으로 쿼리 diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientHubService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientHubService.java index f2c961e..6c726f9 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientHubService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientHubService.java @@ -1,13 +1,21 @@ package com.tunaforce.message.message.service.feignClient; -import com.tunaforce.message.message.dto.msa_dto.HubResponseDto; +import com.tunaforce.message.message.dto.response.hub.HubResponseDto; +import com.tunaforce.message.message.dto.response.hub.HubsResponseDto; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; @FeignClient(name = "hub-Service", url = "${Clients.Hub}") public interface ClientHubService { @GetMapping("/hubs/{hub_id}") HubResponseDto getHub(@PathVariable("hub_id") String hub_id); + @GetMapping("/hubs") + HubsResponseDto getHubs( + @RequestParam Integer page, + @RequestParam Integer size + ); + } diff --git a/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java b/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java index e797230..8f25fbf 100644 --- a/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java +++ b/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java @@ -2,7 +2,7 @@ import com.tunaforce.message.api.ApiResponse; import com.tunaforce.message.message.dto.request.MapKeyRequestDto; -import com.tunaforce.message.message.dto.response.MapKeyReesponseDto; +import com.tunaforce.message.message.dto.response.map.MapKeyReesponseDto; import com.tunaforce.message.token.service.RegistrationService; import jakarta.transaction.Transactional; import jakarta.validation.Valid; diff --git a/src/main/java/com/tunaforce/message/token/service/RegistrationService.java b/src/main/java/com/tunaforce/message/token/service/RegistrationService.java index 898d5e1..22c7bf9 100644 --- a/src/main/java/com/tunaforce/message/token/service/RegistrationService.java +++ b/src/main/java/com/tunaforce/message/token/service/RegistrationService.java @@ -2,7 +2,7 @@ import com.tunaforce.message.message.dto.request.MapKeyRequestDto; -import com.tunaforce.message.message.dto.response.MapKeyReesponseDto; +import com.tunaforce.message.message.dto.response.map.MapKeyReesponseDto; import com.tunaforce.message.token.entity.MasterToken; import com.tunaforce.message.token.repository.TokenKeyJpaRepository; import jakarta.transaction.Transactional; diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index b8697d7..3c4619e 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -3,15 +3,22 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.tunaforce.message.cmmn.RouteData; +import com.tunaforce.message.maps.dto.naverRoute.direction5ResponseDto; import com.tunaforce.message.maps.service.ClientCoordinatesData; import com.tunaforce.message.maps.service.ClientRoutesData; import com.tunaforce.message.maps.dto.naverMap.geocodeResponseDto; +import com.tunaforce.message.maps.service.mapInfoService; +import com.tunaforce.message.token.entity.MasterToken; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Configuration; +import java.util.NoSuchElementException; + @Configuration @SpringBootTest public class GetCoordinatesTest { @@ -20,7 +27,8 @@ public class GetCoordinatesTest { private ClientCoordinatesData clientCoordinatesData; @Autowired private ClientRoutesData clientRoutesData; - + @Autowired + private mapInfoService mapInfoService; @Test @@ -62,6 +70,8 @@ void getRoute() throws JsonProcessingException { "대구광역시 서구 비산동 320-9" ); + + ObjectMapper test = new ObjectMapper(); geocodeResponseDto geochangdto = test.readValue(geochang, geocodeResponseDto.class); geocodeResponseDto daegudto = test.readValue(daegu, geocodeResponseDto.class); @@ -79,4 +89,56 @@ void getRoute() throws JsonProcessingException { System.out.println("resultData = " + resultData); } + @Test + @DisplayName("루트 데이터2 테스트") + void getRoute2() throws JsonProcessingException { + RouteData routeData = new RouteData( + "거창군 마리면 풍계1길 27-103", + "대구광역시 서구 비산동 320-9" + ); + + + + String startStr = routeData.getStart(); + String endStr = routeData.getGoal(); + + + +// geocodeResponseDto startCoordinate = mapInfoService.getCoords(routeData.getStart()); +// geocodeResponseDto endCoordinate = mapInfoService.getCoords(routeData.getGoal()); + + //DB에서 가져와야함 + String Id = "osh066qnrv"; + String Key = "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj";; + + String result = clientCoordinatesData.getGeocode( + Id, + Key, + routeData.getStart() + ); + ObjectMapper dataParser = new ObjectMapper(); + + geocodeResponseDto startCoordinate = dataParser.readValue(result, geocodeResponseDto.class); + + result = clientCoordinatesData.getGeocode( + Id, + Key, + routeData.getGoal() + ); + + geocodeResponseDto endCoordinate = dataParser.readValue(result, geocodeResponseDto.class); + + + + String rowData = clientRoutesData.getRoute( + Id, + Key, + startCoordinate.getPoints().get(0), + endCoordinate.getPoints().get(0) + ); + + System.out.println("resultData = " + rowData); + Assertions.assertThat(rowData).isNotNull(); + } + } From ec4e160a29c8ac8e49e192cbb1d68cb9c8ddae6d Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Wed, 20 Aug 2025 16:14:57 +0900 Subject: [PATCH 25/29] =?UTF-8?q?add=20:=20=EA=B2=BD=EB=A1=9C=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20=ED=95=A8=EC=88=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=20=EC=B6=94=EA=B0=80=20fix=20:=20=EB=B0=B0?= =?UTF-8?q?=EC=86=A1=20=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8=ED=8A=B8=20URI?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tunaforce/message/SlackTest.java | 27 ------------- .../com/tunaforce/message/TimstampedTest.java | 40 ------------------- 2 files changed, 67 deletions(-) delete mode 100644 src/test/java/com/tunaforce/message/SlackTest.java delete mode 100644 src/test/java/com/tunaforce/message/TimstampedTest.java diff --git a/src/test/java/com/tunaforce/message/SlackTest.java b/src/test/java/com/tunaforce/message/SlackTest.java deleted file mode 100644 index 8d66d45..0000000 --- a/src/test/java/com/tunaforce/message/SlackTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.tunaforce.message; - -import com.slack.api.methods.SlackApiException; -import com.tunaforce.message.cmmn.SlackMsg; -import com.tunaforce.message.message.service.MessageService; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.io.IOException; - - -public class SlackTest { - - - @Test - @DisplayName("Slack Messaging Test") - public void SlackTest() throws SlackApiException, IOException { - SlackMsg slackMsg = new SlackMsg(); - String userId = "U08U19Q4N8M"; - String token = "xoxb-8953330136789-9365014243201-aBZLUFfIsQkid5JXZr9a22aV"; - slackMsg.sendDirectMessage(token, userId, "Writing Test"); - //Assertions.assertThat(slackMsg.sendDirectMessage(token, userId, "Test")); - } -} diff --git a/src/test/java/com/tunaforce/message/TimstampedTest.java b/src/test/java/com/tunaforce/message/TimstampedTest.java deleted file mode 100644 index 6face5a..0000000 --- a/src/test/java/com/tunaforce/message/TimstampedTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.tunaforce.message; - -import com.tunaforce.message.token.entity.MasterToken; -import com.tunaforce.message.message.dto.request.MapKeyRequestDto; -import com.tunaforce.message.token.repository.TokenKeyJpaRepository; -import jakarta.transaction.Transactional; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.UUID; - -@SpringBootTest -@Transactional -public class TimstampedTest { - - @Autowired - private TokenKeyJpaRepository tokenKeyJpaRepository; - - @Test - @DisplayName("DB insert 추가 테스트") - public void insertToken() { - - MapKeyRequestDto mapKeyRequestDto = new MapKeyRequestDto( - UUID.randomUUID(), - "osh066qnrv", - "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj", - "xoxb-8953330136789-9365014243201-rkNUnlaP1FndcylHCJB3OleP" - ); - - MasterToken masterToken = new MasterToken(mapKeyRequestDto); - - tokenKeyJpaRepository.save(masterToken); - - Assertions.assertThat(masterToken.getCreatedAt()).isNotNull(); - - } -} From 39f7bbcfed51395d080554bda91964462f001aea Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Fri, 22 Aug 2025 09:37:20 +0900 Subject: [PATCH 26/29] =?UTF-8?q?add=20:=20=EC=8A=A4=EC=BC=80=EC=A5=B4?= =?UTF-8?q?=EB=9F=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80(=EB=B0=B0?= =?UTF-8?q?=EC=86=A1=20=EB=AC=BC=ED=92=88=20=EB=B0=8F=20=EB=8B=B4=EB=8B=B9?= =?UTF-8?q?=EC=9E=90=20=EC=A0=95=EB=B3=B4)=20fix=20:=20=EA=B2=BD=EB=A1=9C?= =?UTF-8?q?=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=88=98=EC=8B=A0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 + .../message/api/ApiExceptionAdvice.java | 16 +++- .../api/SlackMessageSendException.java | 9 +++ .../com/tunaforce/message/cmmn/SlackMsg.java | 7 +- .../maps/controller/mapInfoController.java | 16 ++-- .../message/maps/service/mapInfoService.java | 4 +- .../message/DirectMessageScheduler.java | 73 ++++++++++++++++++- .../message/controller/LogController.java | 45 ++++++++++-- .../message/controller/MessageController.java | 28 +++++-- .../response/GetDeliveriesResponseDto.java | 21 ------ .../delivery/GetDeliveriesResponseDto.java | 20 +++++ .../delivery/GetDeliverymenResponseDto.java | 18 +++++ .../message/entity/DeliveryStatus.java | 3 +- .../feignClient/ClientAuthService.java | 2 +- .../feignClient/ClientDeliveryService.java | 17 ++++- .../controller/RegistrationController.java | 24 +++++- .../tunaforce/message/GetCoordinatesTest.java | 22 ++++++ 17 files changed, 271 insertions(+), 58 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/api/SlackMessageSendException.java delete mode 100644 src/main/java/com/tunaforce/message/message/dto/response/GetDeliveriesResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliveriesResponseDto.java create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliverymenResponseDto.java diff --git a/build.gradle b/build.gradle index 7cd3b5b..5e99af1 100644 --- a/build.gradle +++ b/build.gradle @@ -50,6 +50,10 @@ dependencyManagement { } } +springBoot { + mainClass = 'com.tunaforce.message.MessageApplication' +} + tasks.named('test') { useJUnitPlatform() } diff --git a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java index 5d2f9ad..2d723f7 100644 --- a/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java +++ b/src/main/java/com/tunaforce/message/api/ApiExceptionAdvice.java @@ -3,6 +3,7 @@ import com.slack.api.methods.SlackApiException; import jakarta.servlet.http.HttpServletRequest; import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -67,7 +68,18 @@ public ResponseEntity> slackApiExceptionHandler(HttpServletR .errors(slackApiException.getMessage()) .build(); - return ResponseEntity - .ok(apiResponse); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(apiResponse); + } + + @ExceptionHandler(SlackMessageSendException.class) + public ResponseEntity> handleSlackMessageSendException(SlackMessageSendException ex) { + ApiResponse apiResponse = ApiResponse.builder() + .status(HttpStatus.INTERNAL_SERVER_ERROR.value()) // 500 상태 코드 + .message("Slack 메시지 전송 실패") + .errors(ex.getMessage()) + .build(); + + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(apiResponse); } + } \ No newline at end of file diff --git a/src/main/java/com/tunaforce/message/api/SlackMessageSendException.java b/src/main/java/com/tunaforce/message/api/SlackMessageSendException.java new file mode 100644 index 0000000..107f2d1 --- /dev/null +++ b/src/main/java/com/tunaforce/message/api/SlackMessageSendException.java @@ -0,0 +1,9 @@ +package com.tunaforce.message.api; + +import com.slack.api.methods.SlackApiException; + +public class SlackMessageSendException extends RuntimeException { + public SlackMessageSendException(String message) { + super(message); + } +} diff --git a/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java b/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java index e10ec3c..8239a46 100644 --- a/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java +++ b/src/main/java/com/tunaforce/message/cmmn/SlackMsg.java @@ -7,7 +7,11 @@ import com.slack.api.methods.request.conversations.ConversationsOpenRequest; import com.slack.api.methods.response.chat.ChatPostMessageResponse; import com.slack.api.methods.response.conversations.ConversationsOpenResponse; +import com.tunaforce.message.api.SlackMessageSendException; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; +import okhttp3.Request; +import okhttp3.Response; import org.springframework.stereotype.Component; import java.io.IOException; @@ -67,8 +71,9 @@ public void sendDirectMessage(String slackToken,String userId, String message) t .build() ); + if (!openResponse.isOk()) { - throw new RuntimeException("Error opening conversation: " + openResponse.getError()); + throw new SlackMessageSendException("Error opening conversation: " + openResponse.getError()); } else{ log.info("From. {} \n message has sent : {}",userId ,message); diff --git a/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java b/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java index c09cb73..f43bd50 100644 --- a/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java +++ b/src/main/java/com/tunaforce/message/maps/controller/mapInfoController.java @@ -7,12 +7,13 @@ import com.tunaforce.message.maps.dto.response.CoordinatesDataResponseDto; import com.tunaforce.message.maps.service.mapInfoService; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import java.util.UUID; + +@Slf4j @RestController @RequestMapping("/maps") @RequiredArgsConstructor @@ -22,7 +23,12 @@ public class mapInfoController { //좌표 반환 API @GetMapping("/Coordinates") - public ResponseEntity> getCoords(@RequestParam String address) throws JsonProcessingException { + public ResponseEntity> getCoords( + @RequestParam String address, + @RequestHeader("X-User-Id") UUID userId + ) throws JsonProcessingException { + + log.info("{} -> \n Search address : {}",userId, address); geocodeResponseDto resultDto = mapInfoService.getCoords(address); CoordinatesDataResponseDto resultCoordinate = new CoordinatesDataResponseDto( resultDto.getAddresses().get(0).getX(), diff --git a/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java b/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java index 20993d2..f45c8c8 100644 --- a/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java +++ b/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java @@ -9,10 +9,12 @@ import com.tunaforce.message.token.entity.MasterToken; import com.tunaforce.message.maps.repository.mapInfoRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.NoSuchElementException; +@Slf4j @Service @RequiredArgsConstructor public class mapInfoService { @@ -29,7 +31,7 @@ public geocodeResponseDto getCoords(String address) throws JsonProcessingExcepti //DB에서 가져와야함 String Id = masterToken.getMapId(); String Key = masterToken.getMapKey(); - + log.info("Search Keys -> \n {} : {}",Id, Key); String result = clientCoordinatesData.getGeocode( Id, Key, diff --git a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java index 02885fa..5737e8a 100644 --- a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java +++ b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java @@ -1,15 +1,24 @@ package com.tunaforce.message.message; +import com.tunaforce.message.message.dto.response.delivery.GetDeliveriesResponseDto; +import com.tunaforce.message.message.dto.response.delivery.GetDeliverymenResponseDto; import com.tunaforce.message.message.dto.response.hub.HubsResponseDto; import com.tunaforce.message.message.entity.DeliveryStatus; import com.tunaforce.message.message.repository.StatusRepository; +import com.tunaforce.message.message.service.feignClient.ClientDeliveryService; import com.tunaforce.message.message.service.feignClient.ClientHubService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.UUID; +import java.util.stream.Collectors; @Component @@ -19,19 +28,71 @@ public class DirectMessageScheduler { private StatusRepository statusRepository; @Autowired private ClientHubService clientHubService; + @Autowired + private ClientDeliveryService clientDeliveryService; @Scheduled(cron = "${scheduler.second} ${scheduler.minute} ${scheduler.hour} * * *") // 매일 오전 6시 (초, 분, 시, 일, 월, 요일) public void directMessageScheduler() { - //hub 리스트를 받아온다 - HubsResponseDto resultHubs = clientHubService.getHubs(0,1); + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String today = now.format(formatter); + + //배송 리스트를 받아온다 + //배송 리스트에 대한 날짜로 받아옴 + List resultProduct = clientDeliveryService.getListDelivery(today); //허브 별 담당자 조회 + //role로 구분 + List resultAgents = clientDeliveryService.getListDeliverymen("Company"); + //허브 아이디로 각각 허브에 속한 담당자 끼리 묶는다 + Map> hubGrouped = + resultAgents.stream().collect(Collectors.groupingBy(GetDeliverymenResponseDto::getHubId)); + // 배송 물품을 허브 별로 + Map> productsinHub = + resultProduct.stream().collect(Collectors.groupingBy(GetDeliveriesResponseDto::getArrivalHubId)); //status db 검색 //어제 마지막 값을 받아온다(배달원 순번 값) - DeliveryStatus deliveryStatus = statusRepository.findAll().get(0); - UUID turnNo = deliveryStatus.getUserId(); + List deliveryStatus = statusRepository.findAll(); + + + + for (String hubId : hubGrouped.keySet()) { + List temphubList = productsinHub.get(hubId); + List tempmenList = hubGrouped.get(hubId); + //순번들을 별도로 받아 인덱스 값을 반환한다. + List tempMenNo = tempmenList.stream() + .map(GetDeliverymenResponseDto::getDeliverySeq) + .toList(); + + Optional lastTurns = deliveryStatus.stream() + .filter(ds -> hubId.equals(ds.getHubid())) + .findFirst(); + Long tempidx = lastTurns.get().getDeliverySeq(); + for (GetDeliveriesResponseDto productId : temphubList) { + int idx = tempMenNo.indexOf(tempidx); + GetDeliverymenResponseDto tempMen = tempmenList.get(++idx); + + } + + } + + //hub 리스트를 받아온다 + HubsResponseDto resultHubs = clientHubService.getHubs(0,0); + + + + + + for (GetDeliveriesResponseDto product : resultProduct) { + //출발 허브 + product.getArrivalHubId(); + } + + + + //금일 예정 되어 있는 배송들 리스트 @@ -41,3 +102,7 @@ public void directMessageScheduler() { } } + + + + diff --git a/src/main/java/com/tunaforce/message/message/controller/LogController.java b/src/main/java/com/tunaforce/message/message/controller/LogController.java index e286f5e..46fe60e 100644 --- a/src/main/java/com/tunaforce/message/message/controller/LogController.java +++ b/src/main/java/com/tunaforce/message/message/controller/LogController.java @@ -8,10 +8,12 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.UUID; @Slf4j @Tag(name = "로그 CRUD") @@ -24,25 +26,56 @@ public class LogController { private final ClientCoordinatesService ccs; + //경로 추적을 위한 @GetMapping - public ResponseEntity>> getLogDatas() throws Exception { + public ResponseEntity>> getLogDatas( + @RequestHeader("X-User_Id") UUID user_Id, + @RequestHeader("X-Roles") String roles + ) throws Exception { + log.info("경로 기록 조회"); + log.info("{} has approached", user_Id); + log.info("{} role", roles); + + if (roles.equals("MASTER")) { List tempList = routLogService.readAllLog(); ApiResponse> resultDto = ApiResponse.success(tempList); return ResponseEntity.ok(resultDto); + } + else{ + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + } + //deliveryID 값으로 검색하여 해당 값을 받아 수정 //수정되는 값은 실제 데이터의 update : real_distance, real_time, curr_status //실제 총 거리와 시간이 기입되면 배송 완료라고 가정한다. @PutMapping - public ResponseEntity> updateLogRealData(@RequestParam Long deliveryId ){ - Boolean tempList = routLogService.updateStatus(deliveryId); - ApiResponse resultDto = ApiResponse.success(tempList); - return ResponseEntity.ok(resultDto); + public ResponseEntity> updateLogRealData( + @RequestParam Long deliveryId, + @RequestHeader("X-User-Id") UUID user_Id, + @RequestHeader("X-Roles") String roles + + ) { + log.info("{} has approached", user_Id); + log.info("{} roles", roles); + + if (roles.equals("MASTER")) { + Boolean tempList = routLogService.updateStatus(deliveryId); + ApiResponse resultDto = ApiResponse.success(tempList); + return ResponseEntity.ok(resultDto); + } + else{ + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + } + + //deliveryID 값으로 검색하여 해당 값을 받아 삭제 @DeleteMapping - public ResponseEntity> deleteLogDatas(@RequestParam String deliveryId ){ + public ResponseEntity> deleteLogDatas(@RequestParam String deliveryId) { return ResponseEntity.ok(null); } diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index 8bd91a5..1346956 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -7,13 +7,18 @@ import com.tunaforce.message.message.dto.response.MessageLogResponseDto; import com.tunaforce.message.message.service.MessageService; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.List; +import java.util.Objects; import java.util.UUID; + +@Slf4j @RestController @RequestMapping("/messages") @RequiredArgsConstructor @@ -24,27 +29,34 @@ public class MessageController { //게이트 웨이에서 마스터 관리자를 제외한 모든 사용자에 대한 접근 제한(POST만 OPEN) @GetMapping public ResponseEntity>> getLogDatas( - + @RequestHeader("X-User-Id") UUID userId, + @RequestHeader("X-Roles") String roles ) { + log.info("{} has been approached",userId); + if (Objects.equals(roles, "Master")) + { + List tempSR = msgService.getAllLog(); + ApiResponse> reaultDto = ApiResponse.success(tempSR); + return ResponseEntity.ok(reaultDto); + } + else{ + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } - List tempSR = msgService.getAllLog(); - ApiResponse> reaultDto = ApiResponse.success(tempSR); - return ResponseEntity.ok(reaultDto); } - + // @PostMapping public ResponseEntity> sendMessage( @RequestBody CreateMessageLogRequestDto createMessageLogRequestDto, - @RequestHeader("userId") UUID userId + @RequestHeader("X-User-Id") UUID userId ) throws SlackApiException, IOException { - + log.info("the Sender : " + userId); //slackMsg 클래스 내부의 함수 호출 String mlr = msgService.sendMessage(userId ,createMessageLogRequestDto); ApiResponse reaultDto = ApiResponse.success(mlr); return ResponseEntity.ok(reaultDto); - //테이블에 로그를 남기는 로직 구현 } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/GetDeliveriesResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/GetDeliveriesResponseDto.java deleted file mode 100644 index a45fb6a..0000000 --- a/src/main/java/com/tunaforce/message/message/dto/response/GetDeliveriesResponseDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.tunaforce.message.message.dto.response; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.UUID; - -@Getter -@AllArgsConstructor -public class GetDeliveriesResponseDto { - private Long delivery_id; - private String status; - private Long departure_hub_id; - private Long arrival_hub_id; - private String delivery_address; - private UUID received_userid; - private String received_slackid; - private Long agent_id; - private Long user_id; - private UUID order_id; -} diff --git a/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliveriesResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliveriesResponseDto.java new file mode 100644 index 0000000..ff5e2d9 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliveriesResponseDto.java @@ -0,0 +1,20 @@ +package com.tunaforce.message.message.dto.response.delivery; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class GetDeliveriesResponseDto { + private String deliveryId; + private String orderId; + private String status; + private String departureHubId; + private String arrivalHubId; + private String deliveryAddress; + private int receivedUserId; + private String receivedSlackId; + private int companyDeliveryAgentId; + private String createdAt; + private String updatedAt; +} diff --git a/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliverymenResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliverymenResponseDto.java new file mode 100644 index 0000000..c899bd9 --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliverymenResponseDto.java @@ -0,0 +1,18 @@ +package com.tunaforce.message.message.dto.response.delivery; + +import com.tunaforce.message.message.entity.Timestamped; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.UUID; + + +@Getter +@AllArgsConstructor +public class GetDeliverymenResponseDto extends Timestamped { + private UUID userId; + private String deliveryType; + private Long deliverySeq; + private String hubId; + private String slackId; +} diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java index 7bc7a58..e51118d 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java @@ -20,5 +20,6 @@ public class DeliveryStatus extends Timestamped { @Id private UUID userId; @Column(length = 100) - private String hub_id; + private String hubid; + private Long deliverySeq; } diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java index e19e29e..c689a18 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientAuthService.java @@ -8,7 +8,7 @@ import java.util.UUID; -@FeignClient(name = "auth-Service", url = "${Naver.API.Geocoding}") +@FeignClient(name = "auth-Service", url = "${Clients.Auth}") public interface ClientAuthService { //시용자 정보의 앱 ID가 필요 @GetMapping("/users/{user_id}") diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java index b26e8f5..91f977f 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java @@ -1,20 +1,29 @@ package com.tunaforce.message.message.service.feignClient; -import com.tunaforce.message.message.dto.response.GetDeliveriesResponseDto; +import com.tunaforce.message.message.dto.response.delivery.GetDeliveriesResponseDto; +import com.tunaforce.message.message.dto.response.delivery.GetDeliverymenResponseDto; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @Service @FeignClient(name="delivery-service", url="${DeliveryFeign.url}") public interface ClientDeliveryService { - @GetMapping("/deliverㅑs") - List getListDelivery(); + //물품 배송에 대한 리스트 - 금일자로 된 리스트 할당을 받아야함 + @GetMapping("/deliveris/{date}") + List getListDelivery(@PathVariable String date); //업체 배송 담당자 조건으로 쿼리 - + @GetMapping("/delivery-agents") + List getListDeliverymen(@RequestParam("q") String role); +//http://localhost:3370/delivery-agents?q=hub //업체 배송 담당자 배정 후 배송 테이블에 업체 배송 담당자 ID 업데이트 +// @PostMapping("/deliveries") + } diff --git a/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java b/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java index 8f25fbf..d9d19c3 100644 --- a/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java +++ b/src/main/java/com/tunaforce/message/token/controller/RegistrationController.java @@ -7,6 +7,9 @@ import jakarta.transaction.Transactional; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.logging.LoggingRebinder; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.resource.NoResourceFoundException; @@ -14,12 +17,14 @@ import java.util.List; import java.util.UUID; +@Slf4j @RestController @RequestMapping("/token") @RequiredArgsConstructor public class RegistrationController { private final RegistrationService registrationService; + private final LoggingRebinder loggingRebinder; @GetMapping public ResponseEntity>> getAllTokens() { @@ -41,11 +46,22 @@ public ResponseEntity> getTokens(@PathVariable U @PostMapping @Transactional public ResponseEntity> mapRegisterToken( - @RequestBody @Valid MapKeyRequestDto mapKeyRequestDto + @RequestBody @Valid MapKeyRequestDto mapKeyRequestDto, + @RequestParam("X-User-Id") UUID userId, + @RequestHeader("X-Roles") String roles ) { - registrationService.createTokens(mapKeyRequestDto); - ApiResponse resultDto = ApiResponse.success("null"); - return ResponseEntity.ok(resultDto); + log.info("{} has approached",userId); + log.info("{} Roles",roles); + + if (roles.contains("MASTER")) { + registrationService.createTokens(mapKeyRequestDto); + ApiResponse resultDto = ApiResponse.success("null"); + return ResponseEntity.ok(resultDto); + } + else{ + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + } diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index 3c4619e..102d463 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -9,6 +9,9 @@ import com.tunaforce.message.maps.service.ClientRoutesData; import com.tunaforce.message.maps.dto.naverMap.geocodeResponseDto; import com.tunaforce.message.maps.service.mapInfoService; +import com.tunaforce.message.message.dto.response.delivery.GetDeliveriesResponseDto; +import com.tunaforce.message.message.dto.response.delivery.GetDeliverymenResponseDto; +import com.tunaforce.message.message.service.feignClient.ClientDeliveryService; import com.tunaforce.message.token.entity.MasterToken; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; @@ -17,7 +20,10 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Configuration; +import java.util.List; +import java.util.Map; import java.util.NoSuchElementException; +import java.util.stream.Collectors; @Configuration @SpringBootTest @@ -141,4 +147,20 @@ void getRoute2() throws JsonProcessingException { Assertions.assertThat(rowData).isNotNull(); } + @Autowired + ClientDeliveryService clientDeliveryService; + + @Test + @DisplayName("허브 좌표 테스트") + void getHubs(){ + + //허브 별 담당자 조회 + //role로 구분 + List resultAgents = clientDeliveryService.getListDeliverymen("Company"); + + //허브 아이디로 각각 허브에 속한 담당자 끼리 묶는다 + Map> hubGrouped = + resultAgents.stream().collect(Collectors.groupingBy(GetDeliverymenResponseDto::getHubId)); + } + } From f3d90989af3496439cc2d112fd3c889336236899 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 23 Aug 2025 02:55:35 +0900 Subject: [PATCH 27/29] =?UTF-8?q?add=20:=20=EB=B0=B0=EC=86=A1=20=EB=8B=B4?= =?UTF-8?q?=EB=8B=B9=EC=9E=90=20=EB=B0=B0=EC=A0=95=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20fix=20:=20=EC=A4=91=EC=B2=A9=20=EC=A0=9C?= =?UTF-8?q?=EB=84=A4=EB=A6=AD=20=ED=81=B4=EB=9E=98=EC=8A=A4=20mapper=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/config/AuditorAwareImpl.java | 21 +++- .../maps/dto/naverMap/geocodeResponseDto.java | 8 +- .../dto/naverRoute/direction5ResponseDto.java | 22 +++- .../maps/repository/mapInfoRepository.java | 2 +- .../message/maps/service/mapInfoService.java | 10 ++ .../message/DirectMessageScheduler.java | 105 ++++++++++++------ .../auth/UserInformationResponseDto.java | 2 +- .../dto/response/delivery/DeliveryForm.java | 22 ++++ .../delivery/GetDeliveriesResponseDto.java | 14 ++- .../delivery/GetDeliverymenResponseDto.java | 8 +- .../dto/response/hub/HubResponseDto.java | 23 ++-- .../dto/response/hub/HubsResponseDto.java | 8 +- .../message/entity/DeliveryStatus.java | 2 +- .../repository/MessageLogRepository.java | 2 + .../message/service/MessageService.java | 6 +- .../feignClient/ClientDeliveryService.java | 12 +- .../tunaforce/message/GetCoordinatesTest.java | 63 +++++++---- 17 files changed, 233 insertions(+), 97 deletions(-) create mode 100644 src/main/java/com/tunaforce/message/message/dto/response/delivery/DeliveryForm.java diff --git a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java index 67f1327..34b817d 100644 --- a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java +++ b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java @@ -1,8 +1,12 @@ package com.tunaforce.message.config; +import jakarta.servlet.http.HttpServletRequest; import org.jetbrains.annotations.NotNull; import org.springframework.data.domain.AuditorAware; import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import java.util.Optional; import java.util.UUID; @@ -13,9 +17,18 @@ public class AuditorAwareImpl implements AuditorAware { @NotNull @Override public Optional getCurrentAuditor() { - // TODO: 실제 서비스는 현재 로그인 사용자 ID 반환 -// return Optional.of("00000000-0000-0000-0000-000000000000"); - //return Optional.of(UUID.fromString("00000000-0000-0000-0000-000000000000")); // 임시 UUID - return Optional.of(UUID.randomUUID()); + RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); + + // check type & casting + if (requestAttributes instanceof ServletRequestAttributes servletRequestAttributes) { + HttpServletRequest request = servletRequestAttributes.getRequest(); + String userId = request.getHeader("X-User-Id"); + + if (userId != null && !userId.isEmpty()) { + return Optional.of(UUID.fromString(userId)); + } + } + + return Optional.of(UUID.fromString("00000000-0000-0000-0000-000000000000")); } } diff --git a/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java b/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java index 8bfd60c..38641d1 100644 --- a/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverMap/geocodeResponseDto.java @@ -1,15 +1,17 @@ package com.tunaforce.message.maps.dto.naverMap; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.*; import java.util.ArrayList; import java.util.List; @Getter +@Setter @NoArgsConstructor @AllArgsConstructor +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) public class geocodeResponseDto { public String status; public Meta meta; diff --git a/src/main/java/com/tunaforce/message/maps/dto/naverRoute/direction5ResponseDto.java b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/direction5ResponseDto.java index f9ad62e..c2ec2d7 100644 --- a/src/main/java/com/tunaforce/message/maps/dto/naverRoute/direction5ResponseDto.java +++ b/src/main/java/com/tunaforce/message/maps/dto/naverRoute/direction5ResponseDto.java @@ -1,9 +1,19 @@ package com.tunaforce.message.maps.dto.naverRoute; -public record direction5ResponseDto( - int code, - String message, - String currentDateTime, - Route route -) {} + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public class direction5ResponseDto { + private int code; + private String message; + private String currentDateTime; + private Route route; +} diff --git a/src/main/java/com/tunaforce/message/maps/repository/mapInfoRepository.java b/src/main/java/com/tunaforce/message/maps/repository/mapInfoRepository.java index da7f5e8..72efbe3 100644 --- a/src/main/java/com/tunaforce/message/maps/repository/mapInfoRepository.java +++ b/src/main/java/com/tunaforce/message/maps/repository/mapInfoRepository.java @@ -8,6 +8,6 @@ import java.util.UUID; public interface mapInfoRepository extends JpaRepository { - @Query("select m from MasterToken m where m.deletedAt != null ") + @Query("select m from MasterToken m where m.deletedAt is null ") Optional getMasterToken(); } diff --git a/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java b/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java index f45c8c8..bbf6c0e 100644 --- a/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java +++ b/src/main/java/com/tunaforce/message/maps/service/mapInfoService.java @@ -47,6 +47,7 @@ public geocodeResponseDto getCoords(String address) throws JsonProcessingExcepti //허브에서 경위도가 자체 public direction5ResponseDto getRoute(RouteData routeData) throws JsonProcessingException { + log.info("get the long and lat data"); //각 주소로 경위도를 반환한다. geocodeResponseDto startCoordinate = getCoords(routeData.getStart()); geocodeResponseDto endCoordinate = getCoords(routeData.getGoal()); @@ -68,4 +69,13 @@ public direction5ResponseDto getRoute(RouteData routeData) throws JsonProcessing ObjectMapper dataParser = new ObjectMapper(); return dataParser.readValue(rowData, direction5ResponseDto.class); } + + // 시분초를 변환하는 함수 + public String convertMsToTimeString(long millis) { + long hours = millis / (1000 * 60 * 60); + long minutes = (millis / (1000 * 60)) % 60; + long seconds = (millis / 1000) % 60; + + return String.format("%02d:%02d:%02d", hours, minutes, seconds); + } } diff --git a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java index 5737e8a..870c21b 100644 --- a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java +++ b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java @@ -1,38 +1,56 @@ package com.tunaforce.message.message; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.slack.api.methods.SlackApiException; +import com.tunaforce.message.cmmn.RouteData; +import com.tunaforce.message.cmmn.SlackMsg; +import com.tunaforce.message.maps.dto.naverRoute.Summary; +import com.tunaforce.message.maps.dto.naverRoute.direction5ResponseDto; +import com.tunaforce.message.maps.service.mapInfoService; +import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; +import com.tunaforce.message.message.dto.response.delivery.DeliveryForm; import com.tunaforce.message.message.dto.response.delivery.GetDeliveriesResponseDto; import com.tunaforce.message.message.dto.response.delivery.GetDeliverymenResponseDto; +import com.tunaforce.message.message.dto.response.hub.HubResponseDto; import com.tunaforce.message.message.dto.response.hub.HubsResponseDto; import com.tunaforce.message.message.entity.DeliveryStatus; import com.tunaforce.message.message.repository.StatusRepository; +import com.tunaforce.message.message.service.MessageService; import com.tunaforce.message.message.service.feignClient.ClientDeliveryService; import com.tunaforce.message.message.service.feignClient.ClientHubService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; -import java.util.Optional; +import java.util.NoSuchElementException; import java.util.UUID; import java.util.stream.Collectors; @Component - +@Slf4j public class DirectMessageScheduler { @Autowired private StatusRepository statusRepository; @Autowired - private ClientHubService clientHubService; + private ClientHubService clientHubService; @Autowired private ClientDeliveryService clientDeliveryService; + @Autowired + private mapInfoService mIService; + @Autowired + private MessageService msgApp; - @Scheduled(cron = "${scheduler.second} ${scheduler.minute} ${scheduler.hour} * * *") // 매일 오전 6시 (초, 분, 시, 일, 월, 요일) - public void directMessageScheduler() { + //@Scheduled(cron = "${scheduler.second} ${scheduler.minute} ${scheduler.hour} * * *") // 매일 오전 6시 (초, 분, 시, 일, 월, 요일) + @Scheduled(fixedRate = 5000) + public void directMessageScheduler() throws NoSuchElementException, IOException, SlackApiException { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @@ -40,67 +58,84 @@ public void directMessageScheduler() { //배송 리스트를 받아온다 //배송 리스트에 대한 날짜로 받아옴 - List resultProduct = clientDeliveryService.getListDelivery(today); + //DeliveryForm resultProduct = clientDeliveryService.getListDelivery(today); + DeliveryForm resultProduct = clientDeliveryService.getListDelivery("2025-08-22"); + if (resultProduct.getData().isEmpty()) { + return; + } //허브 별 담당자 조회 //role로 구분 - List resultAgents = clientDeliveryService.getListDeliverymen("Company"); - + DeliveryForm resultAgents = clientDeliveryService.getListDeliverymen("Company"); +// //허브 아이디로 각각 허브에 속한 담당자 끼리 묶는다 Map> hubGrouped = - resultAgents.stream().collect(Collectors.groupingBy(GetDeliverymenResponseDto::getHubId)); + resultAgents.getData().stream().collect(Collectors.groupingBy(GetDeliverymenResponseDto::getHubId)); // 배송 물품을 허브 별로 Map> productsinHub = - resultProduct.stream().collect(Collectors.groupingBy(GetDeliveriesResponseDto::getArrivalHubId)); + resultProduct.getData().stream().collect(Collectors.groupingBy(GetDeliveriesResponseDto::getArrivalHubId)); //status db 검색 //어제 마지막 값을 받아온다(배달원 순번 값) - List deliveryStatus = statusRepository.findAll(); - + List deliveryStatus = statusRepository.findAll(); for (String hubId : hubGrouped.keySet()) { List temphubList = productsinHub.get(hubId); - List tempmenList = hubGrouped.get(hubId); - //순번들을 별도로 받아 인덱스 값을 반환한다. - List tempMenNo = tempmenList.stream() - .map(GetDeliverymenResponseDto::getDeliverySeq) - .toList(); - - Optional lastTurns = deliveryStatus.stream() - .filter(ds -> hubId.equals(ds.getHubid())) - .findFirst(); - Long tempidx = lastTurns.get().getDeliverySeq(); - for (GetDeliveriesResponseDto productId : temphubList) { - int idx = tempMenNo.indexOf(tempidx); - GetDeliverymenResponseDto tempMen = tempmenList.get(++idx); + if (temphubList != null) { + List tempmenList = hubGrouped.get(hubId); + int idx =0; + //순번들을 별도로 받아 인덱스 값을 반환한다. + for (GetDeliveriesResponseDto productId : temphubList) { - } + //차례로 경로 로그를 남긴다 + //productId 안에 있는 허브주소와 업체 주소를 함수에 넣는다. - } + HubResponseDto temphubSingledto = clientHubService.getHub(productId.getArrivalHubId()); - //hub 리스트를 받아온다 - HubsResponseDto resultHubs = clientHubService.getHubs(0,0); + RouteData routePath = new RouteData( + temphubSingledto.getHubAddress(), + productId.getDeliveryAddress() + ); + log.info("Search data : From. {}-> To. {}",routePath.getGoal(), routePath.getGoal()); + direction5ResponseDto routeInfo = mIService.getRoute(routePath); + Summary tempRoute = routeInfo.getRoute().traoptimal().get(0).summary(); - for (GetDeliveriesResponseDto product : resultProduct) { - //출발 허브 - product.getArrivalHubId(); - } + //전체 경로 거리 + int distance = tempRoute.distance(); + //전체 경로 소요시간 (ms) + int duration = tempRoute.duration(); + String routTime = mIService.convertMsToTimeString(duration); + //예상도착일시 (yyyy-MM-dd HH:mm:ss) + String departuretime = tempRoute.departureTime(); + log.info("Total route distance : {}", distance); + log.info("Total route time : {}", duration); + log.info("Total route prediction : {}", routTime); + GetDeliverymenResponseDto manSingle = tempmenList.get(idx++); + //위의 받은 값으로 각 담당자에서 메세지를 보낸다. + CreateMessageLogRequestDto msgInfo = new CreateMessageLogRequestDto( + "목적지 : " + routePath.getGoal(), + UUID.randomUUID(), + manSingle.getUserId() + ); + msgApp.sendMessage(UUID.fromString("49195b81-db15-438c-8f1c-63b17739c027"), msgInfo); - //금일 예정 되어 있는 배송들 리스트 - //배송인원들 리스트 + } + } + } } + } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/auth/UserInformationResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/auth/UserInformationResponseDto.java index 3f52e33..3605485 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/auth/UserInformationResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/auth/UserInformationResponseDto.java @@ -11,7 +11,7 @@ @NoArgsConstructor public class UserInformationResponseDto { private UUID userId; - private String name; + private String username; private String slackId; private String role; private String deptId; diff --git a/src/main/java/com/tunaforce/message/message/dto/response/delivery/DeliveryForm.java b/src/main/java/com/tunaforce/message/message/dto/response/delivery/DeliveryForm.java new file mode 100644 index 0000000..625c2ab --- /dev/null +++ b/src/main/java/com/tunaforce/message/message/dto/response/delivery/DeliveryForm.java @@ -0,0 +1,22 @@ +package com.tunaforce.message.message.dto.response.delivery; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.*; + +import java.util.List; + + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public class DeliveryForm { + private List data; + private int page; + private int size; + private int totalElements; + private int totalPages; + private String sort; +} diff --git a/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliveriesResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliveriesResponseDto.java index ff5e2d9..44df5eb 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliveriesResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliveriesResponseDto.java @@ -1,10 +1,14 @@ package com.tunaforce.message.message.dto.response.delivery; -import lombok.AllArgsConstructor; -import lombok.Getter; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.*; @Getter +@Setter +@NoArgsConstructor @AllArgsConstructor +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) public class GetDeliveriesResponseDto { private String deliveryId; private String orderId; @@ -12,9 +16,9 @@ public class GetDeliveriesResponseDto { private String departureHubId; private String arrivalHubId; private String deliveryAddress; - private int receivedUserId; + private String receivedUserId; private String receivedSlackId; - private int companyDeliveryAgentId; + private String companyDeliveryAgentId; private String createdAt; private String updatedAt; -} +} \ No newline at end of file diff --git a/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliverymenResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliverymenResponseDto.java index c899bd9..47d20fd 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliverymenResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/delivery/GetDeliverymenResponseDto.java @@ -1,14 +1,18 @@ package com.tunaforce.message.message.dto.response.delivery; +import com.fasterxml.jackson.annotation.JsonInclude; import com.tunaforce.message.message.entity.Timestamped; -import lombok.AllArgsConstructor; -import lombok.Getter; +import lombok.*; import java.util.UUID; @Getter +@Setter +@NoArgsConstructor @AllArgsConstructor +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) public class GetDeliverymenResponseDto extends Timestamped { private UUID userId; private String deliveryType; diff --git a/src/main/java/com/tunaforce/message/message/dto/response/hub/HubResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/hub/HubResponseDto.java index 427cf89..d1d6aac 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/hub/HubResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/hub/HubResponseDto.java @@ -1,11 +1,20 @@ package com.tunaforce.message.message.dto.response.hub; -public record HubResponseDto( - Long Id, - String hubName, - String hubAddress, - String latitude, - String longitude -) { + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public class HubResponseDto{ + private Long Id; + private String hubName; + private String hubAddress; + private String latitude; + private String longitude; } diff --git a/src/main/java/com/tunaforce/message/message/dto/response/hub/HubsResponseDto.java b/src/main/java/com/tunaforce/message/message/dto/response/hub/HubsResponseDto.java index ed21dbd..3bf58d4 100644 --- a/src/main/java/com/tunaforce/message/message/dto/response/hub/HubsResponseDto.java +++ b/src/main/java/com/tunaforce/message/message/dto/response/hub/HubsResponseDto.java @@ -1,12 +1,16 @@ package com.tunaforce.message.message.dto.response.hub; -import lombok.AllArgsConstructor; -import lombok.Getter; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.*; import java.util.List; @Getter +@Setter +@NoArgsConstructor @AllArgsConstructor +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) public class HubsResponseDto { List content; } diff --git a/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java b/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java index e51118d..63abb13 100644 --- a/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java +++ b/src/main/java/com/tunaforce/message/message/entity/DeliveryStatus.java @@ -20,6 +20,6 @@ public class DeliveryStatus extends Timestamped { @Id private UUID userId; @Column(length = 100) - private String hubid; + private String hubId; private Long deliverySeq; } diff --git a/src/main/java/com/tunaforce/message/message/repository/MessageLogRepository.java b/src/main/java/com/tunaforce/message/message/repository/MessageLogRepository.java index 25dec71..f3a8d42 100644 --- a/src/main/java/com/tunaforce/message/message/repository/MessageLogRepository.java +++ b/src/main/java/com/tunaforce/message/message/repository/MessageLogRepository.java @@ -2,6 +2,8 @@ import com.tunaforce.message.message.entity.MessageManagement; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +@Repository public interface MessageLogRepository extends JpaRepository { } diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java index 4862bbc..787d079 100644 --- a/src/main/java/com/tunaforce/message/message/service/MessageService.java +++ b/src/main/java/com/tunaforce/message/message/service/MessageService.java @@ -10,6 +10,7 @@ import com.tunaforce.message.message.repository.MessageLogRepository; import com.tunaforce.message.token.repository.TokenKeyJpaRepository; import com.tunaforce.message.message.service.feignClient.ClientAuthService; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -26,6 +27,7 @@ public class MessageService { //슬랙 앱으로 보내는 함수 사용 private final SlackMsg slackMsg; + @Transactional public String sendMessage(UUID senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { //원래는 senderId와 receiverId를 Auth에서 name을 받아서 입력하도록 함 //테스트로 주석 처리 @@ -38,9 +40,9 @@ public String sendMessage(UUID senderId, CreateMessageLogRequestDto createMessag //받은 값과 조회한 값을 기준으로 응답 데이터 만듬 MessageLogResponseDto resultData = new MessageLogResponseDto( - senderAppId.getName(), + senderAppId.getUsername(), createMessageLogRequestDto.content(), - receiverAppId.getName(), + receiverAppId.getUsername(), senderId, createMessageLogRequestDto.receiverId() ); diff --git a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java index 91f977f..7bb4ee5 100644 --- a/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java +++ b/src/main/java/com/tunaforce/message/message/service/feignClient/ClientDeliveryService.java @@ -1,26 +1,26 @@ package com.tunaforce.message.message.service.feignClient; +import com.tunaforce.message.message.dto.response.delivery.DeliveryForm; import com.tunaforce.message.message.dto.response.delivery.GetDeliveriesResponseDto; import com.tunaforce.message.message.dto.response.delivery.GetDeliverymenResponseDto; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @Service -@FeignClient(name="delivery-service", url="${DeliveryFeign.url}") +@FeignClient(name="delivery-service", url="${Clients.Delivery}") public interface ClientDeliveryService { //물품 배송에 대한 리스트 - 금일자로 된 리스트 할당을 받아야함 - @GetMapping("/deliveris/{date}") - List getListDelivery(@PathVariable String date); + @GetMapping("/deliveries") + DeliveryForm getListDelivery(@RequestParam("q") String p); + //업체 배송 담당자 조건으로 쿼리 @GetMapping("/delivery-agents") - List getListDeliverymen(@RequestParam("q") String role); + DeliveryForm getListDeliverymen(@RequestParam("q") String role); //http://localhost:3370/delivery-agents?q=hub //업체 배송 담당자 배정 후 배송 테이블에 업체 배송 담당자 ID 업데이트 diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index 102d463..e0e681b 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -2,17 +2,21 @@ import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.tunaforce.message.cmmn.RouteData; +import com.tunaforce.message.maps.dto.naverRoute.Route; +import com.tunaforce.message.maps.dto.naverRoute.Summary; import com.tunaforce.message.maps.dto.naverRoute.direction5ResponseDto; import com.tunaforce.message.maps.service.ClientCoordinatesData; import com.tunaforce.message.maps.service.ClientRoutesData; import com.tunaforce.message.maps.dto.naverMap.geocodeResponseDto; import com.tunaforce.message.maps.service.mapInfoService; +import com.tunaforce.message.message.DirectMessageScheduler; +import com.tunaforce.message.message.dto.response.delivery.DeliveryForm; import com.tunaforce.message.message.dto.response.delivery.GetDeliveriesResponseDto; import com.tunaforce.message.message.dto.response.delivery.GetDeliverymenResponseDto; import com.tunaforce.message.message.service.feignClient.ClientDeliveryService; -import com.tunaforce.message.token.entity.MasterToken; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -22,7 +26,7 @@ import java.util.List; import java.util.Map; -import java.util.NoSuchElementException; +import java.util.UUID; import java.util.stream.Collectors; @Configuration @@ -52,7 +56,7 @@ void getCoordinatesTest() throws Exception { ObjectMapper test = new ObjectMapper(); geocodeResponseDto tester = test.readValue(result, geocodeResponseDto.class); - String ss= tester.addresses.get(0).getX(); + String ss = tester.addresses.get(0).getX(); //String resultsData = ccs.getCoordinates( Id, Key,"대구 비산동 320-9"); System.out.println("ss = " + ss); System.out.println("resultsData = " + result); @@ -77,7 +81,6 @@ void getRoute() throws JsonProcessingException { ); - ObjectMapper test = new ObjectMapper(); geocodeResponseDto geochangdto = test.readValue(geochang, geocodeResponseDto.class); geocodeResponseDto daegudto = test.readValue(daegu, geocodeResponseDto.class); @@ -85,16 +88,19 @@ void getRoute() throws JsonProcessingException { String resultData = clientRoutesData.getRoute( Id, Key, - daegudto.getAddresses().get(0).getX()+","+daegudto.getAddresses().get(0).getY(), - geochangdto.getAddresses().get(0).getX()+","+geochangdto.getAddresses().get(0).getY() + daegudto.getAddresses().get(0).getX() + "," + daegudto.getAddresses().get(0).getY(), + geochangdto.getAddresses().get(0).getX() + "," + geochangdto.getAddresses().get(0).getY() ); - System.out.println("resultData = " + resultData); } + + @Autowired + mapInfoService mIService; + @Test @DisplayName("루트 데이터2 테스트") void getRoute2() throws JsonProcessingException { @@ -104,18 +110,13 @@ void getRoute2() throws JsonProcessingException { ); - String startStr = routeData.getStart(); String endStr = routeData.getGoal(); - - -// geocodeResponseDto startCoordinate = mapInfoService.getCoords(routeData.getStart()); -// geocodeResponseDto endCoordinate = mapInfoService.getCoords(routeData.getGoal()); - //DB에서 가져와야함 String Id = "osh066qnrv"; - String Key = "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj";; + String Key = "uvvXHOeBUf3sEaIBaCX5jqBbJHBZqYNrem0s07lj"; + ; String result = clientCoordinatesData.getGeocode( Id, @@ -135,7 +136,6 @@ void getRoute2() throws JsonProcessingException { geocodeResponseDto endCoordinate = dataParser.readValue(result, geocodeResponseDto.class); - String rowData = clientRoutesData.getRoute( Id, Key, @@ -143,24 +143,43 @@ void getRoute2() throws JsonProcessingException { endCoordinate.getPoints().get(0) ); + direction5ResponseDto direction5Response = dataParser.readValue(rowData, direction5ResponseDto.class); + + Summary tempRoute = direction5Response.route().traoptimal().get(0).summary(); + + //전체 경로 거리 + int distance = tempRoute.distance(); + //전체 경로 소요시간 (ms) + int duration = tempRoute.duration(); + String routTime = mIService.convertMsToTimeString(duration); + //예상도착일시 (yyyy-MM-dd HH:mm:ss) + String departuretime = tempRoute.departureTime(); + + System.out.println("resultData = " + rowData); Assertions.assertThat(rowData).isNotNull(); } @Autowired ClientDeliveryService clientDeliveryService; - + @Test @DisplayName("허브 좌표 테스트") - void getHubs(){ + void getHubs() throws JsonProcessingException { + - //허브 별 담당자 조회 + DeliveryForm tempData = clientDeliveryService.getListDelivery("2025-08-22"); +//허브 별 담당자 조회 //role로 구분 - List resultAgents = clientDeliveryService.getListDeliverymen("Company"); + DeliveryForm resultAgents = clientDeliveryService.getListDeliverymen("Company"); + + DirectMessageScheduler temp = new DirectMessageScheduler(); + + + + + - //허브 아이디로 각각 허브에 속한 담당자 끼리 묶는다 - Map> hubGrouped = - resultAgents.stream().collect(Collectors.groupingBy(GetDeliverymenResponseDto::getHubId)); } } From c66096985424e11e9601b1cb17f1dfeb9c553a23 Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 23 Aug 2025 03:16:26 +0900 Subject: [PATCH 28/29] =?UTF-8?q?fix=20:=20=EC=8A=A4=EC=BC=80=EC=A5=B4?= =?UTF-8?q?=EB=9F=AC=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20three=20bound=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/config/AuditorAwareImpl.java | 31 +++++++++++++------ .../message/DirectMessageScheduler.java | 12 ++++++- .../message/controller/MessageController.java | 6 ++-- .../message/service/MessageService.java | 8 ++--- .../tunaforce/message/GetCoordinatesTest.java | 2 +- 5 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java index 34b817d..a36620b 100644 --- a/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java +++ b/src/main/java/com/tunaforce/message/config/AuditorAwareImpl.java @@ -3,7 +3,6 @@ import jakarta.servlet.http.HttpServletRequest; import org.jetbrains.annotations.NotNull; import org.springframework.data.domain.AuditorAware; -import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -17,18 +16,30 @@ public class AuditorAwareImpl implements AuditorAware { @NotNull @Override public Optional getCurrentAuditor() { - RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); + try { - // check type & casting - if (requestAttributes instanceof ServletRequestAttributes servletRequestAttributes) { - HttpServletRequest request = servletRequestAttributes.getRequest(); - String userId = request.getHeader("X-User-Id"); - if (userId != null && !userId.isEmpty()) { - return Optional.of(UUID.fromString(userId)); + RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); + + ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (attr == null) { + return Optional.of(UUID.fromString("49195b81-db15-438c-8f1c-63b17739c027")); // 웹요청 없음 (예: 스케줄러 등) } - } - return Optional.of(UUID.fromString("00000000-0000-0000-0000-000000000000")); + + // check type & casting + if (requestAttributes instanceof ServletRequestAttributes servletRequestAttributes) { + HttpServletRequest request = servletRequestAttributes.getRequest(); + String userId = request.getHeader("X-User-Id"); + + if (userId != null && !userId.isEmpty()) { + return Optional.of(UUID.fromString(userId)); + } + } + + return Optional.of(UUID.fromString("00000000-0000-0000-0000-000000000000")); + } catch (Exception ex) { + return Optional.of(UUID.fromString("49195b81-db15-438c-8f1c-63b17739c027")); // 웹요청 없음 (예: 스케줄러 등) + } } } diff --git a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java index 870c21b..fba7ee8 100644 --- a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java +++ b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java @@ -9,12 +9,15 @@ import com.tunaforce.message.maps.dto.naverRoute.direction5ResponseDto; import com.tunaforce.message.maps.service.mapInfoService; import com.tunaforce.message.message.dto.request.CreateMessageLogRequestDto; +import com.tunaforce.message.message.dto.response.MessageLogResponseDto; import com.tunaforce.message.message.dto.response.delivery.DeliveryForm; import com.tunaforce.message.message.dto.response.delivery.GetDeliveriesResponseDto; import com.tunaforce.message.message.dto.response.delivery.GetDeliverymenResponseDto; import com.tunaforce.message.message.dto.response.hub.HubResponseDto; import com.tunaforce.message.message.dto.response.hub.HubsResponseDto; import com.tunaforce.message.message.entity.DeliveryStatus; +import com.tunaforce.message.message.entity.MessageManagement; +import com.tunaforce.message.message.repository.MessageLogRepository; import com.tunaforce.message.message.repository.StatusRepository; import com.tunaforce.message.message.service.MessageService; import com.tunaforce.message.message.service.feignClient.ClientDeliveryService; @@ -47,6 +50,8 @@ public class DirectMessageScheduler { private mapInfoService mIService; @Autowired private MessageService msgApp; + @Autowired + private MessageLogRepository messageLogRepository; //@Scheduled(cron = "${scheduler.second} ${scheduler.minute} ${scheduler.hour} * * *") // 매일 오전 6시 (초, 분, 시, 일, 월, 요일) @Scheduled(fixedRate = 5000) @@ -125,7 +130,12 @@ public void directMessageScheduler() throws NoSuchElementException, IOException, ); - msgApp.sendMessage(UUID.fromString("49195b81-db15-438c-8f1c-63b17739c027"), msgInfo); + MessageLogResponseDto tempData = msgApp.sendMessage(UUID.fromString("49195b81-db15-438c-8f1c-63b17739c027"), msgInfo); + + //로그는 송신이 된 후에 쌓여야 함 + MessageManagement messageManagement = new MessageManagement(tempData); + messageLogRepository.save(messageManagement); + //앱을 통한 메세지 송신 로직 구성 diff --git a/src/main/java/com/tunaforce/message/message/controller/MessageController.java b/src/main/java/com/tunaforce/message/message/controller/MessageController.java index 1346956..65afe38 100644 --- a/src/main/java/com/tunaforce/message/message/controller/MessageController.java +++ b/src/main/java/com/tunaforce/message/message/controller/MessageController.java @@ -47,14 +47,14 @@ public ResponseEntity>> getLogDatas // @PostMapping - public ResponseEntity> sendMessage( + public ResponseEntity> sendMessage( @RequestBody CreateMessageLogRequestDto createMessageLogRequestDto, @RequestHeader("X-User-Id") UUID userId ) throws SlackApiException, IOException { log.info("the Sender : " + userId); //slackMsg 클래스 내부의 함수 호출 - String mlr = msgService.sendMessage(userId ,createMessageLogRequestDto); - ApiResponse reaultDto = ApiResponse.success(mlr); + MessageLogResponseDto mlr = msgService.sendMessage(userId ,createMessageLogRequestDto); + ApiResponse reaultDto = ApiResponse.success(mlr); return ResponseEntity.ok(reaultDto); } diff --git a/src/main/java/com/tunaforce/message/message/service/MessageService.java b/src/main/java/com/tunaforce/message/message/service/MessageService.java index 787d079..441afba 100644 --- a/src/main/java/com/tunaforce/message/message/service/MessageService.java +++ b/src/main/java/com/tunaforce/message/message/service/MessageService.java @@ -28,7 +28,7 @@ public class MessageService { private final SlackMsg slackMsg; @Transactional - public String sendMessage(UUID senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { + public MessageLogResponseDto sendMessage(UUID senderId, CreateMessageLogRequestDto createMessageLogRequestDto) throws SlackApiException, IOException { //원래는 senderId와 receiverId를 Auth에서 name을 받아서 입력하도록 함 //테스트로 주석 처리 //senderID는 나중에 messageManagement에서 값을 반환 받을 때 필요 @@ -58,14 +58,10 @@ public String sendMessage(UUID senderId, CreateMessageLogRequestDto createMessag resultData.getFormMessage() ); - //로그는 송신이 된 후에 쌓여야 함 - MessageManagement messageManagement = new MessageManagement(resultData); - messageLogRepository.save(messageManagement); - //앱을 통한 메세지 송신 로직 구성 - return "null"; + return resultData; } diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index e0e681b..6946e11 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -145,7 +145,7 @@ void getRoute2() throws JsonProcessingException { direction5ResponseDto direction5Response = dataParser.readValue(rowData, direction5ResponseDto.class); - Summary tempRoute = direction5Response.route().traoptimal().get(0).summary(); + Summary tempRoute = direction5Response.getRoute().traoptimal().get(0).summary(); //전체 경로 거리 int distance = tempRoute.distance(); From f95a92ec49738d585412ebff8390e923a43e52fb Mon Sep 17 00:00:00 2001 From: "Shaun.the.sheep" Date: Sat, 23 Aug 2025 03:30:17 +0900 Subject: [PATCH 29/29] =?UTF-8?q?fix=20:=20=EB=A9=94=EC=84=B8=EC=A7=80=20?= =?UTF-8?q?=EC=95=B1=20=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/message/DirectMessageScheduler.java | 11 ++++++----- .../com/tunaforce/message/GetCoordinatesTest.java | 2 -- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java index fba7ee8..ba256cb 100644 --- a/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java +++ b/src/main/java/com/tunaforce/message/message/DirectMessageScheduler.java @@ -53,18 +53,19 @@ public class DirectMessageScheduler { @Autowired private MessageLogRepository messageLogRepository; - //@Scheduled(cron = "${scheduler.second} ${scheduler.minute} ${scheduler.hour} * * *") // 매일 오전 6시 (초, 분, 시, 일, 월, 요일) - @Scheduled(fixedRate = 5000) + //@Scheduled(fixedRate = 5000) + @Scheduled(cron = "${scheduler.second} ${scheduler.minute} ${scheduler.hour} * * *") // 매일 오전 6시 (초, 분, 시, 일, 월, 요일) public void directMessageScheduler() throws NoSuchElementException, IOException, SlackApiException { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter formattertime = DateTimeFormatter.ofPattern("HH:mm:ss"); String today = now.format(formatter); + String nowTime = now.format(formattertime); //배송 리스트를 받아온다 //배송 리스트에 대한 날짜로 받아옴 - //DeliveryForm resultProduct = clientDeliveryService.getListDelivery(today); - DeliveryForm resultProduct = clientDeliveryService.getListDelivery("2025-08-22"); + DeliveryForm resultProduct = clientDeliveryService.getListDelivery(today); if (resultProduct.getData().isEmpty()) { return; } @@ -124,7 +125,7 @@ public void directMessageScheduler() throws NoSuchElementException, IOException, //위의 받은 값으로 각 담당자에서 메세지를 보낸다. CreateMessageLogRequestDto msgInfo = new CreateMessageLogRequestDto( - "목적지 : " + routePath.getGoal(), + "\n["+nowTime+"] -> \n"+"목적지 : " + routePath.getGoal(), UUID.randomUUID(), manSingle.getUserId() ); diff --git a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java index 6946e11..856aafe 100644 --- a/src/test/java/com/tunaforce/message/GetCoordinatesTest.java +++ b/src/test/java/com/tunaforce/message/GetCoordinatesTest.java @@ -173,8 +173,6 @@ void getHubs() throws JsonProcessingException { //role로 구분 DeliveryForm resultAgents = clientDeliveryService.getListDeliverymen("Company"); - DirectMessageScheduler temp = new DirectMessageScheduler(); -