diff --git a/src/main/java/com/moim/backend/domain/space/controller/GroupController.java b/src/main/java/com/moim/backend/domain/space/controller/GroupController.java index b2637be..c12a6f1 100644 --- a/src/main/java/com/moim/backend/domain/space/controller/GroupController.java +++ b/src/main/java/com/moim/backend/domain/space/controller/GroupController.java @@ -46,7 +46,7 @@ public CustomResponseEntity updateGroupName( @RequestBody @Valid GroupNameUpdateRequest request, @Login Users user ) { return CustomResponseEntity.success( - groupService.updateGroupName(groupId,request.toServiceRequest(), user) + groupService.updateGroupName(groupId, request.toServiceRequest(), user) ); } @@ -116,4 +116,13 @@ public CustomResponseEntity> keywordCentralizedMeetingS ) { return CustomResponseEntity.success(groupService.keywordCentralizedMeetingSpot(x, y, local, keyword)); } + + // 닉네임 유효성 체크 + @GetMapping("/nickname") + public CustomResponseEntity checkNicknameValidation( + @RequestParam Long groupId, + @RequestParam String nickname + ) { + return CustomResponseEntity.success(groupService.checkNicknameValidation(groupId, nickname)); + } } diff --git a/src/main/java/com/moim/backend/domain/space/repository/ParticipationRepository.java b/src/main/java/com/moim/backend/domain/space/repository/ParticipationRepository.java index fa99ce4..f51bb44 100644 --- a/src/main/java/com/moim/backend/domain/space/repository/ParticipationRepository.java +++ b/src/main/java/com/moim/backend/domain/space/repository/ParticipationRepository.java @@ -3,13 +3,11 @@ import com.moim.backend.domain.space.entity.Groups; import com.moim.backend.domain.space.entity.Participation; import com.moim.backend.domain.space.response.MiddlePoint; -import jakarta.validation.constraints.NotNull; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import java.util.Collection; import java.util.List; @Repository @@ -25,5 +23,5 @@ public interface ParticipationRepository extends JpaRepository findAllByGroupGroupIdAndUserIdIn(Long group_groupId, List userId); List findAllByGroup(Groups group); - + List findAllByGroupAndUserName(Groups group, String name); } diff --git a/src/main/java/com/moim/backend/domain/space/response/NicknameValidationResponse.java b/src/main/java/com/moim/backend/domain/space/response/NicknameValidationResponse.java new file mode 100644 index 0000000..9f18cf4 --- /dev/null +++ b/src/main/java/com/moim/backend/domain/space/response/NicknameValidationResponse.java @@ -0,0 +1,12 @@ +package com.moim.backend.domain.space.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class NicknameValidationResponse { + boolean isDuplicated; +} diff --git a/src/main/java/com/moim/backend/domain/space/service/GroupService.java b/src/main/java/com/moim/backend/domain/space/service/GroupService.java index 8065495..72a0d17 100644 --- a/src/main/java/com/moim/backend/domain/space/service/GroupService.java +++ b/src/main/java/com/moim/backend/domain/space/service/GroupService.java @@ -281,6 +281,13 @@ public GroupDetailResponse readParticipateGroupByRegion(Long groupId) { return GroupDetailResponse.response(group, admin, regions); } + public NicknameValidationResponse checkNicknameValidation(Long groupId, String nickname) { + Groups group = getGroup(groupId); + List participationList = participationRepository.findAllByGroupAndUserName(group, nickname); + boolean isDuplicated = (participationList.size() > 0) ? true : false; + return new NicknameValidationResponse(isDuplicated); + } + private void toRegionsResponse(List regions, Participation participation) { // 그룹화 지역 이름 생성 String regionName = getRegionName(participation); diff --git a/src/test/java/com/moim/backend/docs/space/GroupControllerDocsTest.java b/src/test/java/com/moim/backend/docs/space/GroupControllerDocsTest.java index c29009e..46c669e 100644 --- a/src/test/java/com/moim/backend/docs/space/GroupControllerDocsTest.java +++ b/src/test/java/com/moim/backend/docs/space/GroupControllerDocsTest.java @@ -1,6 +1,7 @@ package com.moim.backend.docs.space; import com.epages.restdocs.apispec.ResourceSnippetParameters; +import com.fasterxml.jackson.core.JsonProcessingException; import com.moim.backend.RestDocsSupport; import com.moim.backend.domain.space.controller.GroupController; import com.moim.backend.domain.space.request.controller.GroupCreateRequest; @@ -10,6 +11,7 @@ import com.moim.backend.domain.space.response.*; import com.moim.backend.domain.space.response.group.*; import com.moim.backend.domain.space.service.GroupService; +import com.moim.backend.domain.user.response.UserLoginResponse; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders; @@ -22,6 +24,7 @@ import static com.epages.restdocs.apispec.Schema.schema; import static com.moim.backend.domain.space.entity.TransportationType.PERSONAL; import static com.moim.backend.domain.space.entity.TransportationType.PUBLIC; +import static com.moim.backend.domain.user.config.Platform.NAVER; import static org.mockito.ArgumentMatchers.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -793,4 +796,36 @@ void updateGroupName() throws Exception { .andExpect(status().isOk()) .andDo(document); } + + @DisplayName("닉네임 유효성 체크") + @Test + void checkNicknameValidation() throws Exception { + // given + given(groupService.checkNicknameValidation(1L, "중복될일없는 특이한 닉네임")) + .willReturn(new NicknameValidationResponse(false)); + + ResourceSnippetParameters parameters = ResourceSnippetParameters.builder() + .tag("닉네임 유효성 체크 API") + .summary("닉네임 유효성 체크 API") + .queryParameters( + parameterWithName("groupId").description("그룹 Id"), + parameterWithName("nickname").description("닉네임")) + .responseFields( + fieldWithPath("code").type(NUMBER).description("상태 코드"), + fieldWithPath("message").type(STRING).description("상태 메세지"), + fieldWithPath("data.duplicated").type(BOOLEAN).description("닉네임 중복 여부")) + .responseSchema(schema("NicknameValidationResponse")) + .build(); + RestDocumentationResultHandler document = documentHandler("check-nickname-validation", prettyPrint(), prettyPrint(), parameters); + + // when // then + MockHttpServletRequestBuilder httpRequest = RestDocumentationRequestBuilders.get("/group/nickname") + .param("groupId", "1") + .param("nickname", "중복될일없는 특이한 닉네임"); + + mockMvc.perform(httpRequest) + .andDo(print()) + .andExpect(status().isOk()) + .andDo(document); + } }