Skip to content

Commit

Permalink
[�fix #184] 채팅 자동 거절 시 수정일 미변경 해결 (#188)
Browse files Browse the repository at this point in the history
* [test #184] 채팅 자동 거절 시 updatedAt 필드 변화 테스트 작성

* [feat #184] bulk 연산 시 직접 update 필드를 변경하도록 벌크 쿼리 메서드 파라미터 추가

* [test #184] 벌크 쿼리 메서드 파라미터 추가로 인한 호출 시점 파라미터 추가

* [test #184] 벌크 연산 테스트

* [feat #184] 답변 미작성 게시글 환불 벌크 연산 시 업데이트 시각 직접 변경하도록 파라미터 추가

* [test #184] 게시글 환불 벌크연산 파라미터 추가로 인한 테스트 코드 수정

* [fix #184] merge로 인한 네이밍 변경된 메서드 오류 수정

* [feat #184] 외부 환경을 파라미터로 추가한다

* [test #184] 외부 환경 시간을 통제하여 테스트 검증

* [feat #184] 외부 환경(시간)을 파라미터로 추가

* [test #184] 불필요한 테스트 코드 삭제
  • Loading branch information
dudxo authored Jan 13, 2025
1 parent f1ff7b3 commit 840810d
Show file tree
Hide file tree
Showing 11 changed files with 29 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dnd.gongmuin.chat_inquiry.repository;

import java.time.LocalDateTime;
import java.util.List;

import org.springframework.data.domain.Pageable;
Expand All @@ -14,7 +15,7 @@ public interface ChatInquiryQueryRepository {

List<Long> getAutoRejectedInquirerIds();

void updateChatInquiryStatusRejected();
void updateChatInquiryStatusRejected(LocalDateTime now);

List<RejectedChatInquiryDto> getAutoRejectedChatInquiries();
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,10 @@ public List<RejectedChatInquiryDto> getAutoRejectedChatInquiries() {
.fetch();
}

public void updateChatInquiryStatusRejected() {
public void updateChatInquiryStatusRejected(LocalDateTime now) {
queryFactory.update(chatInquiry)
.set(chatInquiry.status, InquiryStatus.REJECTED)
.set(chatInquiry.updatedAt, now)
.where(
chatInquiry.createdAt.loe(LocalDateTime.now().minusWeeks(1)),
chatInquiry.status.eq(InquiryStatus.PENDING)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.dnd.gongmuin.chat_inquiry.scheduler;

import java.time.LocalDateTime;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -17,6 +19,6 @@ public class ChatInquiryScheduler {
@Transactional
@Scheduled(cron = "0 0 0 * * *", zone = "Asia/Seoul")
public void rejectChatInquiry() {
chatInquiryService.rejectChatAuto();
chatInquiryService.rejectChatAuto(LocalDateTime.now());
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dnd.gongmuin.chat_inquiry.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

Expand Down Expand Up @@ -132,10 +133,10 @@ public RejectChatResponse rejectChat(Long chatInquiryId, Member answerer) {
}

@Transactional
public void rejectChatAuto() {
public void rejectChatAuto(LocalDateTime now) {
List<RejectedChatInquiryDto> rejectedChatInquiryDtos = chatInquiryRepository.getAutoRejectedChatInquiries();
List<Long> rejectedInquirerIds = getRejectedInquirerIds(rejectedChatInquiryDtos);
chatInquiryRepository.updateChatInquiryStatusRejected();
chatInquiryRepository.updateChatInquiryStatusRejected(now);
memberRepository.refundInMemberIds(rejectedInquirerIds, CHAT_REWARD);
creditHistoryService.saveCreditHistoryInMemberIds(
rejectedInquirerIds, CreditType.CHAT_REFUND, CHAT_REWARD
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dnd.gongmuin.question_post.repository;

import java.time.LocalDateTime;
import java.util.List;

import org.springframework.data.domain.Pageable;
Expand All @@ -23,5 +24,5 @@ Slice<RecQuestionPostResponse> getRecommendQuestionPosts(

List<RefundQuestionPostDto> getRefundQuestionPostDtos();

void updateQuestionPostStatusAnswerClosed();
void updateQuestionPostStatusAnswerClosed(LocalDateTime now);
}
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,11 @@ public List<RefundQuestionPostDto> getRefundQuestionPostDtos() {
}

@Override
public void updateQuestionPostStatusAnswerClosed() {
public void updateQuestionPostStatusAnswerClosed(LocalDateTime now) {
queryFactory
.update(questionPost)
.set(questionPost.status, QuestionPostStatus.ANSWER_CLOSED)
.set(questionPost.updatedAt, now)
.where(
questionPost.createdAt.loe(LocalDateTime.now().minusWeeks(2)),
questionPost.status.eq(QuestionPostStatus.ANSWER_WAITING)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.dnd.gongmuin.question_post.scheduler;

import java.time.LocalDateTime;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -17,6 +19,6 @@ public class QuestionPostScheduler {
@Transactional
@Scheduled(cron = "0 0 0 * * *", zone = "Asia/Seoul")
public void closeQuestionPost() {
questionPostService.changeQuestionPostStatusAnswerClosed();
questionPostService.changeQuestionPostStatusAnswerClosed(LocalDateTime.now());
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dnd.gongmuin.question_post.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

Expand Down Expand Up @@ -155,8 +156,8 @@ private void validateIfQuestionPostExists(Long questionPostId) {
}
}

private void validateIfQuestioner(Member member, QuestionPost questionPost){
if (!Objects.equals(member.getId(), questionPost.getMember().getId())){
private void validateIfQuestioner(Member member, QuestionPost questionPost) {
if (!Objects.equals(member.getId(), questionPost.getMember().getId())) {
throw new ValidationException(QuestionPostErrorCode.NOT_AUTHORIZED);
}
}
Expand All @@ -179,9 +180,9 @@ private int getCountByType(Long questionPostId, InteractionType type) {
}

@Transactional
public void changeQuestionPostStatusAnswerClosed() {
public void changeQuestionPostStatusAnswerClosed(LocalDateTime now) {
refundClosedQuestionPosts();
questionPostRepository.updateQuestionPostStatusAnswerClosed();
questionPostRepository.updateQuestionPostStatusAnswerClosed(now);
}

private void refundDeletedQuestionPost(QuestionPost questionPost) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ void updateChatInquiryStatusRejected() {
ReflectionTestUtils.setField(chatInquiries.get(0), "createdAt", LocalDateTime.now().minusWeeks(1));

//when
chatInquiryRepository.updateChatInquiryStatusRejected();
chatInquiryRepository.updateChatInquiryStatusRejected(LocalDateTime.now());

em.flush();
em.clear();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.BDDMockito.*;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -323,6 +324,8 @@ void rejectChatWithEventPublish() {
@Test
void rejectChatAuto() {
// given
final LocalDateTime now = LocalDateTime.now();

List<RejectedChatInquiryDto> rejectedChatInquiryDtos = List.of(
new RejectedChatInquiryDto(1L, MemberFixture.member(1L), MemberFixture.member(2L)),
new RejectedChatInquiryDto(2L, MemberFixture.member(3L), MemberFixture.member(4L))
Expand All @@ -334,11 +337,11 @@ void rejectChatAuto() {
given(chatInquiryRepository.getAutoRejectedChatInquiries()).willReturn(rejectedChatInquiryDtos);

// when
chatInquiryService.rejectChatAuto();
chatInquiryService.rejectChatAuto(now);

// then
verify(chatInquiryRepository).getAutoRejectedChatInquiries();
verify(chatInquiryRepository).updateChatInquiryStatusRejected();
verify(chatInquiryRepository).updateChatInquiryStatusRejected(now);
verify(memberRepository).refundInMemberIds(rejectedInquirerIds, CHAT_REWARD);
verify(creditHistoryService).saveCreditHistoryInMemberIds(
rejectedInquirerIds, CreditType.CHAT_REFUND, CHAT_REWARD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ void getAutoChangeStatus() {
ReflectionTestUtils.setField(questionPost3, "createdAt", LocalDateTime.now().minusWeeks(2));

// when
questionPostRepository.updateQuestionPostStatusAnswerClosed();
questionPostRepository.updateQuestionPostStatusAnswerClosed(LocalDateTime.now());

em.flush();
em.clear();
Expand Down

0 comments on commit 840810d

Please sign in to comment.