Skip to content

Commit 5a1a3f0

Browse files
authored
Merge branch 'dev' into refactor/letter-temporary-save(WR9-112)
2 parents f398eb2 + b248509 commit 5a1a3f0

File tree

18 files changed

+203
-44
lines changed

18 files changed

+203
-44
lines changed

src/main/java/io/crops/warmletter/domain/auth/service/AuthService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public TokenResponse reissue(String refreshToken, HttpServletResponse response)
7272
.httpOnly(true) // JavaScript에서 쿠키에 접근할 수 없도록 설정
7373
.secure(true) // HTTPS에서만 쿠키가 전송되도록 설정
7474
.sameSite("None") // 크로스 도메인 요청 허용
75-
.domain("serverDomain")
75+
.domain(serverDomain)
7676
.path("/") // 쿠키가 유효한 경로 설정
7777
.maxAge(Duration.ofDays(14)) // 쿠키의 유효기간 설정 (14일)
7878
.build();

src/main/java/io/crops/warmletter/domain/letter/dto/response/LetterResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,14 @@ public static LetterResponse fromEntity(Letter letter, String zipCode) {
7676
}
7777

7878
//이전편지 변환
79-
public static LetterResponse fromEntityForPreviousLetters(Letter letter, String zipCode, Long myId, Long matchingId) {
79+
public static LetterResponse fromEntityForPreviousLetters(Letter letter, String zipCode, Long matchingId) {
8080
return LetterResponse.builder()
8181
.letterId(letter.getId()) //이전 편지의 정보들
8282
.zipCode(zipCode)
8383
.title(letter.getTitle())
8484
.content(letter.getContent())
8585
.category(letter.getCategory())
86-
.memberId(myId) //편지를 쓴 자기 자신의 id -> 이전 편지의 정보가 아님~!
86+
.memberId(letter.getWriterId()) //이전 편지를 쓴 사용자
8787
.matchingId(matchingId)
8888
.build();
8989
}

src/main/java/io/crops/warmletter/domain/letter/repository/LetterMatchingRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public interface LetterMatchingRepository extends JpaRepository<LetterMatching,
4343
"FROM LetterMatching lm " +
4444
"LEFT JOIN Letter l ON lm.id = l.matchingId AND l.status = 'DELIVERED' AND l.isActive = true " +
4545
"JOIN Member m ON (CASE WHEN lm.firstMemberId = :myId THEN lm.secondMemberId ELSE lm.firstMemberId END) = m.id " +
46-
"WHERE (lm.firstMemberId = :myId OR lm.secondMemberId = :myId) AND lm.isActive = true " +
46+
"WHERE (lm.firstMemberId = :myId OR lm.secondMemberId = :myId) " +
4747
"GROUP BY lm.id, m.zipCode, lm.isActive " +
4848
"ORDER BY lm.id DESC")
4949
List<MailboxResponse> findMailboxDetails(@Param("myId") Long myId);

src/main/java/io/crops/warmletter/domain/letter/repository/LetterRepository.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.crops.warmletter.domain.letter.entity.Letter;
66
import io.crops.warmletter.domain.letter.enums.Category;
77
import io.crops.warmletter.domain.letter.enums.Status;
8+
import io.crops.warmletter.domain.timeline.dto.response.LetterAlarmResponse;
89
import io.lettuce.core.dynamic.annotation.Param;
910
import org.springframework.data.domain.Page;
1011
import org.springframework.data.domain.Pageable;
@@ -14,6 +15,7 @@
1415

1516
import java.time.LocalDateTime;
1617
import java.util.List;
18+
import java.util.Map;
1719
import java.util.Optional;
1820

1921

@@ -66,4 +68,12 @@ List<LetterDraftResponse> findDraftLettersWithMatching(@Param("writerId") Long w
6668
Optional<Letter> findByIdAndWriterIdAndStatusIsSAVED(Long id, Long writerId);
6769

6870
List<Letter> findByStatusAndDeliveryCompletedAtLessThanEqual(Status status, LocalDateTime now);
71+
72+
@Query("SELECT new io.crops.warmletter.domain.timeline.dto.response.LetterAlarmResponse(" +
73+
"l.writerId, m.zipCode) " +
74+
"FROM Letter l " +
75+
"JOIN Member m ON l.writerId = m.id " +
76+
"WHERE l.status = 'IN_DELIVERY' " +
77+
"AND l.deliveryCompletedAt <= :now")
78+
List<LetterAlarmResponse> findZipCodeByLettersToComplete(LocalDateTime now);
6979
}

src/main/java/io/crops/warmletter/domain/letter/service/LetterService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,9 @@ public LetterResponse createLetter(CreateLetterRequest request) {
9999

100100
String zipCode = authFacade.getZipCode();
101101

102+
// 알림 전송
102103
if(request.getReceiverId() != null){
103-
notificationFacade.sendNotification(zipCode,request.getReceiverId(), AlarmType.LETTER,savedLetter.getId().toString());
104+
notificationFacade.sendNotification(zipCode,request.getReceiverId(), AlarmType.SENDING,null);
104105
}
105106

106107
return LetterResponse.fromEntity(savedLetter, zipCode);
@@ -114,7 +115,7 @@ public List<LetterResponse> getPreviousLetters(Long letterId) {
114115

115116
if(parentLetterId == null){
116117
String zipCode = memberRepository.findById(letter.getWriterId()).orElseThrow(MemberNotFoundException::new).getZipCode();
117-
LetterResponse response = LetterResponse.fromEntityForPreviousLetters(letter,zipCode,myId, null);
118+
LetterResponse response = LetterResponse.fromEntityForPreviousLetters(letter, zipCode, null);
118119
return List.of(response);
119120

120121
}else{
@@ -130,7 +131,7 @@ public List<LetterResponse> getPreviousLetters(Long letterId) {
130131
for (Letter findLetter : lettersByParentId) {
131132
if(findLetter.getStatus().equals(Status.DELIVERED)){
132133
String zipCode = memberRepository.findById(findLetter.getWriterId()).orElseThrow(MemberNotFoundException::new).getZipCode();
133-
LetterResponse response = LetterResponse.fromEntityForPreviousLetters(findLetter,zipCode, myId, letterMatching.getId());
134+
LetterResponse response = LetterResponse.fromEntityForPreviousLetters(findLetter, zipCode, letterMatching.getId());
134135
responses.add(response);
135136
}
136137
}

src/main/java/io/crops/warmletter/domain/report/service/ReportModerationService.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.crops.warmletter.domain.report.service;
22

3+
import com.fasterxml.jackson.databind.ObjectMapper;
34
import io.crops.warmletter.domain.report.enums.ReasonType;
45
import lombok.RequiredArgsConstructor;
56
import lombok.extern.slf4j.Slf4j;
@@ -26,14 +27,30 @@ public Map<String, String> moderateText(String text, ReasonType reasonType, Stri
2627
Map<String, Object> requestBody = buildRequestBody(prompt);
2728
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
2829

29-
ResponseEntity<Map> response = new RestTemplate().exchange(apiUrl, HttpMethod.POST, requestEntity, Map.class);
30+
log.info("사용 중인 API URL: {}", apiUrl);
3031

31-
if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) {
32-
log.info("AI Studio 응답: {}", response.getBody());
33-
Map<String, String> result = parseResponse(response.getBody());
34-
if (result != null) {
35-
return result;
32+
try {
33+
ObjectMapper objectMapper = new ObjectMapper();
34+
String jsonRequestBody = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(requestBody);
35+
36+
log.info("API 요청 시작 - URL: {}", apiUrl);
37+
log.info("JSON 요청 바디: \n{}", jsonRequestBody);
38+
log.info("요청 헤더: {}", headers);
39+
40+
ResponseEntity<Map> response = new RestTemplate().exchange(apiUrl, HttpMethod.POST, requestEntity, Map.class);
41+
42+
43+
log.info("API 응답 코드: {}", response.getStatusCode());
44+
log.info("API 응답 바디: {}", response.getBody());
45+
46+
if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) {
47+
Map<String, String> result = parseResponse(response.getBody());
48+
if (result != null) {
49+
return result;
50+
}
3651
}
52+
} catch (Exception e) {
53+
log.error("🚨 API 요청 실패: {}", e.getMessage(), e);
3754
}
3855
return defaultResult("AI 응답 없음 또는 오류 발생");
3956
}

src/main/java/io/crops/warmletter/domain/report/service/ReportService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public UpdateReportResponse updateReport(Long reportId, UpdateReportRequest requ
8080
memberRepository.save(reportedMember);
8181
}
8282
resolvePendingReports(report);
83-
// targetMemberId로 알림 전송 TODO : 배포 후 테스트 예정
83+
// targetMemberId로 알림 전송
8484
notificationFacade.sendNotification(null, targetMemberId, AlarmType.REPORT, report.getAdminMemo()+"§"+reportedMember.getWarningCount());
8585
}
8686
return new UpdateReportResponse(report,reportedMember);

src/main/java/io/crops/warmletter/domain/share/service/ShareProposalService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public ShareProposalResponse requestShareProposal(ShareProposalRequest request)
4545
if (response == null) {
4646
throw new ShareProposalNotFoundException();
4747
}
48-
// 알림 전송 TODO : 배포 후 테스트 예정
48+
// 알림 전송
4949
notificationFacade.sendNotification(response.getZipCode(), request.getRecipientId(), AlarmType.SHARE, response.getShareProposalId().toString());
5050
return response;
5151
}
@@ -71,7 +71,7 @@ public ShareProposalStatusResponse approveShareProposal(Long shareProposalId) {
7171
.isActive(true)
7272
.build();
7373
sharePost = sharePostRepository.save(sharePost);
74-
// 알림 전송(양쪽다) / 인가 값이 없어서 일단 우편번호는 임시값으로 대체 TODO : 배포 후 테스트 예정
74+
// 알림 전송(양쪽다) / 인가 값이 없어서 일단 우편번호는 임시값으로 대체
7575
notificationFacade.sendNotification("승인요청자", shareProposal.getRequesterId(), AlarmType.POSTED, sharePost.getId().toString());
7676
notificationFacade.sendNotification("승인수락자", shareProposal.getRecipientId(), AlarmType.POSTED, sharePost.getId().toString());
7777
return ShareProposalStatusResponse.builder()

src/main/java/io/crops/warmletter/domain/timeline/controller/NotificationController.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
package io.crops.warmletter.domain.timeline.controller;
22

3-
import io.crops.warmletter.domain.timeline.dto.response.ReadNotificationResponse;
43
import io.crops.warmletter.domain.timeline.service.NotificationService;
5-
import io.crops.warmletter.global.response.BaseResponse;
64
import io.swagger.v3.oas.annotations.Operation;
75
import io.swagger.v3.oas.annotations.tags.Tag;
86
import lombok.RequiredArgsConstructor;
97
import org.springframework.http.MediaType;
10-
import org.springframework.http.ResponseEntity;
118
import org.springframework.web.bind.annotation.*;
129
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
1310

14-
import java.util.List;
15-
1611
@RestController
1712
@RequiredArgsConstructor
1813
@RequestMapping("/api/notifications")
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.crops.warmletter.domain.timeline.dto.response;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class LetterAlarmResponse {
9+
private Long writerId;
10+
private String zipCode;
11+
}

0 commit comments

Comments
 (0)