Skip to content

Commit

Permalink
닉네임 중복 검사 시에 스웨거에 명시될 수 있도록 수정 (#338)
Browse files Browse the repository at this point in the history
betgws authored Jan 9, 2025
2 parents 1ff3b1f + 3b2c11c commit eedf53f
Showing 6 changed files with 172 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.drinkeg.drinkeg.domain.member.controller;

import com.drinkeg.drinkeg.domain.member.dto.*;
import com.drinkeg.drinkeg.domain.member.dto.loginDTO.NameCheckResponse;
import com.drinkeg.drinkeg.global.apipayLoad.ApiResponse;
import com.drinkeg.drinkeg.global.security.jwt.TokenService;
import com.drinkeg.drinkeg.domain.member.dto.loginDTO.commonDTO.PrincipalDetail;
@@ -60,7 +61,7 @@ public ApiResponse<MemberInfoResponse> getMemberInfo(@AuthenticationPrincipal Pr

@PostMapping("/member/{nickname}")
@Operation(summary = "마이페이지내에 닉네임 중복 검사 ", description = "중복된 닉네임이면 False, 사용 가능한 닉네임이면 True를 반환합니다.")
public ApiResponse<?> checkNickname(@AuthenticationPrincipal PrincipalDetail principalDetail, @PathVariable String nickname){
public ApiResponse<NameCheckResponse> checkNickname(@AuthenticationPrincipal PrincipalDetail principalDetail, @PathVariable String nickname){
return ApiResponse.onSuccess(memberService.isNicknameAvailable(nickname));
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.drinkeg.drinkeg.domain.member.dto.loginDTO;


import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class NameCheckResponse {
boolean canUse;

public static NameCheckResponse create(boolean canUse){

return NameCheckResponse.builder()
.canUse(canUse)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@
import com.drinkeg.drinkeg.domain.member.domain.Member;
import com.drinkeg.drinkeg.domain.member.dto.MemberInfoResponse;
import com.drinkeg.drinkeg.domain.member.dto.MemberUpdateRequest;
import com.drinkeg.drinkeg.domain.member.dto.loginDTO.NameCheckResponse;
import com.drinkeg.drinkeg.domain.member.dto.loginDTO.commonDTO.PrincipalDetail;
import org.springframework.web.multipart.MultipartFile;

@@ -16,7 +17,7 @@ public interface MemberService {

public MemberInfoResponse showMemberInfo(String username);

public boolean isNicknameAvailable(String nickname);
public NameCheckResponse isNicknameAvailable(String nickname);

public void updateMemberInfo(PrincipalDetail principalDetail, MemberUpdateRequest memberUpdateRequest, MultipartFile multipartFile);
}
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@

import com.drinkeg.drinkeg.domain.member.dto.MemberInfoResponse;
import com.drinkeg.drinkeg.domain.member.dto.MemberUpdateRequest;
import com.drinkeg.drinkeg.domain.member.dto.loginDTO.NameCheckResponse;
import com.drinkeg.drinkeg.domain.tastingNote.event.RemoveTastingNoteMemberEvent;
import com.drinkeg.drinkeg.global.apipayLoad.code.status.ErrorStatus;
import com.drinkeg.drinkeg.domain.member.domain.Member;
@@ -42,51 +43,52 @@ public Member loadMemberByPrincipalDetail(PrincipalDetail principalDetail) {
-> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND));
}

@Override
@Transactional
public void deleteMemberByUsername(String username){
eventPublisher.publishEvent(new RemoveTastingNoteMemberEvent(username));
memberRepository.deleteByUsername(username);
}
@Override
@Transactional
public void deleteMemberByUsername(String username){
eventPublisher.publishEvent(new RemoveTastingNoteMemberEvent(username));
memberRepository.deleteByUsername(username);
}

@Override
public MemberInfoResponse showMemberInfo(String username){
@Override
public MemberInfoResponse showMemberInfo(String username){

Member member = memberRepository.findMemberByUsername(username);
Member member = memberRepository.findMemberByUsername(username);



return MemberInfoResponse.create(member);
}
return MemberInfoResponse.create(member);
}

@Override
public boolean isNicknameAvailable(String nickname){
@Override
public NameCheckResponse isNicknameAvailable(String nickname){

return !memberRepository.existsByName(nickname);
}

@Override
@Transactional
public void updateMemberInfo(PrincipalDetail principalDetail, MemberUpdateRequest memberUpdateRequest, MultipartFile multipartFile){
return NameCheckResponse.create(!memberRepository.existsByName(nickname));
}

@Override
@Transactional
public void updateMemberInfo(PrincipalDetail principalDetail, MemberUpdateRequest memberUpdateRequest, MultipartFile multipartFile){


Member member = loadMemberByPrincipalDetail(principalDetail);
Member member = loadMemberByPrincipalDetail(principalDetail);

if (multipartFile != null ) {
if (multipartFile != null ) {

String profileImage = storageService.uploadFile(multipartFile, StoragePathName.MEMBER_PROFILE);
String profileImage = storageService.uploadFile(multipartFile, StoragePathName.MEMBER_PROFILE);

if (profileImage != null) {
member.updateImageUrl(profileImage);
if (profileImage != null) {
member.updateImageUrl(profileImage);
}
}
if (memberUpdateRequest.getCity() != null) {
member.updateRegion(memberUpdateRequest.getCity());
}
}
if (memberUpdateRequest.getCity() != null) {
member.updateRegion(memberUpdateRequest.getCity());
}

if (memberUpdateRequest.getUsername() != null) {
member.updateName(memberUpdateRequest.getUsername());
}
if (memberUpdateRequest.getUsername() != null) {
member.updateName(memberUpdateRequest.getUsername());
}

}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.drinkeg.drinkeg.domain.member.repository;


import com.drinkeg.drinkeg.IntegrationTestSupport;
import com.drinkeg.drinkeg.domain.member.domain.Member;
import com.drinkeg.drinkeg.domain.member.enums.Role;
import com.drinkeg.drinkeg.domain.member.repostitory.MemberRepository;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Optional;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

public class MemberRepositoryTest extends IntegrationTestSupport {

@Autowired
MemberRepository memberRepository;

@DisplayName("username을 통해서 존재하는 멤버를 조회한다.")
@Test
void findByUsernameTest(){

//given
Member member1 = memberRepository.save(createMember("user1","윤따" ));
Member member2 = memberRepository.save(createMember("user2","찐따"));

//when
Optional<Member> optionalMember = memberRepository.findByUsername("user2");
Member foundMember = optionalMember.get();

//then
assertThat(foundMember.getId()).isEqualTo(member2.getId());

}

@DisplayName("존재하지 않는 username으로 조회했을 경우 empty 값을 반환한다.")
@Test
void findByNoExistUsernameTest(){

//given
Member member1 = memberRepository.save(createMember("user1","윤따" ));
Member member2 = memberRepository.save(createMember("user2","찐따"));

//when
Optional<Member> optionalMember = memberRepository.findByUsername("user3");

//then
assertThat(optionalMember).isEmpty();

}

@DisplayName("존재하는 username으로 조회 했을 때 true를 반환한다.")
@Test
void existByusernameTest(){

//given
Member member1 = memberRepository.save(createMember("user1","윤따" ));

//when
Boolean result = memberRepository.existsByUsername("user1");

//then
assertThat(result).isTrue();

}

@DisplayName("존재하지 않는 username으로 조회 했을 때 false를 반환한다.")
@Test
void notExistByusernameTest(){

//given
Member member1 = memberRepository.save(createMember("user1","윤따" ));
//when
Boolean result = memberRepository.existsByUsername("user2");
//then
assertThat(result).isFalse();

}

@DisplayName("존재하는 username으로 멤버를 삭제한다")
@Test
void deleteByUsername_existingUserTest() {

// given
Member member = memberRepository.save(createMember("user1", "윤따"));
assertThat(memberRepository.existsByUsername("user1")).isTrue();

// when
memberRepository.deleteByUsername("user1");

// then
assertThat(memberRepository.existsByUsername("user1")).isFalse();
}





private Member createMember(String username,String name) {
return Member.builder()
.username(username)
.name(name)
.role(Role.ROLE_USER)
.isFirst(false)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.drinkeg.drinkeg.domain.member.service;

public class MemberServiceTest {
}

0 comments on commit eedf53f

Please sign in to comment.