From e3f313b09a95b18c0bd7e21de9509ead23124fe5 Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Tue, 30 Nov 2021 13:29:00 +0900 Subject: [PATCH 01/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Response=20DTO=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../response/GroupBaseResponse.java | 14 ++++++-------- .../response/GroupReadAllResponse.java | 19 +++++++++++++++++++ .../response/GroupReadAllResponses.java | 14 ++++++++++++++ .../controller/response/GroupResponse.java | 7 ------- .../controller/response/GroupResponses.java | 11 ----------- 5 files changed, 39 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponse.java create mode 100644 src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponses.java delete mode 100644 src/main/java/com/postsquad/scoup/web/group/controller/response/GroupResponse.java delete mode 100644 src/main/java/com/postsquad/scoup/web/group/controller/response/GroupResponses.java diff --git a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupBaseResponse.java b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupBaseResponse.java index 9a7797b9..3779ad4e 100644 --- a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupBaseResponse.java +++ b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupBaseResponse.java @@ -1,19 +1,17 @@ package com.postsquad.scoup.web.group.controller.response; -import com.postsquad.scoup.web.image.controller.ImageResponse; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +@NoArgsConstructor +@AllArgsConstructor +@Data public class GroupBaseResponse { private Long id; - // TODO: 필요한지 확인 필요 - private ImageResponse image; - - // TODO: 필요한지 확인 필요 - private long memberCount; - private String name; private String description; - } diff --git a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponse.java b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponse.java new file mode 100644 index 00000000..202509ab --- /dev/null +++ b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponse.java @@ -0,0 +1,19 @@ +package com.postsquad.scoup.web.group.controller.response; + +import com.postsquad.scoup.web.group.domain.Group; +import lombok.*; + +@EqualsAndHashCode(callSuper = false) +@AllArgsConstructor +@Data +public class GroupReadAllResponse extends GroupBaseResponse { + + @Builder + protected GroupReadAllResponse(Long id, String name, String description) { + super(id, name, description); + } + + public static GroupReadAllResponse from(Group group) { + return new GroupReadAllResponse(group.getId(), group.getName(), group.getDescription()); + } +} diff --git a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponses.java b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponses.java new file mode 100644 index 00000000..a62da1e1 --- /dev/null +++ b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponses.java @@ -0,0 +1,14 @@ +package com.postsquad.scoup.web.group.controller.response; + +import lombok.*; + +import java.util.List; + +@NoArgsConstructor +@AllArgsConstructor(staticName = "from") +@Builder +@Data +public class GroupReadAllResponses { + + private List groupReadAllResponse; +} diff --git a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupResponse.java b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupResponse.java deleted file mode 100644 index 80b13dd2..00000000 --- a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupResponse.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.postsquad.scoup.web.group.controller.response; - -import lombok.Getter; - -@Getter -public class GroupResponse extends GroupBaseResponse { -} diff --git a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupResponses.java b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupResponses.java deleted file mode 100644 index 9af9a304..00000000 --- a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupResponses.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.postsquad.scoup.web.group.controller.response; - -import lombok.Getter; - -import java.util.List; - -@Getter -public class GroupResponses { - - private List groupResponses; -} From 42b2180c7628a5f4a886f19aac90aa31b9add87e Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Tue, 30 Nov 2021 13:33:10 +0900 Subject: [PATCH 02/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Group=EC=97=90=20?= =?UTF-8?q?=EA=B0=80=EC=9E=85=EB=90=9C=20User=EB=A5=BC=20=EB=8B=A4?= =?UTF-8?q?=EB=8C=80=EB=8B=A4=EB=A1=9C=20=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../scoup/web/group/domain/Group.java | 24 +++++++++++-------- .../postsquad/scoup/web/user/domain/User.java | 4 ++++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/postsquad/scoup/web/group/domain/Group.java b/src/main/java/com/postsquad/scoup/web/group/domain/Group.java index 1c580e25..143969b2 100644 --- a/src/main/java/com/postsquad/scoup/web/group/domain/Group.java +++ b/src/main/java/com/postsquad/scoup/web/group/domain/Group.java @@ -2,21 +2,12 @@ import com.postsquad.scoup.web.common.BaseEntity; import com.postsquad.scoup.web.group.controller.request.GroupModificationRequest; -import com.postsquad.scoup.web.schedule.domain.ConfirmedSchedule; import com.postsquad.scoup.web.schedule.domain.Schedule; -import com.postsquad.scoup.web.schedule.domain.ScheduleCandidate; import com.postsquad.scoup.web.user.domain.User; import lombok.*; -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; -import org.hibernate.annotations.LazyCollection; -import org.hibernate.annotations.LazyCollectionOption; import javax.persistence.*; -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; +import java.util.*; @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @@ -39,6 +30,14 @@ public class Group extends BaseEntity { @OneToMany(mappedBy = "group", cascade = CascadeType.ALL) private final List schedules = new ArrayList<>(); + @ManyToMany + @JoinTable( + name = "group_member", + joinColumns = @JoinColumn(name = "group_id"), + inverseJoinColumns = @JoinColumn(name = "user_id") + ) + private final List members = new ArrayList<>(); + protected Group(String name, String description, User owner) { this.name = name; this.description = description; @@ -72,4 +71,9 @@ public void addSchedule(Schedule schedule) { public void addSchedules(List schedules) { this.schedules.addAll(schedules); } + + public void addMember(User user) { + user.getJoinedGroups().add(this); + this.members.add(user); + } } diff --git a/src/main/java/com/postsquad/scoup/web/user/domain/User.java b/src/main/java/com/postsquad/scoup/web/user/domain/User.java index 6cb62876..0b8aea78 100644 --- a/src/main/java/com/postsquad/scoup/web/user/domain/User.java +++ b/src/main/java/com/postsquad/scoup/web/user/domain/User.java @@ -2,6 +2,7 @@ import com.postsquad.scoup.web.auth.OAuthType; import com.postsquad.scoup.web.common.BaseEntity; +import com.postsquad.scoup.web.group.domain.Group; import lombok.*; import javax.persistence.*; @@ -36,6 +37,9 @@ public class User extends BaseEntity { @CollectionTable(name = "oauth_user", joinColumns = @JoinColumn(name = "user_id")) private List oAuthUsers = new ArrayList<>(); + @ManyToMany(mappedBy = "members") + private List joinedGroups = new ArrayList<>(); + protected User(String nickname, String username, String email, String avatarUrl, String password, List oAuthUsers) { this.nickname = nickname; this.username = username; From 154c1b0a3c0a79ae4ac773d63d89e70029c50ced Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Tue, 30 Nov 2021 13:36:39 +0900 Subject: [PATCH 03/14] =?UTF-8?q?test:=20=F0=9F=92=8D=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=9D=B8=EC=88=98?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../scoup/web/group/GroupAcceptanceTest.java | 37 +++++++++++++++++++ .../group/provider/GroupReadAllProvider.java | 29 +++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/test/java/com/postsquad/scoup/web/group/provider/GroupReadAllProvider.java diff --git a/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java b/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java index 0356e578..3ce820bd 100644 --- a/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java +++ b/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java @@ -8,6 +8,7 @@ import com.postsquad.scoup.web.group.controller.request.GroupModificationRequest; import com.postsquad.scoup.web.group.controller.response.GroupReadOneResponse; import com.postsquad.scoup.web.group.controller.response.GroupValidationResponse; +import com.postsquad.scoup.web.group.controller.response.GroupReadAllResponses; import com.postsquad.scoup.web.group.domain.Group; import com.postsquad.scoup.web.group.provider.*; import io.restassured.RestAssured; @@ -413,4 +414,40 @@ void leaveGroup() { // TODO: id로 조회하여 검증 } + + @ParameterizedTest + @ArgumentsSource(GroupReadAllProvider.class) + @DisplayName("사용자가 가입한 모든 그룹을 조회할 수 있다.") + void readGroup(String description, GroupReadAllResponses expectedGroupReadAllResponses) { + // given + Group group = Group.builder().name("name").description("").owner(testUser).schedules(new ArrayList<>()).build(); + Group group2 = Group.builder().name("group2").description("group2").owner(testUser).schedules(new ArrayList<>()).build(); + group.addMember(testUser); + group2.addMember(testUser); + testEntityManager.persist(group); + testEntityManager.persist(group2); + + String path = "/groups"; + RequestSpecification givenRequest = RestAssured.given(this.spec) + .baseUri(BASE_URL) + .port(port) + .basePath("/api") + .contentType(ContentType.JSON) + .header("Accept-Language", "en-US") + .header("Authorization", TEST_TOKEN); + // when + Response actualResponse = givenRequest.when() + .log().all() + .get(path); + + // then + actualResponse.then() + .log().all() + .statusCode(HttpStatus.OK.value()); + then(actualResponse.as(GroupReadAllResponses.class)) + .as("그룹 조회 : %s", description) + .usingRecursiveComparison() + .ignoringFields("groupReadAllResponse.id") + .isEqualTo(expectedGroupReadAllResponses); + } } diff --git a/src/test/java/com/postsquad/scoup/web/group/provider/GroupReadAllProvider.java b/src/test/java/com/postsquad/scoup/web/group/provider/GroupReadAllProvider.java new file mode 100644 index 00000000..76ff7974 --- /dev/null +++ b/src/test/java/com/postsquad/scoup/web/group/provider/GroupReadAllProvider.java @@ -0,0 +1,29 @@ +package com.postsquad.scoup.web.group.provider; + +import com.postsquad.scoup.web.group.controller.response.GroupReadAllResponse; +import com.postsquad.scoup.web.group.controller.response.GroupReadAllResponses; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ArgumentsProvider; + +import java.util.List; +import java.util.stream.Stream; + +public class GroupReadAllProvider implements ArgumentsProvider { + + @Override + public Stream provideArguments(ExtensionContext context) throws Exception { + return Stream.of( + Arguments.of( + "성공", + GroupReadAllResponses.builder() + .groupReadAllResponse( + List.of( + GroupReadAllResponse.builder().name("name").description("").build(), + GroupReadAllResponse.builder().name("group2").description("group2").build()) + ) + .build() + ) + ); + } +} From 51d7b5a62385de0b110d2778901477f79e73d4ed Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Tue, 30 Nov 2021 13:37:49 +0900 Subject: [PATCH 04/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=20=EB=8F=84=EB=A9=94=EC=9D=B8=EC=9D=84=20DTO=EB=A1=9C=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91=ED=95=B4=EC=A3=BC=EB=8A=94=20=EB=A7=A4?= =?UTF-8?q?=ED=8D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../java/com/postsquad/scoup/web/group/mapper/GroupMapper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/postsquad/scoup/web/group/mapper/GroupMapper.java b/src/main/java/com/postsquad/scoup/web/group/mapper/GroupMapper.java index 7dd1d433..d31e9616 100644 --- a/src/main/java/com/postsquad/scoup/web/group/mapper/GroupMapper.java +++ b/src/main/java/com/postsquad/scoup/web/group/mapper/GroupMapper.java @@ -1,6 +1,7 @@ package com.postsquad.scoup.web.group.mapper; import com.postsquad.scoup.web.group.controller.request.GroupCreationRequest; +import com.postsquad.scoup.web.group.controller.response.GroupReadAllResponse; import com.postsquad.scoup.web.group.domain.Group; import com.postsquad.scoup.web.user.domain.User; import org.mapstruct.Mapper; @@ -14,4 +15,6 @@ public interface GroupMapper { @Mapping(target = "owner", source = "owner") Group map(GroupCreationRequest groupCreationRequest, User owner); + + GroupReadAllResponse map(Group group); } From 40e65f0a791203f4b1d6baac64df15a84915e58a Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Tue, 30 Nov 2021 13:38:36 +0900 Subject: [PATCH 05/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=EB=90=9C=20=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B0=80=20?= =?UTF-8?q?=EA=B0=80=EC=9E=85=EB=90=9C=20=EA=B7=B8=EB=A3=B9=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=EC=9D=84=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../web/group/controller/GroupController.java | 6 ++++++ .../scoup/web/group/service/GroupService.java | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/main/java/com/postsquad/scoup/web/group/controller/GroupController.java b/src/main/java/com/postsquad/scoup/web/group/controller/GroupController.java index dbe6c1f0..dac12dfe 100644 --- a/src/main/java/com/postsquad/scoup/web/group/controller/GroupController.java +++ b/src/main/java/com/postsquad/scoup/web/group/controller/GroupController.java @@ -4,6 +4,7 @@ import com.postsquad.scoup.web.error.controller.response.ErrorResponse; import com.postsquad.scoup.web.group.controller.request.GroupCreationRequest; import com.postsquad.scoup.web.group.controller.request.GroupModificationRequest; +import com.postsquad.scoup.web.group.controller.response.GroupReadAllResponses; import com.postsquad.scoup.web.group.controller.request.GroupValidationRequest; import com.postsquad.scoup.web.group.controller.response.GroupReadOneResponse; import com.postsquad.scoup.web.group.controller.response.GroupValidationResponse; @@ -71,4 +72,9 @@ public GroupValidationResponse validateGroupName(@Valid GroupValidationRequest g @ResponseStatus(HttpStatus.NO_CONTENT) public void leaveGroup(@PathVariable long groupId) { } + + @GetMapping + public GroupReadAllResponses readAll(@LoggedInUser User user) { + return groupService.readAllByUser(user); + } } diff --git a/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java b/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java index c1d8666e..e58789e3 100644 --- a/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java +++ b/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java @@ -3,21 +3,27 @@ import com.postsquad.scoup.web.common.DefaultPostResponse; import com.postsquad.scoup.web.group.controller.request.GroupCreationRequest; import com.postsquad.scoup.web.group.controller.request.GroupModificationRequest; +import com.postsquad.scoup.web.group.controller.response.GroupReadAllResponses; import com.postsquad.scoup.web.group.domain.Group; import com.postsquad.scoup.web.group.exception.GroupNameAlreadyExistException; import com.postsquad.scoup.web.group.exception.GroupNotFoundException; import com.postsquad.scoup.web.group.mapper.GroupMapper; import com.postsquad.scoup.web.group.repository.GroupRepository; import com.postsquad.scoup.web.signin.exception.UnauthorizedUserException; +import com.postsquad.scoup.web.signin.exception.UserNotFoundException; import com.postsquad.scoup.web.user.domain.User; +import com.postsquad.scoup.web.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.stream.Collectors; + @RequiredArgsConstructor @Service public class GroupService { private final GroupRepository groupRepository; + private final UserRepository userRepository; public DefaultPostResponse create(GroupCreationRequest groupCreationRequest, User user) { @@ -42,4 +48,15 @@ public Long update(Long groupId, GroupModificationRequest groupModificationReque } return groupRepository.save(group.update(groupModificationRequest)).getId(); } + + public GroupReadAllResponses readAllByUser(User user) { + User loggedInUser = userRepository.findById(user.getId()).orElseThrow(() -> new UserNotFoundException(user.getId())); + return GroupReadAllResponses + .builder() + .groupReadAllResponse( + loggedInUser.getJoinedGroups().stream() + .map(GroupMapper.INSTANCE::map) + .collect(Collectors.toList())) + .build(); + } } From 4ecb5e79e89ff7a5f796c0072a51579f1e21f3ef Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Tue, 30 Nov 2021 13:42:34 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=EC=97=90=20=EA=B4=80?= =?UTF-8?q?=ED=95=9C=20=EC=8A=A4=EB=8B=88=ED=8E=AB=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../scoup/web/group/GroupAcceptanceTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java b/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java index 3ce820bd..7efe7b89 100644 --- a/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java +++ b/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java @@ -54,6 +54,21 @@ public class GroupAcceptanceTest extends AcceptanceTestBase { .description("이미지") ); + private static final Snippet GROUP_READ_ALL_RESPONSE_FIELDS = responseFields( + fieldWithPath("group_read_all_response[]") + .type(JsonFieldType.ARRAY) + .description("그룹 목록"), + fieldWithPath("group_read_all_response[].id") + .type(JsonFieldType.NUMBER) + .description("그룹 id"), + fieldWithPath("group_read_all_response[].name") + .type(JsonFieldType.STRING) + .description("그룹 이름"), + fieldWithPath("group_read_all_response[].description") + .type(JsonFieldType.STRING) + .description("그룹 설명") + ); + private static final Snippet GROUP_CREATION_REQUEST_FIELDS = requestFields( fieldWithPathAndConstraints("name", GroupCreationRequest.class) .type(JsonFieldType.STRING) @@ -437,6 +452,11 @@ void readGroup(String description, GroupReadAllResponses expectedGroupReadAllRes .header("Authorization", TEST_TOKEN); // when Response actualResponse = givenRequest.when() + .accept(ContentType.JSON) + .filter(document( + DEFAULT_RESTDOCS_PATH, + GROUP_READ_ALL_RESPONSE_FIELDS + )) .log().all() .get(path); From c3a49bfa13f1c6e1df91e64b80b57746daaab40f Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Sun, 5 Dec 2021 18:08:01 +0900 Subject: [PATCH 07/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=A9=A4=EB=B2=84=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=EC=8B=9C=20=EC=A4=91=EB=B3=B5=EC=9D=B4=20=EC=95=88=20=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- src/main/java/com/postsquad/scoup/web/group/domain/Group.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/postsquad/scoup/web/group/domain/Group.java b/src/main/java/com/postsquad/scoup/web/group/domain/Group.java index 143969b2..b2263fc1 100644 --- a/src/main/java/com/postsquad/scoup/web/group/domain/Group.java +++ b/src/main/java/com/postsquad/scoup/web/group/domain/Group.java @@ -73,7 +73,9 @@ public void addSchedules(List schedules) { } public void addMember(User user) { - user.getJoinedGroups().add(this); this.members.add(user); + if (!user.getJoinedGroups().contains(this)) { + user.getJoinedGroups().add(this); + } } } From 5cef5bd51b2888839d9c08b08016bcaf9ced0b0f Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Sun, 5 Dec 2021 18:14:46 +0900 Subject: [PATCH 08/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=EC=97=90=20findById=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=98=EA=B3=A0=20=EA=B7=B8=EB=A3=B9=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=EC=97=90=EC=84=9C=20=EC=9D=B4=EB=A5=BC=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../scoup/web/group/service/GroupService.java | 11 ++++++----- .../postsquad/scoup/web/user/service/UserService.java | 5 +++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java b/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java index e58789e3..8af702b7 100644 --- a/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java +++ b/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java @@ -10,9 +10,8 @@ import com.postsquad.scoup.web.group.mapper.GroupMapper; import com.postsquad.scoup.web.group.repository.GroupRepository; import com.postsquad.scoup.web.signin.exception.UnauthorizedUserException; -import com.postsquad.scoup.web.signin.exception.UserNotFoundException; import com.postsquad.scoup.web.user.domain.User; -import com.postsquad.scoup.web.user.repository.UserRepository; +import com.postsquad.scoup.web.user.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -23,7 +22,7 @@ public class GroupService { private final GroupRepository groupRepository; - private final UserRepository userRepository; + private final UserService userService; public DefaultPostResponse create(GroupCreationRequest groupCreationRequest, User user) { @@ -31,7 +30,9 @@ public DefaultPostResponse create(GroupCreationRequest groupCreationRequest, Use throw new GroupNameAlreadyExistException(groupCreationRequest.getName()); } - Group group = GroupMapper.INSTANCE.map(groupCreationRequest, user); + User owner = userService.findById(user.getId()); + Group group = GroupMapper.INSTANCE.map(groupCreationRequest, owner); + group.addMember(owner); return DefaultPostResponse.builder().id(groupRepository.save(group).getId()).build(); } @@ -50,7 +51,7 @@ public Long update(Long groupId, GroupModificationRequest groupModificationReque } public GroupReadAllResponses readAllByUser(User user) { - User loggedInUser = userRepository.findById(user.getId()).orElseThrow(() -> new UserNotFoundException(user.getId())); + User loggedInUser = userService.findById(user.getId()); return GroupReadAllResponses .builder() .groupReadAllResponse( diff --git a/src/main/java/com/postsquad/scoup/web/user/service/UserService.java b/src/main/java/com/postsquad/scoup/web/user/service/UserService.java index cd3b4e76..dbacc411 100644 --- a/src/main/java/com/postsquad/scoup/web/user/service/UserService.java +++ b/src/main/java/com/postsquad/scoup/web/user/service/UserService.java @@ -1,6 +1,7 @@ package com.postsquad.scoup.web.user.service; import com.postsquad.scoup.web.common.DefaultPostResponse; +import com.postsquad.scoup.web.signin.exception.UserNotFoundException; import com.postsquad.scoup.web.user.controller.request.EmailValidationRequest; import com.postsquad.scoup.web.user.controller.request.NicknameValidationRequest; import com.postsquad.scoup.web.user.controller.request.SignUpRequest; @@ -51,4 +52,8 @@ public NicknameValidationResponse validateNickname(NicknameValidationRequest nic } return NicknameValidationResponse.valueOf(false); } + + public User findById(Long id) { + return userRepository.findById(id).orElseThrow(() -> new UserNotFoundException(id)); + } } From 1831ba0f0bb5c0d2cc7df8ae64c2ed979a7d5068 Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Sun, 5 Dec 2021 18:15:27 +0900 Subject: [PATCH 09/14] =?UTF-8?q?test:=20=F0=9F=92=8D=20findAndConsume=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../scoup/web/user/UserAcceptanceTest.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/postsquad/scoup/web/user/UserAcceptanceTest.java b/src/test/java/com/postsquad/scoup/web/user/UserAcceptanceTest.java index af05d446..3790d889 100644 --- a/src/test/java/com/postsquad/scoup/web/user/UserAcceptanceTest.java +++ b/src/test/java/com/postsquad/scoup/web/user/UserAcceptanceTest.java @@ -1,6 +1,7 @@ package com.postsquad.scoup.web.user; import com.postsquad.scoup.web.AcceptanceTestBase; +import com.postsquad.scoup.web.TestEntityManager; import com.postsquad.scoup.web.auth.OAuthType; import com.postsquad.scoup.web.common.DefaultPostResponse; import com.postsquad.scoup.web.error.controller.response.ErrorResponse; @@ -111,6 +112,9 @@ class UserAcceptanceTest extends AcceptanceTestBase { @Autowired UserRepository userRepository; + @Autowired + TestEntityManager testEntityManager; + @BeforeEach void setUp() { userRepository.save(User.builder() @@ -173,11 +177,14 @@ private void signUp(String description, SignUpRequest givenSocialSignUpRequest, // then actualResponse.then() .statusCode(HttpStatus.CREATED.value()); - then(userRepository.findById(actualResponse.body().as(DefaultPostResponse.class).getId()).orElse(null)) - .as("회원가입 결과 : %s", description) - .usingRecursiveComparison() - .ignoringFields(ignoringFieldsForResponseWithId) - .isEqualTo(expectedUser); + testEntityManager.findAndConsume(User.class, actualResponse.body().as(DefaultPostResponse.class).getId(), + actualUser -> { + then(actualUser) + .as("회원가입 결과 : %s", description) + .usingRecursiveComparison() + .ignoringFields(ignoringFieldsForResponseWithId) + .isEqualTo(expectedUser); + }); } @ParameterizedTest From 5741d32995ae99503f41c27b35a9d81e81133dda Mon Sep 17 00:00:00 2001 From: Taeun Kim Date: Sun, 5 Dec 2021 18:16:19 +0900 Subject: [PATCH 10/14] =?UTF-8?q?test:=20=F0=9F=92=8D=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1,=20=EC=88=98=EC=A0=95=20=EC=8B=9C=20?= =?UTF-8?q?=EA=B7=B8=EB=A3=B9=EC=9D=98=20members=EB=A5=BC=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../com/postsquad/scoup/web/group/GroupAcceptanceTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java b/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java index 7efe7b89..2f9254e3 100644 --- a/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java +++ b/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java @@ -205,11 +205,12 @@ void createGroup(String description, GroupCreationRequest givenGroupCreationRequ .as("그룹 생성: %s", description) .usingRecursiveComparison() .ignoringFields(ignoringFieldsForResponseWithId) - .ignoringFields("owner") + .ignoringFields("owner", "members") .isEqualTo(expectedGroup); then(actualGroup.getOwner()) .usingRecursiveComparison() .ignoringFields(ignoringFieldsForResponseWithId) + .ignoringFields("joinedGroups") .isEqualTo(expectedGroup.getOwner()); } ); @@ -288,6 +289,7 @@ void validateGroupCreationRequest(String description, GroupCreationRequest given void modifyGroup(String description, Long givenGroupId, GroupModificationRequest givenGroupModificationRequest, Group expectedGroup) { // given Group group = Group.builder().name("name").description("").owner(testUser).schedules(new ArrayList<>()).build(); + group.addMember(testUser); testEntityManager.persist(group); String path = "/groups/{groupId}"; RequestSpecification givenRequest = RestAssured.given(this.spec) @@ -319,7 +321,7 @@ void modifyGroup(String description, Long givenGroupId, GroupModificationRequest .as("그룹 수정: %s", description) .usingRecursiveComparison() .ignoringFields(ignoringFieldsForResponseWithId) - .ignoringFields("owner") + .ignoringFields("owner", "members") .isEqualTo(expectedGroup) ); } From 276b737f10dae35ed0745fdc0564d802566d0acc Mon Sep 17 00:00:00 2001 From: Sally Oh Date: Sat, 18 Dec 2021 08:42:16 +0900 Subject: [PATCH 11/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=ED=95=84=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EB=8B=A8=EC=88=98=EC=97=90=EC=84=9C=20=EB=B3=B5?= =?UTF-8?q?=EC=88=98=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/Sc0up/scoup-backend/pull/231#discussion_r763989921 ✅ Closes: #226 --- .../web/group/controller/response/GroupReadAllResponses.java | 2 +- .../scoup/web/group/provider/GroupReadAllProvider.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponses.java b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponses.java index a62da1e1..11a8220a 100644 --- a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponses.java +++ b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponses.java @@ -10,5 +10,5 @@ @Data public class GroupReadAllResponses { - private List groupReadAllResponse; + private List groupReadAllResponses; } diff --git a/src/test/java/com/postsquad/scoup/web/group/provider/GroupReadAllProvider.java b/src/test/java/com/postsquad/scoup/web/group/provider/GroupReadAllProvider.java index 76ff7974..b544cda0 100644 --- a/src/test/java/com/postsquad/scoup/web/group/provider/GroupReadAllProvider.java +++ b/src/test/java/com/postsquad/scoup/web/group/provider/GroupReadAllProvider.java @@ -17,7 +17,7 @@ public Stream provideArguments(ExtensionContext context) th Arguments.of( "성공", GroupReadAllResponses.builder() - .groupReadAllResponse( + .groupReadAllResponses( List.of( GroupReadAllResponse.builder().name("name").description("").build(), GroupReadAllResponse.builder().name("group2").description("group2").build()) From af96630e5349f7eb45b5b14d134e8205c24c32a6 Mon Sep 17 00:00:00 2001 From: Sally Oh Date: Sat, 18 Dec 2021 08:46:24 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=B9=8C=EB=8D=94=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/Sc0up/scoup-backend/pull/231#discussion_r763857851 ✅ Closes: #226 --- .../web/group/controller/response/GroupReadAllResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponse.java b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponse.java index 202509ab..b1483fdd 100644 --- a/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponse.java +++ b/src/main/java/com/postsquad/scoup/web/group/controller/response/GroupReadAllResponse.java @@ -14,6 +14,6 @@ protected GroupReadAllResponse(Long id, String name, String description) { } public static GroupReadAllResponse from(Group group) { - return new GroupReadAllResponse(group.getId(), group.getName(), group.getDescription()); + return GroupReadAllResponse.builder().id(group.getId()).name(group.getName()).description(group.getDescription()).build(); } } From 25bd5a07bd1738d26160038fe8937905dc425f5c Mon Sep 17 00:00:00 2001 From: Sally Oh Date: Sat, 18 Dec 2021 15:10:45 +0900 Subject: [PATCH 13/14] =?UTF-8?q?fix:=20=F0=9F=90=9B=20=EB=B9=8C=EB=8D=94?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../com/postsquad/scoup/web/group/service/GroupService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java b/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java index 8af702b7..6b9a5e61 100644 --- a/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java +++ b/src/main/java/com/postsquad/scoup/web/group/service/GroupService.java @@ -54,7 +54,7 @@ public GroupReadAllResponses readAllByUser(User user) { User loggedInUser = userService.findById(user.getId()); return GroupReadAllResponses .builder() - .groupReadAllResponse( + .groupReadAllResponses( loggedInUser.getJoinedGroups().stream() .map(GroupMapper.INSTANCE::map) .collect(Collectors.toList())) From 99ced893e575a12201004acdfda0c4f9abdfd335 Mon Sep 17 00:00:00 2001 From: Sally Oh Date: Sat, 18 Dec 2021 15:18:35 +0900 Subject: [PATCH 14/14] =?UTF-8?q?test:=20=F0=9F=92=8D=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=97=90=20=EC=93=B0=EC=9D=B4=EB=8A=94=20response?= =?UTF-8?q?=EB=A5=BC=20responses=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Closes: #226 --- .../postsquad/scoup/web/group/GroupAcceptanceTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java b/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java index 2f9254e3..45ca7412 100644 --- a/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java +++ b/src/test/java/com/postsquad/scoup/web/group/GroupAcceptanceTest.java @@ -55,16 +55,16 @@ public class GroupAcceptanceTest extends AcceptanceTestBase { ); private static final Snippet GROUP_READ_ALL_RESPONSE_FIELDS = responseFields( - fieldWithPath("group_read_all_response[]") + fieldWithPath("group_read_all_responses[]") .type(JsonFieldType.ARRAY) .description("그룹 목록"), - fieldWithPath("group_read_all_response[].id") + fieldWithPath("group_read_all_responses[].id") .type(JsonFieldType.NUMBER) .description("그룹 id"), - fieldWithPath("group_read_all_response[].name") + fieldWithPath("group_read_all_responses[].name") .type(JsonFieldType.STRING) .description("그룹 이름"), - fieldWithPath("group_read_all_response[].description") + fieldWithPath("group_read_all_responses[].description") .type(JsonFieldType.STRING) .description("그룹 설명") ); @@ -469,7 +469,7 @@ void readGroup(String description, GroupReadAllResponses expectedGroupReadAllRes then(actualResponse.as(GroupReadAllResponses.class)) .as("그룹 조회 : %s", description) .usingRecursiveComparison() - .ignoringFields("groupReadAllResponse.id") + .ignoringFields("groupReadAllResponses.id") .isEqualTo(expectedGroupReadAllResponses); } }