Skip to content

Commit

Permalink
Merge pull request #141 from Re-4aliens/fix/#140_add-exception-of-get…
Browse files Browse the repository at this point in the history
…-my-partner-api

Fix/#140 내 파트너 조회 API 예외 처리 추가
  • Loading branch information
mjj111 authored Aug 10, 2024
2 parents 4c02138 + 5c2c844 commit d31a3c7
Show file tree
Hide file tree
Showing 18 changed files with 92 additions and 36 deletions.
4 changes: 4 additions & 0 deletions src/main/java/com/aliens/backend/auth/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@ public void cancelApplication() {
}
}

public boolean hasPartner() {
return status == MatchingStatus.NOT_APPLIED_MATCHED || status == MatchingStatus.APPLIED_MATCHED;
}

@Override
public String toString() {
return String.format("email: %s, role : %s", this.email, this.role);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.aliens.backend.mathcing.business;

import com.aliens.backend.global.property.MatchingRuleProperties;
import com.aliens.backend.mathcing.business.model.*;
import com.aliens.backend.mathcing.business.model.LanguageQueue;
import com.aliens.backend.mathcing.business.model.MatchingTypeGroup;
import com.aliens.backend.mathcing.business.model.Participant;
import com.aliens.backend.mathcing.business.model.ParticipantGroup;
import com.aliens.backend.mathcing.controller.dto.request.MatchingOperateRequest;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.List;

@Component
public class MatchingBusiness {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import com.aliens.backend.auth.domain.Member;
import com.aliens.backend.block.domain.Block;
import com.aliens.backend.global.response.error.MatchingError;
import com.aliens.backend.global.exception.RestApiException;
import com.aliens.backend.global.response.error.MatchingError;
import com.aliens.backend.mathcing.domain.MatchingApplication;
import com.aliens.backend.mathcing.domain.MatchingResult;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import com.aliens.backend.auth.controller.dto.LoginMember;
import com.aliens.backend.global.config.resolver.Login;
import com.aliens.backend.global.response.success.MatchingSuccess;
import com.aliens.backend.global.response.SuccessResponse;
import com.aliens.backend.global.response.success.MatchingSuccess;
import com.aliens.backend.mathcing.controller.dto.response.MatchingResultResponse;
import com.aliens.backend.mathcing.service.MatchingProcessService;
import org.springframework.web.bind.annotation.*;
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;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.aliens.backend.mathcing.controller.dto.response;

import com.aliens.backend.mathcing.domain.MatchingApplication;
import com.aliens.backend.mathcing.business.model.Language;
import com.aliens.backend.mathcing.domain.MatchingApplication;

public record MatchingApplicationResponse(
Long matchingRound,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import com.aliens.backend.chat.domain.ChatRoom;
import com.aliens.backend.chat.domain.ChatRoomStatus;
import com.aliens.backend.mathcing.business.model.Language;
import com.aliens.backend.mathcing.business.model.Relationship;
import com.aliens.backend.mathcing.domain.MatchingApplication;
import com.aliens.backend.mathcing.domain.MatchingResult;
import com.aliens.backend.mathcing.business.model.Relationship;
import com.aliens.backend.member.controller.dto.response.MemberPageResponse;

public record MatchingResultResponse(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.aliens.backend.mathcing.domain;

import com.aliens.backend.auth.domain.Member;
import com.aliens.backend.mathcing.business.model.Language;
import com.aliens.backend.mathcing.controller.dto.request.MatchingApplicationRequest;
import com.aliens.backend.mathcing.domain.id.MatchingApplicationId;
import com.aliens.backend.mathcing.business.model.Language;
import jakarta.persistence.EmbeddedId;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import com.aliens.backend.auth.domain.Member;
import com.aliens.backend.mathcing.business.model.Participant;
import com.aliens.backend.mathcing.business.model.Partner;
import com.aliens.backend.mathcing.domain.id.MatchingResultId;
import com.aliens.backend.mathcing.business.model.Relationship;
import com.aliens.backend.member.controller.dto.MemberPage;
import com.aliens.backend.mathcing.domain.id.MatchingResultId;
import com.aliens.backend.member.controller.dto.response.MemberPageResponse;
import jakarta.persistence.*;
import jakarta.persistence.EmbeddedId;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import org.springframework.data.domain.Persistable;

@Entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import com.aliens.backend.auth.domain.Member;
import com.aliens.backend.mathcing.domain.MatchingRound;
import jakarta.persistence.*;
import jakarta.persistence.Embeddable;
import jakarta.persistence.FetchType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;

import java.io.Serializable;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import com.aliens.backend.auth.domain.Member;
import com.aliens.backend.mathcing.domain.MatchingRound;
import jakarta.persistence.*;
import jakarta.persistence.Embeddable;
import jakarta.persistence.FetchType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;

import java.io.Serializable;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.aliens.backend.mathcing.domain.repository;

import com.aliens.backend.mathcing.domain.MatchingResult;
import com.aliens.backend.mathcing.domain.MatchingRound;
import com.aliens.backend.mathcing.domain.id.MatchingResultId;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
Expand All @@ -15,6 +14,6 @@ public interface MatchingResultRepository extends JpaRepository<MatchingResult,
List<MatchingResult> findAllByRound(Long round);

@Query("SELECT mr FROM MatchingResult mr " +
"WHERE mr.id.matchingRound = :matchingRound AND mr.id.matchingMember.id = :memberId")
List<MatchingResult> findAllByMatchingRoundAndMemberId(MatchingRound matchingRound, Long memberId);
"WHERE mr.id.matchingRound.round = :round AND mr.id.matchingMember.id = :memberId")
List<MatchingResult> findAllByMatchingRoundAndMemberId(Long round, Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.aliens.backend.auth.controller.dto.LoginMember;
import com.aliens.backend.auth.domain.Member;
import com.aliens.backend.auth.domain.repository.MemberRepository;
import com.aliens.backend.global.response.error.MatchingError;
import com.aliens.backend.global.exception.RestApiException;
import com.aliens.backend.global.response.error.MatchingError;
import com.aliens.backend.global.response.error.MemberError;
import com.aliens.backend.global.response.success.MatchingSuccess;
import com.aliens.backend.mathcing.controller.dto.request.MatchingApplicationRequest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@

import com.aliens.backend.auth.controller.dto.LoginMember;
import com.aliens.backend.auth.domain.Member;
import com.aliens.backend.auth.domain.repository.MemberRepository;
import com.aliens.backend.block.domain.Block;
import com.aliens.backend.block.domain.repository.BlockRepository;
import com.aliens.backend.chat.controller.dto.event.ChatRoomExpireEvent;
import com.aliens.backend.chat.domain.ChatParticipant;
import com.aliens.backend.chat.domain.ChatRoom;
import com.aliens.backend.chat.domain.repository.ChatParticipantRepository;
import com.aliens.backend.global.response.error.MatchingError;
import com.aliens.backend.global.exception.RestApiException;
import com.aliens.backend.global.response.error.ChatError;
import com.aliens.backend.global.response.error.MatchingError;
import com.aliens.backend.global.response.error.MemberError;
import com.aliens.backend.mathcing.business.MatchingBusiness;
import com.aliens.backend.mathcing.business.model.Participant;
import com.aliens.backend.mathcing.controller.dto.request.MatchingOperateRequest;
import com.aliens.backend.mathcing.controller.dto.response.MatchingResultResponse;
import com.aliens.backend.mathcing.domain.MatchingApplication;
Expand All @@ -19,13 +22,13 @@
import com.aliens.backend.mathcing.domain.repository.MatchingApplicationRepository;
import com.aliens.backend.mathcing.domain.repository.MatchingResultRepository;
import com.aliens.backend.mathcing.domain.repository.MatchingRoundRepository;
import com.aliens.backend.mathcing.business.model.Participant;
import com.aliens.backend.mathcing.service.event.MatchingEventPublisher;
import com.aliens.backend.member.controller.dto.response.MemberPageResponse;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.Clock;
import java.util.List;

@Service
Expand All @@ -37,21 +40,27 @@ public class MatchingProcessService {
private final BlockRepository blockRepository;
private final MatchingEventPublisher eventPublisher;
private final ChatParticipantRepository chatParticipantRepository;
private final MemberRepository memberRepository;
private final Clock clock;

public MatchingProcessService(final MatchingBusiness matchingBusiness,
final MatchingRoundRepository matchingRoundRepository,
final MatchingApplicationRepository matchingApplicationRepository,
final MatchingResultRepository matchingResultRepository,
final BlockRepository blockRepository,
final MatchingEventPublisher eventPublisher,
final ChatParticipantRepository chatParticipantRepository) {
final ChatParticipantRepository chatParticipantRepository,
final MemberRepository memberRepository,
final Clock clock) {
this.matchingRoundRepository = matchingRoundRepository;
this.matchingApplicationRepository = matchingApplicationRepository;
this.matchingResultRepository = matchingResultRepository;
this.matchingBusiness = matchingBusiness;
this.blockRepository = blockRepository;
this.eventPublisher = eventPublisher;
this.chatParticipantRepository = chatParticipantRepository;
this.memberRepository = memberRepository;
this.clock = clock;
}

@Scheduled(cron = "${matching.round.start}")
Expand Down Expand Up @@ -83,9 +92,21 @@ public List<MatchingResultResponse> findMatchingResult(final LoginMember loginMe
.toList();
}

private List<MatchingResult> getMatchingResults(final MatchingRound matchingRound, final LoginMember loginMember) {
Member member = getMember(loginMember);
List<MatchingResult> matchingResults = matchingResultRepository
.findAllByMatchingRoundAndMemberId(matchingRound.getRound(), loginMember.memberId());
if (member.hasPartner() && matchingResults.isEmpty()) {
return matchingResultRepository
.findAllByMatchingRoundAndMemberId(matchingRound.getPreviousRound(), loginMember.memberId());
}
return matchingResults;
}

private ChatParticipant getChatParticipant(final LoginMember loginMember, final MatchingResult result) {
return chatParticipantRepository.findByMemberIdAndMatchedMemberId(loginMember.memberId(), result.getMatchedMemberId())
.orElseThrow(() -> new RestApiException(MatchingError.NOT_FOUND_MATCHING_APPLICATION_INFO)); }
.orElseThrow(() -> new RestApiException(ChatError.CHAT_ROOM_NOT_FOUND));
}

private MatchingApplication findMatchedMemberApplicationByRoundAndMemberId(MatchingResult result) {
return matchingApplicationRepository.findByMatchingRoundAndMemberId(result.getMatchingRound(), result.getMatchedMemberId())
Expand Down Expand Up @@ -129,8 +150,9 @@ private MatchingRound getCurrentRound() {
.orElseThrow(()-> new RestApiException(MatchingError.NOT_FOUND_MATCHING_ROUND));
}

private List<MatchingResult> getMatchingResults(final MatchingRound matchingRound, final LoginMember loginMember) {
return matchingResultRepository.findAllByMatchingRoundAndMemberId(matchingRound, loginMember.memberId());
private Member getMember(LoginMember loginMember) {
return memberRepository.findById(loginMember.memberId())
.orElseThrow(() -> new RestApiException(MemberError.NULL_MEMBER));
}

private List<MatchingApplication> getMatchingApplications(final MatchingRound matchingRound) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import com.aliens.backend.global.exception.RestApiException;
import com.aliens.backend.global.response.error.MatchingError;
import com.aliens.backend.global.validator.LanguageCheck;
import com.aliens.backend.mathcing.controller.dto.request.MatchingApplicationRequest;
import com.aliens.backend.mathcing.business.model.Language;
import com.aliens.backend.mathcing.controller.dto.request.MatchingApplicationRequest;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@

import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
import static org.springframework.restdocs.request.RequestDocumentation.partWithName;
import static org.springframework.restdocs.request.RequestDocumentation.requestParts;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,17 @@
import com.aliens.backend.global.response.error.MemberError;
import com.aliens.backend.matching.util.time.MockClock;
import com.aliens.backend.matching.util.time.MockTime;
import com.aliens.backend.mathcing.controller.dto.response.MatchingResultResponse;
import com.aliens.backend.mathcing.domain.MatchingResult;
import com.aliens.backend.mathcing.domain.MatchingRound;
import com.aliens.backend.mathcing.domain.repository.MatchingResultRepository;
import com.aliens.backend.mathcing.domain.repository.MatchingRoundRepository;
import com.aliens.backend.mathcing.service.MatchingProcessService;
import com.aliens.backend.member.domain.MatchingStatus;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
Expand Down Expand Up @@ -55,14 +58,33 @@ void setUp() {
}

@Test
@DisplayName("매칭 결과 조회")
void operateMatchingTest() {
// given & when
@DisplayName("내 매칭 결과 조회")
void getMyMatchingResult() {
// given
Member member = members.get(0);

// when
dummyGenerator.operateMatching();

// then
List<MatchingResult> result = getMatchingResultByMatchingRound(getCurrentRound());
Assertions.assertThat(result).isNotNull();
List<MatchingResultResponse> result = matchingProcessService.findMatchingResult(member.getLoginMember());
Assertions.assertThat(result).isNotEmpty();
}

@Test
@DisplayName("매칭 회차가 갱신 된후, 매칭 결과 조회")
void getMatchingResultAfterUpdateMatchingRound() {
// given
Member member = members.get(0);
dummyGenerator.operateMatching();
dummyGenerator.generateMatchingRound(MockTime.FRIDAY);
mockClock.mockTime(MockTime.VALID_RECEPTION_TIME_ON_FRIDAY);

// when
List<MatchingResultResponse> result = matchingProcessService.findMatchingResult(member.getLoginMember());

// then
Assertions.assertThat(result).isNotEmpty();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package com.aliens.backend.matching.util.time;

import com.aliens.backend.mathcing.domain.MatchingRound;
import org.mockito.BDDMockito;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.stereotype.Component;

import java.time.Clock;
import java.time.LocalDateTime;
import java.time.ZoneId;

import static org.mockito.BDDMockito.*;
import static org.mockito.Mockito.when;

@Component
Expand Down

0 comments on commit d31a3c7

Please sign in to comment.