Skip to content

Commit

Permalink
[feat] 나에게 보내기 api 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
qogustj committed Aug 4, 2024
1 parent 56fee40 commit de926c7
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,25 @@
import com.Nunbody.global.common.SuccessResponse;
import com.Nunbody.global.config.auth.MemberId;
import com.fasterxml.jackson.core.JsonProcessingException;
import jakarta.mail.MessagingException;
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;

import java.io.IOException;

@RequiredArgsConstructor
@RestController
@RequestMapping("/api/kakao")
public class KakaoController {
private final MessageService messageService;
@GetMapping("/send")
public ResponseEntity<SuccessResponse<?>> sendMe(@RequestParam( name = "code") String code) throws JsonProcessingException {
public ResponseEntity<SuccessResponse<?>> sendMe(@MemberId Long memberId, @RequestParam( name = "code") String code) throws IOException, MessagingException {

messageService.sendMyMessage(code);
messageService.sendMyMessage(memberId, code);
return SuccessResponse.ok(null);
}
@GetMapping("/send/friend")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ private String getMessageContent(Message message) throws MessagingException, IOE
return "Unable to extract content";
}

private String getTextFromMultipart(Multipart multipart) throws MessagingException, IOException {
public String getTextFromMultipart(Multipart multipart) throws MessagingException, IOException {
StringBuilder result = new StringBuilder();
int count = multipart.getCount();
for (int i = 0; i < count; i++) {
Expand Down
36 changes: 33 additions & 3 deletions src/main/java/com/Nunbody/domain/Kakao/service/MessageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,52 @@

import com.Nunbody.domain.Kakao.service.dto.DefaultMessageDto;
import com.Nunbody.domain.Kakao.service.dto.Friend;
import com.Nunbody.domain.Mail.service.MailService;
import com.Nunbody.domain.member.domain.Member;
import com.Nunbody.domain.member.service.MemberReader;
import com.Nunbody.external.WindyfloMailClient;
import com.Nunbody.global.common.EncoderDecoder;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import jakarta.mail.*;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.List;
import java.util.Optional;

@Service
@RequiredArgsConstructor
public class MessageService {
private final KakaoService kakaoService;

public boolean sendMyMessage(String code) throws JsonProcessingException {
private final WindyfloMailClient windyfloMailClient;
private final MemberReader memberReader;
private final MailService mailService;
private final MailScheduleService mailScheduleService;
public boolean sendMyMessage(Long memberId, String code) throws IOException, MessagingException {
String accessToken = kakaoService.getAuthToken(code);
Member member = memberReader.getMemberById(memberId);
Store store = mailService.connectToMailStore("imap.naver.com", member.getNaverId(), EncoderDecoder.decodeFromBase64(member.getNaverPassword()));

DefaultMessageDto myMsg = DefaultMessageDto.of("text", "emap 테스트","https://www.richam.site/login","https://www.richam.site/","자세히보기");
Folder folder = store.getFolder("inbox");

folder.open(Folder.READ_ONLY);

int lastMessageIndex = folder.getMessageCount(); // 가장 최근 메일의 인덱스
Message message = folder.getMessage(lastMessageIndex);
Object object = message.getContent();

String st = "";
if (object instanceof String) {
st = (String) object;
} else if (object instanceof Multipart) {
st = mailScheduleService.getTextFromMultipart((Multipart) message.getContent());
}


JsonNode jsonNode = windyfloMailClient.summaryMail(st);
DefaultMessageDto myMsg = DefaultMessageDto.of("text", jsonNode.get("text").asText() +" 이메일이 도착했어요 확인해주세요","https://www.richam.site/login","https://www.richam.site/","메일 확인하러가기");

return kakaoService.sendMessage(accessToken, myMsg);
}
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/com/Nunbody/external/WindyfloMailClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
public class WindyfloMailClient {
private final String FIND_MAIL_URL = "https://windyflo.com/api/v1/prediction/05d769b1-0a34-49c5-83d3-6b92c1d650f8";
private final String CREATE_MAIL_URL = "https://windyflo.com/api/v1/prediction/85b9eb4a-e94c-4e98-ab4f-ed805bba1220";
private final String SUMMARY_MAIL_URL = "https://windyflo.com/api/v1/prediction/2f26c1c0-e096-4b47-975c-850e1483ae4b";

private final RestTemplate restTemplate;

public ConversationQARes findMailInVectorDB(String question) {
Expand All @@ -36,4 +38,14 @@ public JsonNode createMail(String question) {
JsonNode ss = restTemplate.postForObject(CREATE_MAIL_URL, request, JsonNode.class);
return ss;
}
public JsonNode summaryMail(String question) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

QuestionRequest requestBody = new QuestionRequest(question);
HttpEntity<QuestionRequest> request = new HttpEntity<>(requestBody, headers);

JsonNode ss = restTemplate.postForObject(SUMMARY_MAIL_URL, request, JsonNode.class);
return ss;
}
}

0 comments on commit de926c7

Please sign in to comment.