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

참여자 닉네임 생성, 모임의 참여자 조회 기능 생성 #96

Merged
merged 13 commits into from
Jul 24, 2024
36 changes: 36 additions & 0 deletions backend/src/main/java/mouda/backend/member/domain/Member.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package mouda.backend.member.domain;

import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import mouda.backend.moim.domain.Moim;

@Entity
@Getter
@NoArgsConstructor
public class Member {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String nickName;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nickname이 하나의 단어지 않나요? 카멜 케이스 적용하는 게 맞는 가 궁금하네요!


@ManyToOne(fetch = FetchType.LAZY)
private Moim moim;
Comment on lines +25 to +26
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

한 명의 사람이 하나의 모임에만 참여할 수 있는 구조인데,
수정할 필요가 있지 않을까요?!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아, 현재 로그인 기능이 구현되어있지 않아서
테니가 여러 개의 모임에 참여하여도 테니가 여러 명 생성되는 식으로 임시 개발한 거군요.

Copy link
Contributor

@ay-eonii ay-eonii Jul 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금 멤버가 계속 생성되는 상황에서 @OneToOne이 아니라 @ManyToOne을 사용한 이유가 후에 회원정보를 저장(로그인) 기능을 염두에 두었기 때문이 맞을까용?

아니네요 핫핫


@Builder
public Member(String nickName) {
this.nickName = nickName;
}

public void joinMoim(Moim moim) {
this.moim = moim;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package mouda.backend.member.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import mouda.backend.member.domain.Member;

public interface MemberRepository extends JpaRepository<Member, Long> {

@Query("SELECT m.nickName FROM Member m WHERE m.moim.id = :moimId")
List<String> findNickNamesByMoimId(long moimId);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mouda.backend.moim.dto.request;

public record MoimJoinRequest(
Long moimId
Long moimId,
String nickName
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
String nickName
String nickname

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

눈썰미 미쳐버렸다

) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List;

import lombok.Builder;
import mouda.backend.moim.domain.Moim;
Expand All @@ -15,10 +16,11 @@ public record MoimDetailsFindResponse(
int currentPeople,
int maxPeople,
String authorNickname,
String description
String description,
List<String> participants
) {

public static MoimDetailsFindResponse toResponse(Moim moim) {
public static MoimDetailsFindResponse toResponse(Moim moim, List<String> participants) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

모임 객체에 Participants가 있는 것이 아니라 따로 받아오도록 설계한 이유가 있을까요?

return MoimDetailsFindResponse.builder()
.title(moim.getTitle())
.date(moim.getDate())
Expand All @@ -28,6 +30,7 @@ public static MoimDetailsFindResponse toResponse(Moim moim) {
.maxPeople(moim.getMaxPeople())
.authorNickname(moim.getAuthorNickname())
.description(moim.getDescription())
.participants(participants)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import org.springframework.transaction.annotation.Transactional;

import lombok.RequiredArgsConstructor;
import mouda.backend.member.domain.Member;
import mouda.backend.member.repository.MemberRepository;
import mouda.backend.moim.domain.Moim;
import mouda.backend.moim.dto.request.MoimCreateRequest;
import mouda.backend.moim.dto.request.MoimJoinRequest;
Expand All @@ -24,6 +26,8 @@ public class MoimService {

private final MoimRepository moimRepository;

private final MemberRepository memberRepository;

public Moim createMoim(MoimCreateRequest moimCreateRequest) {
return moimRepository.save(moimCreateRequest.toEntity());
}
Expand All @@ -43,12 +47,18 @@ public MoimDetailsFindResponse findMoimDetails(long id) {
Moim moim = moimRepository.findById(id)
.orElseThrow(() -> new MoimException(HttpStatus.NOT_FOUND, MoimErrorMessage.NOT_FOUND));

return MoimDetailsFindResponse.toResponse(moim);
List<String> participants = memberRepository.findNickNamesByMoimId(id);

return MoimDetailsFindResponse.toResponse(moim, participants);
}

public void joinMoim(MoimJoinRequest moimJoinRequest) {
Member member = new Member(moimJoinRequest.nickName());

Moim moim = moimRepository.findById(moimJoinRequest.moimId())
.orElseThrow(() -> new MoimException(HttpStatus.NOT_FOUND, MoimErrorMessage.NOT_FOUND));
member.joinMoim(moim);
memberRepository.save(member);
moim.join();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

member.joinMoim(moim) 이 있고 moim.join() 도 있으니 어떤 게 모임 참여인지 이해하기 어려운 부분이 있는 것 같아요!
moim.join()을 참여 인원 증가 라는 의미를 담아 다른 네이밍을 하는 건 어떤가요??

이건 이전 작업이니 여유가 되면 같이 논의해봐용😊

}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package mouda.backend.member.repository;

import java.util.List;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import mouda.backend.member.domain.Member;
import mouda.backend.moim.domain.Moim;
import mouda.backend.moim.repository.MoimRepository;

@SpringBootTest
class MemberRepositoryTest {

@Autowired
private MemberRepository memberRepository;

@Autowired
private MoimRepository moimRepository;

@DisplayName("모임에 가입된 맴버의 이름을 반환한다.")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DisplayName이 참여자 수 검증하는 부분(Assertions)과 어울리지 않는 것 같아요!

저는 참여자의 수를 확인한다는 느낌을 받았습니당 어떻게 생각하세요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DisplayName을 수정해 보겠씁니다!

@Test
void findNickNamesByMoimId() {
Member member = new Member("tehah");
Moim moim = new Moim().builder()
.build();
Moim saveMoim = moimRepository.save(moim);
member.joinMoim(moim);
memberRepository.save(member);

List<String> participants = memberRepository.findNickNamesByMoimId(saveMoim.getId());

Assertions.assertThat(participants.size()).isEqualTo(1);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import java.util.List;
import java.util.Optional;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -87,7 +86,7 @@ void joinMoim() {
);
moimService.createMoim(moimCreateRequest);

MoimJoinRequest moimJoinRequest = new MoimJoinRequest(1L);
MoimJoinRequest moimJoinRequest = new MoimJoinRequest(1L, "호기");
moimService.joinMoim(moimJoinRequest);

Optional<Moim> moimOptional = moimRepository.findById(1L);
Expand Down
Loading