From e0489648fee279c5f8703f309d239640ccb75e9f Mon Sep 17 00:00:00 2001 From: jinseok Date: Sun, 10 Dec 2023 20:17:50 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EC=B5=9C=EC=8B=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=BC=EB=A7=8C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mail/repository/MailRepository.java | 2 + .../domain/Mail/service/FilterService.java | 2 +- .../domain/mail/service/MailService.java | 107 ++++++++++++------ 3 files changed, 78 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/Nunbody/domain/Mail/repository/MailRepository.java b/src/main/java/com/Nunbody/domain/Mail/repository/MailRepository.java index c4a9882..c404f75 100644 --- a/src/main/java/com/Nunbody/domain/Mail/repository/MailRepository.java +++ b/src/main/java/com/Nunbody/domain/Mail/repository/MailRepository.java @@ -2,6 +2,7 @@ import com.Nunbody.domain.Mail.domain.MailHeader; import com.Nunbody.domain.Mail.domain.PlatformType; +import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -12,4 +13,5 @@ public interface MailRepository extends JpaRepository { Page findAllByMemberIdOrderByDateDesc(Long id, Pageable pageable); List findAllByMemberIdOrderByDateDesc(Long id); Page findAllByMemberIdAndPlatformTypeOrderByDateDesc(Long memberId, PlatformType platformType, Pageable pageable); + Optional findFirstByMemberIdAndPlatformTypeOrderByDateDesc(Long memberId, PlatformType platformType); } diff --git a/src/main/java/com/Nunbody/domain/Mail/service/FilterService.java b/src/main/java/com/Nunbody/domain/Mail/service/FilterService.java index f6570d8..26774b1 100644 --- a/src/main/java/com/Nunbody/domain/Mail/service/FilterService.java +++ b/src/main/java/com/Nunbody/domain/Mail/service/FilterService.java @@ -35,7 +35,7 @@ public class FilterService { private final MailRepository mailRepository; private final MailBodyRepository mailBodyRepository; - public Page filterContent( Long memberId,FilterKeywordRequest filterKeywordRequest, Pageable pageable) { + public Page filterContent(Long memberId, FilterKeywordRequest filterKeywordRequest, Pageable pageable) { List mailList = getMailHeaderList(memberId); diff --git a/src/main/java/com/Nunbody/domain/mail/service/MailService.java b/src/main/java/com/Nunbody/domain/mail/service/MailService.java index d104605..fdd3322 100644 --- a/src/main/java/com/Nunbody/domain/mail/service/MailService.java +++ b/src/main/java/com/Nunbody/domain/mail/service/MailService.java @@ -30,7 +30,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -125,40 +124,47 @@ public MailList mailSetting(Long userId, String platformHost, String platformId, Message[] messages = folder.getMessages(); MailHeader mailHeaderData; + MailHeader latestMail = mailRepository.findFirstByMemberIdAndPlatformTypeOrderByDateDesc(userId,platformType).orElse(null); - - for (int i = 0; i <5 ; i++) { - matcher = pattern.matcher(messages[i].getFrom()[0].toString()); - Instant receivedInstant = messages[i].getReceivedDate().toInstant(); - ZonedDateTime kstDateTime = ZonedDateTime.ofInstant(receivedInstant, ZoneId.of("Asia/Seoul")); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - String formattedDate = kstDateTime.format(formatter); - - if (matcher.find()) { - String fromPerson = matcher.group(1); - mailHeaderData = MailHeader.builder() - .title(messages[i].getSubject()) - .fromPerson(fromPerson) - .date(formattedDate) - .member(memberRepository.findById(userId).get()) - .platformType(platformType) - .build(); - } else { - mailHeaderData = MailHeader.builder() - .title(messages[i].getSubject()) - .fromPerson(messages[i].getFrom()[0].toString()) - .date(formattedDate) - .member(memberRepository.findById(userId).get()) - .platformType(platformType) - .build(); + if (latestMail==null){ + reset(messages,userId, platformType,platformHost); + } + else { + for (int i = messages.length - 2; i < messages.length; i++) { + matcher = pattern.matcher(messages[i].getFrom()[0].toString()); + Instant receivedInstant = messages[i].getReceivedDate().toInstant(); + ZonedDateTime kstDateTime = ZonedDateTime.ofInstant(receivedInstant, ZoneId.of("Asia/Seoul")); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String formattedDate = kstDateTime.format(formatter); + int compare = formattedDate.compareTo(latestMail.getDate()); + if (compare > 0) { + if (matcher.find()) { + String fromPerson = matcher.group(1); + mailHeaderData = MailHeader.builder() + .title(messages[i].getSubject()) + .fromPerson(fromPerson) + .date(formattedDate) + .member(memberRepository.findById(userId).get()) + .platformType(platformType) + .build(); + } else { + mailHeaderData = MailHeader.builder() + .title(messages[i].getSubject()) + .fromPerson(messages[i].getFrom()[0].toString()) + .date(formattedDate) + .member(memberRepository.findById(userId).get()) + .platformType(platformType) + .build(); + } + mailRepository.save(mailHeaderData); + //mailList.addData(mailHeaderData); + + Long mailId = mailHeaderData.getId(); + mailBodies.add(extractMailBody(platformHost, messages[i], mailId)); + } + mongoTemplate.insertAll(mailBodies); } - mailRepository.save(mailHeaderData); - //mailList.addData(mailHeaderData); - - Long mailId = mailHeaderData.getId(); - mailBodies.add(extractMailBody(platformHost,messages[i],mailId)); } - mongoTemplate.insertAll(mailBodies); // 폴더와 스토어 닫기 folder.close(false); store.close(); @@ -170,6 +176,43 @@ public MailList mailSetting(Long userId, String platformHost, String platformId, return mailList; } + public void reset(Message[] messages, Long userId, PlatformType platformType, String platformHost) + throws MessagingException, IOException { + MailHeader mailHeaderData; + List mailBodies = new ArrayList<>(); + for (int i = messages.length-20; i < messages.length; i++) { + matcher = pattern.matcher(messages[i].getFrom()[0].toString()); + Instant receivedInstant = messages[i].getReceivedDate().toInstant(); + ZonedDateTime kstDateTime = ZonedDateTime.ofInstant(receivedInstant, ZoneId.of("Asia/Seoul")); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String formattedDate = kstDateTime.format(formatter); + if (matcher.find()) { + String fromPerson = matcher.group(1); + mailHeaderData = MailHeader.builder() + .title(messages[i].getSubject()) + .fromPerson(fromPerson) + .date(formattedDate) + .member(memberRepository.findById(userId).get()) + .platformType(platformType) + .build(); + } else { + mailHeaderData = MailHeader.builder() + .title(messages[i].getSubject()) + .fromPerson(messages[i].getFrom()[0].toString()) + .date(formattedDate) + .member(memberRepository.findById(userId).get()) + .platformType(platformType) + .build(); + } + mailRepository.save(mailHeaderData); + //mailList.addData(mailHeaderData); + + Long mailId = mailHeaderData.getId(); + mailBodies.add(extractMailBody(platformHost, messages[i], mailId)); + } + mongoTemplate.insertAll(mailBodies); + } + public MailBody extractMailBody(String platformhost,Message messages, Long mailId) throws MessagingException, IOException { Object content = messages.getContent();