Skip to content

Commit f297a80

Browse files
committed
refactor: 기수 시스템을 모집일정에 통합함에 따라 멤버의 기수 코드 수정 후 코드 정리 && 회원가입 시 선택적으로 기수를 입력받고 값이 없을경우, 현재 모집일정의 기수를 기입하게 수정 (DASOMBE-16)
1 parent 744a6e9 commit f297a80

File tree

4 files changed

+52
-19
lines changed

4 files changed

+52
-19
lines changed

src/main/java/dmu/dasom/api/domain/member/dto/SignupRequestDto.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ public class SignupRequestDto {
2222
@Schema(description = "비밀번호", example = "password", minLength = 8, maxLength = 128)
2323
private String password;
2424

25+
@Length(max = 4)
26+
@Schema(description = "기수 (선택)", example = "34기", nullable = true)
27+
private String generation;
28+
2529
public Member toEntity(final String password, final String generation) {
2630
return Member.builder()
2731
.email(this.email)

src/main/java/dmu/dasom/api/domain/member/entity/Member.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ public class Member extends BaseEntity {
3434
private Role role = Role.ROLE_MEMBER;
3535

3636
// 기수 정보를 저장할 필드 추가
37-
@Column(name = "generation", length = 16, nullable = false)
37+
@Column(name = "generation", length = 4, nullable = false)
3838
private String generation;
3939
}

src/main/java/dmu/dasom/api/domain/member/service/MemberServiceImpl.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import dmu.dasom.api.domain.common.exception.CustomException;
44
import dmu.dasom.api.domain.common.exception.ErrorCode;
5+
import dmu.dasom.api.domain.recruit.service.RecruitService;
56
import dmu.dasom.api.domain.member.dto.SignupRequestDto;
67
import dmu.dasom.api.domain.member.entity.Member;
78
import dmu.dasom.api.domain.member.repository.MemberRepository;
89
import dmu.dasom.api.global.auth.dto.TokenBox;
910
import dmu.dasom.api.global.auth.jwt.JwtUtil;
1011
import dmu.dasom.api.global.auth.userdetails.UserDetailsImpl;
11-
import dmu.dasom.api.global.generation.service.GenerationService;
1212
import lombok.RequiredArgsConstructor;
1313
import org.springframework.security.core.GrantedAuthority;
1414
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -25,8 +25,8 @@ public class MemberServiceImpl implements MemberService {
2525

2626
private final BCryptPasswordEncoder encoder;
2727
private final MemberRepository memberRepository;
28+
private final RecruitService recruitService;
2829
private final JwtUtil jwtUtil;
29-
private final GenerationService generationService;
3030

3131
// 이메일로 사용자 조회
3232
@Override
@@ -47,10 +47,13 @@ public void signUp(final SignupRequestDto request) {
4747
// 이미 가입된 이메일인지 확인
4848
if (checkByEmail(request.getEmail()))
4949
throw new CustomException(ErrorCode.SIGNUP_FAILED);
50+
//기수는 선택적으로 가져오며, 없을 경우 신입 부붠 처리하여, 모집일정의 기수 사용
51+
String generation = (request.getGeneration() != null && !request.getGeneration().isEmpty())
52+
? request.getGeneration()
53+
: recruitService.getCurrentGeneration();
5054

51-
String currentGeneration = generationService.getCurrentGeneration();
52-
// 비밀번호 암호화 후 저장 + 기수도 현재 기수로 자동 기입
53-
memberRepository.save(request.toEntity(encoder.encode(request.getPassword()), currentGeneration));
55+
// 비밀번호 암호화 후 저장, 기수도 같이 기입
56+
memberRepository.save(request.toEntity(encoder.encode(request.getPassword()), generation));
5457
}
5558

5659
// 토큰 갱신

src/test/java/dmu/dasom/api/domain/member/MemberServiceTest.java

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
import dmu.dasom.api.domain.member.entity.Member;
77
import dmu.dasom.api.domain.member.repository.MemberRepository;
88
import dmu.dasom.api.domain.member.service.MemberServiceImpl;
9-
import dmu.dasom.api.global.generation.service.GenerationService;
9+
import dmu.dasom.api.domain.recruit.service.RecruitService;
1010
import org.junit.jupiter.api.DisplayName;
1111
import org.junit.jupiter.api.Test;
1212
import org.junit.jupiter.api.extension.ExtendWith;
1313
import org.mockito.InjectMocks;
1414
import org.mockito.Mock;
1515
import org.mockito.junit.jupiter.MockitoExtension;
1616
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
17+
import org.springframework.test.util.ReflectionTestUtils;
1718

1819
import java.util.Optional;
1920

@@ -30,7 +31,7 @@ class MemberServiceTest {
3031
MemberRepository memberRepository;
3132

3233
@Mock
33-
private GenerationService generationService;
34+
RecruitService recruitService; // RecruitService 주입
3435

3536
@InjectMocks
3637
private MemberServiceImpl memberService;
@@ -96,24 +97,49 @@ void checkByEmail_false() {
9697
assertFalse(result);
9798
}
9899

100+
99101
@Test
100-
@DisplayName("회원가입 - 성공")
101-
void signUp_success() {
102-
// given
103-
SignupRequestDto request = mock(SignupRequestDto.class);
104-
when(request.getEmail()).thenReturn("[email protected]");
105-
when(request.getPassword()).thenReturn("password");
102+
@DisplayName("회원가입 - 기수 선택값 전달 시 사용")
103+
void signUp_withGenerationProvided() {
104+
// 실제 DTO 객체 사용
105+
SignupRequestDto request = new SignupRequestDto();
106+
// Reflection 또는 생성자/Setter로 값 설정
107+
ReflectionTestUtils.setField(request, "email", "[email protected]");
108+
ReflectionTestUtils.setField(request, "password", "password");
109+
ReflectionTestUtils.setField(request, "generation", "35기");
110+
106111
when(encoder.encode("password")).thenReturn("encodedPassword");
107112
when(memberRepository.existsByEmail("[email protected]")).thenReturn(false);
108-
when(generationService.getCurrentGeneration()).thenReturn("34기");
109-
// when
113+
110114
memberService.signUp(request);
111115

112-
// then
113-
verify(memberRepository, times(1)).save(any());
114-
verify(generationService, times(1)).getCurrentGeneration();
116+
verify(memberRepository, times(1)).save(argThat(member ->
117+
"35기".equals(member.getGeneration())
118+
));
119+
verify(recruitService, never()).getCurrentGeneration();
120+
}
121+
122+
@Test
123+
@DisplayName("회원가입 - 기수 선택값 없으면 기본값 사용")
124+
void signUp_withGenerationDefault() {
125+
SignupRequestDto request = new SignupRequestDto();
126+
ReflectionTestUtils.setField(request, "email", "[email protected]");
127+
ReflectionTestUtils.setField(request, "password", "password");
128+
ReflectionTestUtils.setField(request, "generation", null);
129+
130+
when(encoder.encode("password")).thenReturn("encodedPassword");
131+
when(memberRepository.existsByEmail("[email protected]")).thenReturn(false);
132+
when(recruitService.getCurrentGeneration()).thenReturn("34기");
133+
134+
memberService.signUp(request);
135+
136+
verify(memberRepository, times(1)).save(argThat(member ->
137+
"34기".equals(member.getGeneration())
138+
));
139+
verify(recruitService, times(1)).getCurrentGeneration();
115140
}
116141

142+
117143
@Test
118144
@DisplayName("회원가입 - 실패")
119145
void signUp_fail() {

0 commit comments

Comments
 (0)