Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Matching 에러 해결 #14

Merged
merged 1 commit into from
Feb 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,7 @@ public ResponseEntity<?> updateMatchingInfo(@RequestBody MatchingInputDto reqDto
// 매칭 대기 취소: 내 매칭 삭제
@DeleteMapping("/match/cancel")
public ResponseEntity<?> cancelMatching() {
Matching matching = matchingService.deleteMatching();
if (matching == null)
return ResponseEntity.ok().body("취소할 Matching이 없습니다.");
return ResponseEntity.ok().body("기존 matching을 취소했습니다.");
String cancelMessage = matchingService.deleteMyMatching();
return ResponseEntity.ok().body(cancelMessage);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.gdscewha.withmate.domain.matching.dto;

import com.gdscewha.withmate.domain.matching.entity.Matching;
import com.gdscewha.withmate.domain.member.entity.Member;
import com.gdscewha.withmate.domain.model.Category;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -17,11 +18,10 @@ public class MatchingResDto {
private Category category;
private String country;

// Matching을 받는 생성자
public MatchingResDto(Matching matching) {
this.nickname = matching.getMember().getNickname();
public MatchingResDto(Matching matching, Member member) {
this.nickname = member.getNickname();
this.goal = matching.getGoal();
this.category = matching.getCategory();
this.country = matching.getMember().getCountry();
this.country = member.getCountry();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.gdscewha.withmate.domain.relation.service.RelationMateService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -70,7 +71,10 @@ public Matching createMatching(Member member, MatchingInputDto reqDto) {
.category(reqDto.getCategory())
.member(member)
.build();
return matchingRepository.save(matching);
matchingRepository.save(matching);
member.setMatching(matching);
memberRepository.save(member);
return matching;
}

// 매칭 객체 업데이트하기 (전에 매칭을 했던 사람) - 목표, 카테고리 업데이트
Expand All @@ -81,15 +85,25 @@ public Matching updateMatching(Matching matching, MatchingInputDto reqDto){
}

// 내 매칭 삭제 (매칭 취소)
public Matching deleteMatching() {
public String deleteMyMatching() {
Member member = memberService.getCurrentMember();
if (member.getMatching() != null) {
matchingRepository.delete(member.getMatching());
member.setMatching(null);
memberRepository.save(member);
return member.getMatching();
return "기존 matching을 취소했습니다.";
}
return null;
return "취소할 Matching이 없습니다.";
}

// 매칭 삭제
public Member deleteMatching(Member member) {
if (member.getMatching() != null) {
matchingRepository.delete(member.getMatching());
member.setMatching(null);
memberRepository.save(member);
}
return member;
}

// 모든 카테고리의 매칭중인 사람들을 조회
Expand All @@ -104,7 +118,10 @@ public List<MatchingResDto> getPeopleMatching() {
}
public List<MatchingResDto> convertToMatchingResDtoList(List<Matching> matchingList) {
return matchingList.stream()
.map(MatchingResDto::new)
.map(matching -> {
Member member = memberRepository.findMemberByMatching(matching);
return new MatchingResDto(matching, member);
})
.collect(Collectors.toList());
}

Expand All @@ -116,6 +133,7 @@ public MatchedResultDto getMatchedResult(MatchingInputDto reqDto) {
}

// Matching으로 Mates 관계 맺기
@Transactional
public List<Matching> relateMatesByCategory(Category category, Matching myMatching) {
if (category == null)
throw new CategoryException(ErrorCode.CATEGORY_NOT_FOUND);
Expand All @@ -124,28 +142,30 @@ public List<Matching> relateMatesByCategory(Category category, Matching myMatchi
// matchingList에 2개 이상이어야 매칭 가능
if (matchingList.size() >= 2){
Matching mateMatching = matchingList.get(0);
Member mate = mateMatching.getMember();
Member mate = memberRepository.findMemberByMatching(mateMatching);
Member me = memberService.getCurrentMember();
// mate 탈퇴시 matching도 삭제되므로 유효한 멤버

List<Matching> mateList = new ArrayList<>(); // 메이트 리스트
mateList.add(mateMatching);
mateList.add(myMatching);
List<Member> memberList = new ArrayList<>();
memberList.add(mate);
memberList.add(me);

// Relation 생성, MemberRelationPair 생성
Relation pairRelation = relationMateService.createRelation();
memberRelationService.createMemberRelationPair(mateList, pairRelation);
memberRelationService.createMemberRelationPair(mateList, memberList, pairRelation);
// Matching 삭제
matchingRepository.deleteAll(matchingList);
//matchingRepository.deleteAll(matchingList);

// Member들의 isRelationed를 true로 업데이트 후 저장
mate.setIsRelationed(true);
me.setIsRelationed(true);
// 각 멤버에 Matching set 하기
mate.setMatching(mateMatching);
me.setMatching(myMatching);
memberRepository.save(mate);
memberRepository.save(me);

// 각 멤버에 Matching null로
memberRepository.save(deleteMatching(mate));
memberRepository.save(deleteMatching(me));
// 수정된 Matching 리스트 반환
return mateList;
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,22 +43,22 @@ public MemberRelation findLastMROfMember(Member member) {
}

// MR 두 개 만들고 저장, 두 Member의 isRelationed는 MatchingService에서 바꿔줌
public void createMemberRelationPair(List<Matching> matchingList, Relation relation){
public void createMemberRelationPair(List<Matching> matchingList, List<Member> memberList, Relation relation){
Matching matching1 = matchingList.get(0);
Matching matching2 = matchingList.get(1);

MemberRelation myMR = MemberRelation.builder()
.goal(matching1.getGoal())
.category(matching1.getCategory())
// message is nullable
.member(matching1.getMember())
.member(memberList.get(0))
.relation(relation)
.build();
MemberRelation mateMR = MemberRelation.builder()
.goal(matching2.getGoal())
.category(matching2.getCategory())
// message is nullable
.member(matching2.getMember())
.member(memberList.get(1))
.relation(relation)
.build();
mRRepository.save(myMR);
Expand Down