diff --git a/build.gradle b/build.gradle index d303dc8..f63cc7f 100644 --- a/build.gradle +++ b/build.gradle @@ -51,8 +51,6 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-aop' - implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' - implementation 'com.fasterxml.jackson.core:jackson-databind' // lombok compileOnly 'org.projectlombok:lombok' diff --git a/src/main/java/com/moim/backend/domain/space/response/group/GroupMyParticipateResponse.java b/src/main/java/com/moim/backend/domain/space/response/group/GroupMyParticipateResponse.java index 02e21f8..b451b31 100644 --- a/src/main/java/com/moim/backend/domain/space/response/group/GroupMyParticipateResponse.java +++ b/src/main/java/com/moim/backend/domain/space/response/group/GroupMyParticipateResponse.java @@ -22,11 +22,12 @@ public class GroupMyParticipateResponse { private String groupDate; private Integer groupParticipates; private String confirmPlace; + private Boolean isAdmin; private List bestPlaceNames; private List participantNames; public static GroupMyParticipateResponse response( - Groups group, String groupAdminName, List bestPlaceNames, List participantNames + Groups group, String groupAdminName, boolean isAdmin, List bestPlaceNames, List participantNames ) { return GroupMyParticipateResponse.builder() .groupId(group.getGroupId()) @@ -37,6 +38,7 @@ public static GroupMyParticipateResponse response( .orElse("none")) .groupParticipates(group.getParticipations().size()) .confirmPlace(group.getPlace()) + .isAdmin(isAdmin) .bestPlaceNames(bestPlaceNames) .participantNames(participantNames) .build(); 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 7f2e5fc..3840cf6 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 @@ -14,23 +14,26 @@ import com.moim.backend.domain.space.request.service.GroupNameUpdateServiceRequest; import com.moim.backend.domain.space.request.service.GroupParticipateServiceRequest; import com.moim.backend.domain.space.request.service.GroupParticipateUpdateServiceRequest; -import com.moim.backend.domain.space.response.*; +import com.moim.backend.domain.space.response.MiddlePoint; +import com.moim.backend.domain.space.response.NaverMapListDto; +import com.moim.backend.domain.space.response.NicknameValidationResponse; +import com.moim.backend.domain.space.response.PlaceRouteResponse; import com.moim.backend.domain.space.response.group.*; import com.moim.backend.domain.subway.repository.SubwayRepository; -import com.moim.backend.global.dto.BestRegion; import com.moim.backend.domain.user.entity.Users; import com.moim.backend.domain.user.repository.UserRepository; import com.moim.backend.global.aspect.TimeCheck; import com.moim.backend.global.common.CacheName; import com.moim.backend.global.common.Result; import com.moim.backend.global.common.exception.CustomException; +import com.moim.backend.global.dto.BestRegion; import com.moim.backend.global.util.DistanceCalculator; import com.moim.backend.global.util.RedisDao; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; -import org.springframework.http.*; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; @@ -42,7 +45,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.StringTokenizer; import java.util.function.Function; import java.util.stream.Collectors; @@ -232,22 +234,25 @@ public List getMyParticipate(Users user) { List groups = groupRepository.findByGroupsFetch(user.getUserId()); return groups.stream() - .map(GroupService::toMyParticiPateResponse) + .map(group -> toMyParticiPateResponse(group, user)) .toList(); } - private static GroupMyParticipateResponse toMyParticiPateResponse(Groups group) { + private static GroupMyParticipateResponse toMyParticiPateResponse(Groups group, Users user) { + Participation admin = getGroupAdmin(group); return GroupMyParticipateResponse.response( group, - getGroupAdminName(group), + admin.getUserName(), + admin.getUserId().equals(user.getUserId()), group.getBestPlaces().stream().map(BestPlace::getPlaceName).toList(), group.getParticipations().stream().map(Participation::getUserName).toList()); } - private static String getGroupAdminName(Groups group) { + private static Participation getGroupAdmin(Groups group) { return group.getParticipations().stream() .filter(participation -> participation.getUserId().equals(group.getAdminId())) - .map(Participation::getUserName).findFirst().orElseThrow( + .findFirst() + .orElseThrow( () -> new CustomException(NOT_FOUND_PARTICIPATE) ); } @@ -400,11 +405,12 @@ private static void validateParticipationMyInfo(Users user, Participation myPart // method - private static String getRegionName(Participation participation) { - validateLocationName(participation.getLocationName()); - StringTokenizer st = new StringTokenizer(participation.getLocationName()); - return String.format("%s %s", st.nextToken(), st.nextToken()); + String[] locationName = participation.getLocationName().split(" "); + if (locationName.length < 2) { + return participation.getLocationName(); + } + return String.format("%s %s", locationName[0], locationName[1]); } private static Function toPlaceEntity(Double x, Double y, String local) { 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 b2b180e..302de24 100644 --- a/src/test/java/com/moim/backend/docs/space/GroupControllerDocsTest.java +++ b/src/test/java/com/moim/backend/docs/space/GroupControllerDocsTest.java @@ -1,7 +1,6 @@ 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; @@ -11,20 +10,17 @@ 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; import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.List; 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; @@ -465,6 +461,7 @@ void getMyParticipate() throws Exception { .groupDate("2023-07-15") .groupParticipates(3) .confirmPlace("none") + .isAdmin(true) .bestPlaceNames(List.of("종로5가역", "종로3가역", "동대문역")) .participantNames(List.of("양파쿵야", "주먹밥쿵야", "샐러리쿵야")) .build(); @@ -476,6 +473,7 @@ void getMyParticipate() throws Exception { .groupDate("2023-07-28") .groupParticipates(3) .confirmPlace("교대역") + .isAdmin(false) .bestPlaceNames(List.of("강남역", "교대역", "역삼역")) .participantNames(List.of("양파쿵야", "주먹밥쿵야", "샐러리쿵야")) .build(); @@ -510,6 +508,8 @@ void getMyParticipate() throws Exception { .description("그룹 참여자 수 / Integer"), fieldWithPath("data[].confirmPlace").type(STRING) .description("그룹 확정 장소 / 미확정 : 'none' "), + fieldWithPath("data[].isAdmin").type(BOOLEAN) + .description("해당 그룹 모임장 여부"), fieldWithPath("data[].participantNames[]").type(ARRAY) .description("그룹 참여자 이름 리스트"), fieldWithPath("data[].bestPlaceNames[]").type(ARRAY)