Skip to content

Commit

Permalink
Merge pull request #239 from PawWithU/feat/238-email-duplicated-modify
Browse files Browse the repository at this point in the history
[Feature] 봉사자, 모집자 이메일 중복 가능하도록 변경
  • Loading branch information
kyeong-hyeok authored Jun 6, 2024
2 parents 1cc50e3 + 1f01674 commit b0c5ab7
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ public ResponseEntity<Void> volunteerSignUp(@RequestBody @Valid VolunteerSignUpR
, description = "V1, 이름은 필수 입력 값입니다 \t\n V1, 휴대전화 번호는 필수 입력 값입니다. \t\n V1, 유효하지 않은 휴대전화 번호입니다. \t\n " +
"V1, 이메일 형식에 맞지 않습니다. \t\n V1, 이메일은 필수 입력 값입니다. \t\n V1 문의 받을 연락처는 100자 이하로 입력해 주세요. \t\n " +
"V1, 영문+숫자 10자 이상 또는 영문+숫자+특수기호 8자 이상을 입력해 주세요. \t\n V1, 모집자명은 필수 입력 값입니다. \t\n " +
"V1, 한줄 소개는 50자 이하로 입력해 주세요. \t\n A1, 이미 등록된 이메일입니다. \t\n F1, 파일이 존재하지 않습니다. \t\n F2, 파일 업로드에 실패했습니다."
"V1, 한줄 소개는 50자 이하로 입력해 주세요. \t\n A1, 이미 등록된 이메일입니다. \t\n F1, 파일이 존재하지 않습니다. \t\n F2, 파일 업로드에 실패했습니다. \t\n " +
"A9, 이미 등록된 모집자명입니다."
, content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
})
@PostMapping(value = "/intermediaries/sign-up", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE})
Expand All @@ -61,18 +62,32 @@ public ResponseEntity<Void> intermediarySignUp(@RequestPart @Valid IntermediaryS
return ResponseEntity.noContent().build();
}

@Operation(summary = "이메일 인증번호 전송", description = "입력한 이메일로 인증번호를 전송합니다.",
@Operation(summary = "봉사자 - 이메일 인증번호 전송", description = "입력한 이메일로 인증번호를 전송합니다.",
responses = {@ApiResponse(responseCode = "200", description = "이메일 인증번호 전송 성공")
, @ApiResponse(responseCode = "400"
, description = "V1, 이메일 형식에 맞지 않습니다. \t\n V1, 이메일은 필수 입력 값입니다. \t\n A1, 이미 존재하는 이메일입니다. \t\n A4, 이메일 인증 코드 전송을 실패했습니다."
, content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
})
@PostMapping(value = {"/volunteers/sign-up/email", "/intermediaries/sign-up/email"})
public ResponseEntity<EmailResponse> mailConfirm(@RequestBody @Valid EmailRequest request){
EmailResponse emailResponse = emailService.sendEmail(request);
@PostMapping("/volunteers/sign-up/email")
public ResponseEntity<EmailResponse> sendEmailToVolunteer(@RequestBody @Valid EmailRequest request){
EmailResponse emailResponse = emailService.sendEmailToVolunteer(request);
return ResponseEntity.ok(emailResponse);
}

@Operation(summary = "모집자 - 이메일 인증번호 전송", description = "입력한 이메일로 인증번호를 전송합니다.",
responses = {@ApiResponse(responseCode = "200", description = "이메일 인증번호 전송 성공")
, @ApiResponse(responseCode = "400"
, description = "V1, 이메일 형식에 맞지 않습니다. \t\n V1, 이메일은 필수 입력 값입니다. \t\n A1, 이미 존재하는 이메일입니다. \t\n A4, 이메일 인증 코드 전송을 실패했습니다."
, content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
})
@PostMapping("/intermediaries/sign-up/email")
public ResponseEntity<EmailResponse> sendEmailToIntermediary(@RequestBody @Valid EmailRequest request){
EmailResponse emailResponse = emailService.sendEmailToIntermediary(request);
return ResponseEntity.ok(emailResponse);
}



@Operation(summary = "이동봉사자 소셜 로그인 추가 회원가입", description = "소셜 로그인하는 이동봉사자 추가 회원가입을 합니다.",
security = { @SecurityRequirement(name = "bearer-key") },
responses = {@ApiResponse(responseCode = "204", description = "이동봉사자 소셜 로그인 추가 회원가입 성공")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,6 @@ public void volunteerSignUp(VolunteerSignUpRequest request) {
if (volunteerRepository.existsByEmail(request.email())) {
throw new BadRequestException(ALREADY_EXIST_EMAIL);
}
if (intermediaryRepository.existsByEmail(request.email())) {
throw new BadRequestException(ALREADY_EXIST_EMAIL);
}
if (volunteerRepository.existsByNickname(request.nickname())) {
throw new BadRequestException(ALREADY_EXIST_NICKNAME);
}
Expand All @@ -92,8 +89,8 @@ public void intermediarySignUp(IntermediarySignUpRequest request, MultipartFile
if (intermediaryRepository.existsByEmail(request.email())) {
throw new BadRequestException(ALREADY_EXIST_EMAIL);
}
if (volunteerRepository.existsByEmail(request.email())) {
throw new BadRequestException(ALREADY_EXIST_EMAIL);
if (intermediaryRepository.existsByName(request.name())) {
throw new BadRequestException(ALREADY_EXIST_NAME);
}
String profileImage = fileService.uploadFile(profileFile, "intermediary/profileImage");
if (profileImage == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,20 +81,33 @@ private MimeMessage createEmailForm(String email) throws MessagingException, Uns
/**
* 메일 전송
*/
public EmailResponse sendEmail(EmailRequest request) throws BadRequestException {
public EmailResponse sendEmailToVolunteer(EmailRequest request) throws BadRequestException {
// 이메일 중복 검사
if (volunteerRepository.existsByEmail(request.email())) {
throw new BadRequestException(ALREADY_EXIST_EMAIL);
}
try {
// 메일전송에 필요한 정보 설정
MimeMessage emailForm = createEmailForm(request.email());
emailSender.send(emailForm);
return new EmailResponse(authNum);
} catch (UnsupportedEncodingException | MessagingException e){
throw new BadRequestException(EMAIL_SEND_ERROR);
}

}

public EmailResponse sendEmailToIntermediary(EmailRequest request) {
// 이메일 중복 검사
if (intermediaryRepository.existsByEmail(request.email())) {
throw new BadRequestException(ALREADY_EXIST_EMAIL);
}
try{
try {
// 메일전송에 필요한 정보 설정
MimeMessage emailForm = createEmailForm(request.email());
emailSender.send(emailForm);
return new EmailResponse(authNum);
}catch (UnsupportedEncodingException | MessagingException e){
} catch (UnsupportedEncodingException | MessagingException e){
throw new BadRequestException(EMAIL_SEND_ERROR);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public void updateSocialVolunteer(String name, String phone, String nickname, Vo
this.role = role;
this.profileImageNum = profileImageNum;
this.isOptionAgr = isOptionAgr;
this.notification = true;
}

public void updateNameAndPhone(String name, String phone) {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/pawwithu/connectdog/error/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public enum ErrorCode {
NOT_ALLOWED_MEMBER("A6", "해당 요청에 대한 권한이 없습니다."),
NOT_AUTHENTICATED_REQUEST("A7", "유효한 JWT 토큰이 없습니다."),
ALREADY_EXIST_PHONE("A8", "이미 등록된 전화번호입니다."),
ALREADY_EXIST_NAME("A9", "이미 등록된 모집자명입니다."),


VOLUNTEER_NOT_FOUND("M1", "해당 이동봉사자를 찾을 수 없습니다."), // Member -> M (이동봉사자, 이동봉사 중개 통일)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,21 +50,39 @@ void setUp() {
.build();
}
@Test
void 이메일_인증번호_전송() throws Exception{
void 봉사자_이메일_인증번호_전송() throws Exception{
//given
EmailRequest request = new EmailRequest("email@naver.com");
EmailResponse response = new EmailResponse("authCode123");

//when
when(emailService.sendEmail(any())).thenReturn(response);
when(emailService.sendEmailToVolunteer(any())).thenReturn(response);
ResultActions result = mockMvc.perform(
post("/volunteers/sign-up/email")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request))
);
//then
result.andExpect(status().isOk());
verify(emailService, times(1)).sendEmail(any());
verify(emailService, times(1)).sendEmailToVolunteer(any());
}

@Test
void 모집자_이메일_인증번호_전송() throws Exception{
//given
EmailRequest request = new EmailRequest("email@naver.com");
EmailResponse response = new EmailResponse("authCode123");

//when
when(emailService.sendEmailToIntermediary(any())).thenReturn(response);
ResultActions result = mockMvc.perform(
post("/intermediaries/sign-up/email")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request))
);
//then
result.andExpect(status().isOk());
verify(emailService, times(1)).sendEmailToIntermediary(any());
}


Expand Down

0 comments on commit b0c5ab7

Please sign in to comment.