From a26e05ccea5d201ff220b364508d7eecf01bdaaf Mon Sep 17 00:00:00 2001 From: silkair Date: Fri, 17 Jan 2025 19:14:43 +0900 Subject: [PATCH 1/7] refactor(change group status) change req parameter userId to Token --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b8e45af..76f9e11 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# backend -도서 성취도 기록 서비스 backend 저장소입니다. +# backend +도서 성취도 기록 서비스 backend 저장소입니다. From b8f4a3dba416036d3712dbca7d3cd28dbecc8eda Mon Sep 17 00:00:00 2001 From: silkair Date: Fri, 17 Jan 2025 19:26:53 +0900 Subject: [PATCH 2/7] refactor : use privat for check validate --- .../domain/group/controller/GroupController.java | 9 +++++++-- .../group/dto/req/GroupStatusUpdateRequestDto.java | 2 -- .../backend/domain/group/service/GroupService.java | 2 +- .../domain/group/service/Impl/GroupServiceImpl.java | 12 +++++++++--- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java b/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java index 9a98fb0..2d912c8 100644 --- a/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java +++ b/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java @@ -11,6 +11,8 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -67,9 +69,12 @@ public ResponseEntity> getMembers(@PathVariable Lon , description = "그룹 상태를 변경합니다. 그룹장만이 변경할 수 있습니다.") @PatchMapping("/{groupId}") public ResponseEntity updateGroupStatus( - @PathVariable Long groupId,@RequestBody @Valid GroupStatusUpdateRequestDto requestDto + @PathVariable Long groupId, + @RequestBody @Valid GroupStatusUpdateRequestDto requestDto, + @AuthenticationPrincipal UserDetails userDetails ) { - GroupStatusUpdateResponseDto responseDto = groupService.updateGroupStatus(groupId, requestDto, requestDto.getUserId()); + String userEmail = userDetails.getUsername(); + GroupStatusUpdateResponseDto responseDto = groupService.updateGroupStatus(groupId, requestDto, userEmail); return ResponseEntity.ok(responseDto); } diff --git a/src/main/java/com/bookmile/backend/domain/group/dto/req/GroupStatusUpdateRequestDto.java b/src/main/java/com/bookmile/backend/domain/group/dto/req/GroupStatusUpdateRequestDto.java index 27aef2b..2e8617c 100644 --- a/src/main/java/com/bookmile/backend/domain/group/dto/req/GroupStatusUpdateRequestDto.java +++ b/src/main/java/com/bookmile/backend/domain/group/dto/req/GroupStatusUpdateRequestDto.java @@ -13,6 +13,4 @@ public class GroupStatusUpdateRequestDto { @Schema(description = "그룹 상태 (RECRUITING, IN_PROGRESS, COMPLETED)", example = "IN_PROGRESS") @NotNull(message = "변경할 상태는 필수입니다.") private GroupStatus status; - - private Long userId; } diff --git a/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java b/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java index e7b6938..e20d46d 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java @@ -14,7 +14,7 @@ public interface GroupService { User getUserById(Long userId); // User 정보 조회 GroupCreateResponseDto createGroup(GroupCreateRequestDto requestDto, User user); - GroupStatusUpdateResponseDto updateGroupStatus(Long groupId, GroupStatusUpdateRequestDto requestDto, Long userId); + GroupStatusUpdateResponseDto updateGroupStatus(Long groupId, GroupStatusUpdateRequestDto requestDto, String userEmail); List getRecruitingGroups(String isbn13); List getInProgressGroups(String isbn13); diff --git a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java index 9a29755..81d950d 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java @@ -20,6 +20,7 @@ import com.bookmile.backend.domain.userGroup.entity.UserGroup; import com.bookmile.backend.domain.userGroup.entity.Role; import com.bookmile.backend.domain.userGroup.repository.UserGroupRepository; +import com.bookmile.backend.global.common.StatusCode; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.bookmile.backend.global.exception.CustomException; @@ -76,16 +77,17 @@ public GroupCreateResponseDto createGroup(GroupCreateRequestDto requestDto, User @Override @Transactional - public GroupStatusUpdateResponseDto updateGroupStatus(Long groupId, GroupStatusUpdateRequestDto requestDto, Long userId) { + public GroupStatusUpdateResponseDto updateGroupStatus(Long groupId, GroupStatusUpdateRequestDto requestDto, String userEmail) { + User user = validateUserByEmail(userEmail); + Group group = findGroupById(groupId); - UserGroup userGroup = findUserGroupById(userId, groupId); + UserGroup userGroup = findUserGroupById(user.getId(), groupId); validateGroupMaster(userGroup); updateGroupStatus(group, requestDto.getStatus()); return GroupStatusUpdateResponseDto.toDto(group); } - private List findGroupsByStatus(String isbn13, GroupStatus status, boolean isRecent) { List groups; if (isRecent) { @@ -145,6 +147,10 @@ private Group findGroupById(Long groupId) { .orElseThrow(() -> new CustomException(GROUP_NOT_FOUND)); } + private User validateUserByEmail(String email) { + return userRepository.findByEmail(email) + .orElseThrow(() -> new CustomException(StatusCode.USER_NOT_FOUND)); + } private UserGroup findUserGroupById(Long userId, Long groupId) { return userGroupRepository.findByUserIdAndGroupId(userId, groupId) .orElseThrow(() -> new CustomException(NOT_MEMBER)); From 3ada0e8c6f33f06ce0890532add35c37d729d805 Mon Sep 17 00:00:00 2001 From: silkair Date: Fri, 17 Jan 2025 19:44:49 +0900 Subject: [PATCH 3/7] refactor : use token for userId in create Group --- .../backend/domain/group/controller/GroupController.java | 7 +++---- .../backend/domain/group/service/GroupService.java | 3 +-- .../domain/group/service/Impl/GroupServiceImpl.java | 4 +++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java b/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java index 2d912c8..c7bbee0 100644 --- a/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java +++ b/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java @@ -35,13 +35,12 @@ public class GroupController { @PostMapping public ResponseEntity> createGroup( @RequestBody @Valid GroupCreateRequestDto requestDto, - @RequestParam Long userId // userId를 직접 받음 + @AuthenticationPrincipal UserDetails userDetails ) { - // User 정보를 UserRepository에서 조회 - User user = groupService.getUserById(userId); + String userEmail = userDetails.getUsername(); // 그룹 생성 요청 처리 - GroupCreateResponseDto responseDto = groupService.createGroup(requestDto, user); + GroupCreateResponseDto responseDto = groupService.createGroup(requestDto, userEmail); return ResponseEntity.status(GROUP_CREATE.getStatus()) .body(CommonResponse.from(GROUP_CREATE.getMessage(), responseDto)); } diff --git a/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java b/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java index e20d46d..c06242c 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java @@ -1,7 +1,6 @@ package com.bookmile.backend.domain.group.service; import com.bookmile.backend.domain.group.dto.req.GroupCreateRequestDto; -import com.bookmile.backend.domain.group.dto.req.GroupSearchRequestDto; import com.bookmile.backend.domain.group.dto.req.GroupStatusUpdateRequestDto; import com.bookmile.backend.domain.group.dto.res.GroupCreateResponseDto; import com.bookmile.backend.domain.group.dto.res.GroupDetailResponseDto; @@ -13,7 +12,7 @@ public interface GroupService { User getUserById(Long userId); // User 정보 조회 - GroupCreateResponseDto createGroup(GroupCreateRequestDto requestDto, User user); + GroupCreateResponseDto createGroup(GroupCreateRequestDto requestDto, String userEmail); GroupStatusUpdateResponseDto updateGroupStatus(Long groupId, GroupStatusUpdateRequestDto requestDto, String userEmail); List getRecruitingGroups(String isbn13); diff --git a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java index 81d950d..3a1e5ee 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java @@ -49,7 +49,9 @@ public User getUserById(Long userId) { @Override @Transactional - public GroupCreateResponseDto createGroup(GroupCreateRequestDto requestDto, User user) { + public GroupCreateResponseDto createGroup(GroupCreateRequestDto requestDto, String userEmail) { + User user = validateUserByEmail(userEmail); + Book book = bookService.saveBook(requestDto.getIsbn13()); Template template = checkTemplate(requestDto); From 535ed4544aa749adbddbafc0955ffc2997e65624 Mon Sep 17 00:00:00 2001 From: silkair Date: Sat, 18 Jan 2025 13:37:32 +0900 Subject: [PATCH 4/7] refactor(group join) : change req paramemter userId to token --- .../group/controller/GroupController.java | 9 +++++---- .../domain/group/service/GroupJoinService.java | 2 +- .../service/Impl/GroupJoinServiceImpl.java | 18 +++++++++++++----- .../group/service/Impl/GroupServiceImpl.java | 3 ++- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java b/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java index c7bbee0..03b2c11 100644 --- a/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java +++ b/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java @@ -48,12 +48,13 @@ public ResponseEntity> createGroup( @Operation(summary = "그룹 참여하기", description = "이미 존재하는 그룹에 참여합니다. 참여한 유저는 자동으로 MEMBER 역할을 부여받으며 비공개 그룹의 경우 비밀번호가 필요합니다.
" + "공개 그룹의 경우 비밀번호를 null 값이 아닌 공백(그냥 띄어쓰기 한 칸)으로 입력해주세요") @PostMapping("/{groupId}") - public ResponseEntity> joinGroup( + public ResponseEntity> joinGroup( @RequestBody @Valid GroupJoinRequestDto requestDto, - @RequestHeader("user_id") Long userId + @AuthenticationPrincipal UserDetails userDetails ) { - groupJoinService.joinGroup(userId, requestDto); - return ResponseEntity.ok(CommonResponse.from(GROUP_JOIN.getMessage(), null)); + String userEmail = userDetails.getUsername(); + GroupJoinResponseDto responseDto = groupJoinService.joinGroup(userEmail, requestDto); + return ResponseEntity.ok(CommonResponse.from(GROUP_JOIN.getMessage(), responseDto)); } @Operation(summary = "그룹 멤버 조회" diff --git a/src/main/java/com/bookmile/backend/domain/group/service/GroupJoinService.java b/src/main/java/com/bookmile/backend/domain/group/service/GroupJoinService.java index 10169e4..109ee09 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/GroupJoinService.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/GroupJoinService.java @@ -4,5 +4,5 @@ import com.bookmile.backend.domain.group.dto.res.GroupJoinResponseDto; public interface GroupJoinService { - GroupJoinResponseDto joinGroup(Long userId, GroupJoinRequestDto groupJoinRequestDto); + GroupJoinResponseDto joinGroup(String userEmail, GroupJoinRequestDto requestDto); } diff --git a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupJoinServiceImpl.java b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupJoinServiceImpl.java index 6fe0200..44b6c12 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupJoinServiceImpl.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupJoinServiceImpl.java @@ -6,6 +6,7 @@ import com.bookmile.backend.domain.group.repository.GroupRepository; import com.bookmile.backend.domain.group.service.GroupJoinService; import com.bookmile.backend.domain.user.entity.User; +import com.bookmile.backend.domain.user.repository.UserRepository; import com.bookmile.backend.domain.userGroup.entity.Role; import com.bookmile.backend.domain.userGroup.entity.UserGroup; import com.bookmile.backend.domain.userGroup.repository.UserGroupRepository; @@ -20,18 +21,20 @@ public class GroupJoinServiceImpl implements GroupJoinService { private final GroupRepository groupRepository; private final UserGroupRepository userGroupRepository; + private final UserRepository userRepository; @Override - public GroupJoinResponseDto joinGroup(Long userId, GroupJoinRequestDto groupJoinRequestDto) { + public GroupJoinResponseDto joinGroup(String userEmail, GroupJoinRequestDto requestDto) { + User user = validateUserByEmail(userEmail); - Group group = findGroup(groupJoinRequestDto.getGroupId()); + Group group = findGroup(requestDto.getGroupId()); - checkUserAlreadyJoined(userId, group.getId()); + checkUserAlreadyJoined(user.getId(), group.getId()); checkGroupCapacity(group); - checkGroupPassword(group, groupJoinRequestDto.getPassword()); + checkGroupPassword(group, requestDto.getPassword()); UserGroup userGroup = UserGroup.builder() - .user(new User(userId)) + .user(user) .group(group) .role(Role.MEMBER) .build(); @@ -64,4 +67,9 @@ private void checkGroupPassword(Group group, String password) { throw new CustomException(StatusCode.INVALID_GROUP_PASSWORD); } } + + private User validateUserByEmail(String email) { + return userRepository.findByEmail(email) + .orElseThrow(() -> new CustomException(StatusCode.USER_NOT_FOUND)); + } } diff --git a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java index 3a1e5ee..bd60af2 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java @@ -150,9 +150,10 @@ private Group findGroupById(Long groupId) { } private User validateUserByEmail(String email) { - return userRepository.findByEmail(email) + return userRepository.findByEmail(email) .orElseThrow(() -> new CustomException(StatusCode.USER_NOT_FOUND)); } + private UserGroup findUserGroupById(Long userId, Long groupId) { return userGroupRepository.findByUserIdAndGroupId(userId, groupId) .orElseThrow(() -> new CustomException(NOT_MEMBER)); From e2b9e2c1f7c81dd3d30ee34cb6d125f7457d0f71 Mon Sep 17 00:00:00 2001 From: silkair Date: Sat, 18 Jan 2025 15:27:12 +0900 Subject: [PATCH 5/7] =?UTF-8?q?=C3=A3refactor=20:=20change=20req=20paramet?= =?UTF-8?q?er=20userId=20to=20token=20for=20group=20private=20change?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/group/controller/GroupController.java | 7 ++++--- .../domain/group/dto/req/GroupPrivateRequestDto.java | 1 - .../backend/domain/group/service/GroupService.java | 2 +- .../domain/group/service/Impl/GroupServiceImpl.java | 5 +++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java b/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java index 03b2c11..bd30e54 100644 --- a/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java +++ b/src/main/java/com/bookmile/backend/domain/group/controller/GroupController.java @@ -6,7 +6,6 @@ import com.bookmile.backend.domain.group.service.GroupService; import com.bookmile.backend.domain.group.service.Impl.GroupMemberServiceImpl; import com.bookmile.backend.global.common.CommonResponse; -import com.bookmile.backend.domain.user.entity.User; import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -120,9 +119,11 @@ public ResponseEntity getGroupDetail(@PathVariable Long @Operation(summary = "그룹 공개/비공개 전환", description = "그룹장은 그룹 공개여부를 변경할 수 있습니다.") public ResponseEntity> updateGroupVisibility( @PathVariable Long groupId, - @RequestBody @Valid GroupPrivateRequestDto requestDto + @RequestBody @Valid GroupPrivateRequestDto requestDto, + @AuthenticationPrincipal UserDetails userDetails ) { - groupService.updateGroupPrivate(groupId, requestDto.getIsOpen(), requestDto.getUserId()); + String userEmail = userDetails.getUsername(); + groupService.updateGroupPrivate(groupId, requestDto.getIsOpen(), userEmail); return ResponseEntity.ok(CommonResponse.from(GROUP_PRIVATE_UPDATE.getMessage())); } } diff --git a/src/main/java/com/bookmile/backend/domain/group/dto/req/GroupPrivateRequestDto.java b/src/main/java/com/bookmile/backend/domain/group/dto/req/GroupPrivateRequestDto.java index 10d978f..a5f5d5d 100644 --- a/src/main/java/com/bookmile/backend/domain/group/dto/req/GroupPrivateRequestDto.java +++ b/src/main/java/com/bookmile/backend/domain/group/dto/req/GroupPrivateRequestDto.java @@ -6,6 +6,5 @@ @Getter @NoArgsConstructor public class GroupPrivateRequestDto { - private Long userId; private Boolean isOpen; } \ No newline at end of file diff --git a/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java b/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java index c06242c..4b5a5fa 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/GroupService.java @@ -21,5 +21,5 @@ public interface GroupService { GroupDetailResponseDto getGroupDetail(Long groupId); - void updateGroupPrivate(Long groupId, Boolean isOpen, Long userId); + void updateGroupPrivate(Long groupId, Boolean isOpen, String userEmail); } diff --git a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java index bd60af2..ca9fff1 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java @@ -135,10 +135,11 @@ public GroupDetailResponseDto getGroupDetail(Long groupId) { @Override @Transactional - public void updateGroupPrivate(Long groupId, Boolean isOpen, Long userId) { + public void updateGroupPrivate(Long groupId, Boolean isOpen, String userEmail) { + User user = validateUserByEmail(userEmail); Group group = findGroupById(groupId); - UserGroup userGroup = findUserGroupById(userId, groupId); + UserGroup userGroup = findUserGroupById(user.getId(), groupId); validateGroupMaster(userGroup); group.setIsOpen(isOpen); From ca5803b7c828fba254f97bd28abcb44055ea8347 Mon Sep 17 00:00:00 2001 From: silkair Date: Mon, 20 Jan 2025 00:04:45 +0900 Subject: [PATCH 6/7] fix bug --- .../backend/domain/group/service/Impl/GroupServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java index ca9fff1..8fb28ea 100644 --- a/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java +++ b/src/main/java/com/bookmile/backend/domain/group/service/Impl/GroupServiceImpl.java @@ -60,7 +60,7 @@ public GroupCreateResponseDto createGroup(GroupCreateRequestDto requestDto, Stri Group group = groupRepository.save(requestDto.toEntity(book, goalType, goalContent)); - Long templateId; + Long templateId = null; if (requestDto.getTemplateId() == null) { template = Template.builder() .group(group) @@ -68,7 +68,7 @@ public GroupCreateResponseDto createGroup(GroupCreateRequestDto requestDto, Stri .goalContent(goalContent) .isTemplate(true) .build(); - templateId = template.getId(); + templateRepository.save(template); } else { templateId = requestDto.getTemplateId(); } From e2da7dcf797bc8093465a73d620964dac29c6a36 Mon Sep 17 00:00:00 2001 From: kingjinyong Date: Mon, 20 Jan 2025 01:03:43 +0900 Subject: [PATCH 7/7] =?UTF-8?q?refactor:=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/userGroup/repository/UserGroupRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/bookmile/backend/domain/userGroup/repository/UserGroupRepository.java b/src/main/java/com/bookmile/backend/domain/userGroup/repository/UserGroupRepository.java index 1231322..7488d24 100644 --- a/src/main/java/com/bookmile/backend/domain/userGroup/repository/UserGroupRepository.java +++ b/src/main/java/com/bookmile/backend/domain/userGroup/repository/UserGroupRepository.java @@ -16,7 +16,7 @@ public interface UserGroupRepository extends JpaRepository { List findByGroupId(Long groupId); - Optional findByUserIdAndGroupId(Long userId, Long groupId); + Optional findByUserIdAndGroupId(Long groupId, Long userId); @Query("SELECT ug FROM UserGroup ug WHERE ug.group.id = :groupId AND ug.role = 'MASTER'") Optional findMasterByGroupId(@Param("groupId") Long groupId);