Skip to content

Commit

Permalink
마이페이지 로직 수정
Browse files Browse the repository at this point in the history
- 마이페이지 로직들의 역할&책임 분리
- 중복 기능 정리
- 테스트 케이스 작성
  • Loading branch information
ysw789 committed Sep 25, 2024
1 parent b235106 commit e651b0d
Show file tree
Hide file tree
Showing 15 changed files with 438 additions and 218 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,6 @@ public ResponseEntity<ApiResponse<String>> addBookmark(@RequestBody Long storeId
return ResponseEntity.ok(new ApiResponse<>("success"));
}

@GetMapping("")
@Operation(summary = "북마크 조회")
public ResponseEntity<ApiResponse<List<BookmarkDto>>> getBookmarks(@AuthenticationPrincipal Member member) {
return ResponseEntity.ok(new ApiResponse<>(bookmarkService.bookmarkList(member)));
}

@DeleteMapping("/{id}")
public ResponseEntity<ApiResponse<String>> deleteBookmark(@PathVariable Long id,
@AuthenticationPrincipal Member member) throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,6 @@ public ResponseEntity<ApiResponse<StoreDto>> detailStore(@PathVariable Long id)
return ResponseEntity.ok(new ApiResponse<>(storeService.detailStore(id)));
}

@GetMapping("/member")
@Operation(summary = "내가 등록한 점포조회")
public ResponseEntity<ApiResponse<List<StoreDto>>> myRegStore(@AuthenticationPrincipal Member member) {
return ResponseEntity.ok(new ApiResponse<>(storeService.myRegStore(member)));
}

@PostMapping("")
@Operation(summary = "점포 등록")
public ResponseEntity<ApiResponse<String>> addStore(@RequestBody StoreRegisterDto request,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,4 @@ public ResponseEntity<ApiResponse<String>> addReview(@AuthenticationPrincipal Me
return ResponseEntity.ok(new ApiResponse<>("success"));
}

@GetMapping("/{memberId}")
@Operation(summary = "내가 등록한 리뷰 조회")
public ResponseEntity<ApiResponse<List<ReviewDto>>> myRegReview(@PathVariable Long memberId) {
return ResponseEntity.ok(new ApiResponse<>(reviewService.myRegReview(memberId)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,11 @@ public void addBookmark(Member member, Long storeId) {
log.info("Member Id : {} is Add Bookmark Store Id : {}", member.getId(), storeId);
}

public List<BookmarkDto> bookmarkList(Member member) {
List<StoreBookmark> storeBookmarks = bookmarkRepository.findByMemberId(member.getId());
public List<BookmarkDto> getMyBookmarks(Member member) {
List<BookmarkDto> bookmarkDtos = new ArrayList<>();

for (StoreBookmark storeBookmark : storeBookmarks)
bookmarkDtos.add(BookmarkDto.toDto(storeBookmark));

bookmarkRepository.findByMember(member).forEach(bookmark -> {
bookmarkDtos.add(BookmarkDto.toDto(bookmark));
});
return bookmarkDtos;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,20 @@
import com.dongyang.dongpo.domain.member.MemberTitle;
import com.dongyang.dongpo.dto.JwtToken;
import com.dongyang.dongpo.dto.auth.UserInfo;
import com.dongyang.dongpo.dto.mypage.MyPageDto;
import com.dongyang.dongpo.dto.mypage.MyPageUpdateDto;
import com.dongyang.dongpo.exception.CustomException;
import com.dongyang.dongpo.exception.ErrorCode;
import com.dongyang.dongpo.jwt.JwtTokenProvider;
import com.dongyang.dongpo.repository.member.MemberRepository;
import com.dongyang.dongpo.repository.RefreshTokenRepository;
import com.dongyang.dongpo.repository.member.MemberTitleRepository;
import com.dongyang.dongpo.s3.S3Service;
import com.dongyang.dongpo.service.store.StoreService;
import com.dongyang.dongpo.service.token.TokenService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -31,6 +36,11 @@ public class MemberService {
private final JwtTokenProvider jwtTokenProvider;
private final TokenService tokenService;
private final MemberTitleRepository memberTitleRepository;
private final StoreService storeService;
private final S3Service s3Service;

@Value("${cloud.aws.s3.bucket-full-url}")
private String bucketFullUrl;

@Transactional
public JwtToken socialSave(UserInfo userInfo){
Expand Down Expand Up @@ -65,4 +75,34 @@ public List<Member> findAll(){
public Member findOne(Long id) {
return memberRepository.findById(id).orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND));
}

public MyPageDto getMemberInfoIndex(Member member) {
List<MemberTitle> memberTitles = memberTitleRepository.findByMember(member);
Long storeRegisterCount = storeService.getMyRegisteredStoreCount(member);
return MyPageDto.toEntity(member, memberTitles, storeRegisterCount);
}

@Transactional
public void updateMemberInfo(String email, MyPageUpdateDto myPageUpdateDto) {
if (myPageUpdateDto.getNickname().length() > 7) // 문자 수 7자 초과시 예외 발생
throw new CustomException(ErrorCode.ARGUMENT_NOT_SATISFIED);

memberRepository.findByEmail(email).ifPresent(member -> {
if (myPageUpdateDto.getProfilePic() != null && !myPageUpdateDto.getProfilePic().isBlank()) {
if (member.getProfilePic() != null && member.getProfilePic().startsWith(bucketFullUrl))
s3Service.deleteFile(member.getProfilePic()); // S3에 있는 기존 프로필 사진 삭제
member.setProfilePic(myPageUpdateDto.getProfilePic());
log.info("Updated Member profilePic : {}", member.getEmail());
}
if (myPageUpdateDto.getNickname() != null && !myPageUpdateDto.getNickname().equals(member.getNickname())) {
member.setNickname(myPageUpdateDto.getNickname());
log.info("Updated Member nickname : {}", member.getEmail());
}
if (myPageUpdateDto.getNewMainTitle() != null && !myPageUpdateDto.getNewMainTitle().equals(member.getMainTitle())) {
MemberTitle memberTitle = memberTitleRepository.findByMemberAndTitle(member, myPageUpdateDto.getNewMainTitle());
member.setMainTitle(memberTitle.getTitle());
log.info("Updated Member mainTitle : {}", member.getEmail());
}
});
}
}
80 changes: 16 additions & 64 deletions src/main/java/com/dongyang/dongpo/service/mypage/MyPageService.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,21 @@
package com.dongyang.dongpo.service.mypage;

import com.dongyang.dongpo.domain.member.Member;
import com.dongyang.dongpo.domain.member.MemberTitle;
import com.dongyang.dongpo.dto.bookmark.BookmarkDto;
import com.dongyang.dongpo.dto.mypage.MyPageDto;
import com.dongyang.dongpo.dto.mypage.MyPageUpdateDto;
import com.dongyang.dongpo.dto.store.ReviewDto;
import com.dongyang.dongpo.dto.store.StoreIndexDto;
import com.dongyang.dongpo.exception.CustomException;
import com.dongyang.dongpo.exception.ErrorCode;
import com.dongyang.dongpo.repository.bookmark.BookmarkRepository;
import com.dongyang.dongpo.repository.member.MemberRepository;
import com.dongyang.dongpo.repository.member.MemberTitleRepository;
import com.dongyang.dongpo.repository.store.StoreRepository;
import com.dongyang.dongpo.repository.store.StoreReviewRepository;
import com.dongyang.dongpo.s3.S3Service;
import com.dongyang.dongpo.service.bookmark.BookmarkService;
import com.dongyang.dongpo.service.member.MemberService;
import com.dongyang.dongpo.service.store.StoreReviewService;
import com.dongyang.dongpo.service.store.StoreService;
import com.dongyang.dongpo.service.title.TitleService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
Expand All @@ -30,75 +24,33 @@
@Slf4j
public class MyPageService {

private final MemberRepository memberRepository;
private final MemberTitleRepository memberTitleRepository;
private final S3Service s3Service;
private final StoreRepository storeRepository;
private final BookmarkRepository bookmarkRepository;
private final StoreReviewRepository storeReviewRepository;

@Value("${cloud.aws.s3.bucket-full-url}")
private String bucketFullUrl;
private final StoreService storeService;
private final BookmarkService bookmarkService;
private final StoreReviewService storeReviewService;
private final TitleService titleService;
private final MemberService memberService;

public MyPageDto getMyPageIndex(Member member) {
List<MemberTitle> memberTitles = memberTitleRepository.findByMember(member);
Long storeRegisterCount = storeRepository.countByMember(member);
return MyPageDto.toEntity(member, memberTitles, storeRegisterCount);
return memberService.getMemberInfoIndex(member);
}

public List<StoreIndexDto> getMyRegisteredStores(Member member) {
List<StoreIndexDto> storeIndexDtos = new ArrayList<>();
storeRepository.findByMember(member).forEach(store -> {
storeIndexDtos.add(store.toIndexResponse());
});
return storeIndexDtos;
return storeService.getMyRegisteredStores(member);
}

public List<MyPageDto.TitleDto> getMyTitles(Member member) {
List<MyPageDto.TitleDto> titleDtos = new ArrayList<>();
memberTitleRepository.findByMember(member).forEach(memberTitle -> {
titleDtos.add(MyPageDto.toTitleDto(memberTitle));
});
return titleDtos;
return titleService.getMemberTitles(member);
}

public List<BookmarkDto> getMyBookmarks(Member member) {
List<BookmarkDto> bookmarkDtos = new ArrayList<>();
bookmarkRepository.findByMember(member).forEach(bookmark -> {
bookmarkDtos.add(BookmarkDto.toDto(bookmark));
});
return bookmarkDtos;
return bookmarkService.getMyBookmarks(member);
}

public List<ReviewDto> getMyReviews(Member member) {
List<ReviewDto> reviewDtos = new ArrayList<>();
storeReviewRepository.findByMember(member).forEach(storeReview -> {
reviewDtos.add(ReviewDto.toDto(storeReview));
});
return reviewDtos;
return storeReviewService.getMyReviews(member);
}

@Transactional
public void updateMyPageInfo(String email, MyPageUpdateDto myPageUpdateDto) {
if (myPageUpdateDto.getNickname().length() > 7) // 문자 수 7자 초과시 예외 발생
throw new CustomException(ErrorCode.ARGUMENT_NOT_SATISFIED);

memberRepository.findByEmail(email).ifPresent(member -> {
if (myPageUpdateDto.getProfilePic() != null && !myPageUpdateDto.getProfilePic().isBlank()) {
if (member.getProfilePic() != null && member.getProfilePic().startsWith(bucketFullUrl))
s3Service.deleteFile(member.getProfilePic()); // S3에 있는 기존 프로필 사진 삭제
member.setProfilePic(myPageUpdateDto.getProfilePic());
log.info("Updated Member profilePic : {}", member.getEmail());
}
if (myPageUpdateDto.getNickname() != null && !myPageUpdateDto.getNickname().equals(member.getNickname())) {
member.setNickname(myPageUpdateDto.getNickname());
log.info("Updated Member nickname : {}", member.getEmail());
}
if (myPageUpdateDto.getNewMainTitle() != null && !myPageUpdateDto.getNewMainTitle().equals(member.getMainTitle())) {
MemberTitle memberTitle = memberTitleRepository.findByMemberAndTitle(member, myPageUpdateDto.getNewMainTitle());
member.setMainTitle(memberTitle.getTitle());
log.info("Updated Member mainTitle : {}", member.getEmail());
}
});
memberService.updateMemberInfo(email, myPageUpdateDto);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,12 @@ public void addReview(Member member, Long storeId, ReviewDto reviewDto){
titleService.addTitle(member, Title.REVIEW_PRO);
}

public List<ReviewDto> myRegReview(Long memberId){
List<StoreReview> storeReviews = reviewRepository.findByMemberId(memberId);
List<ReviewDto> reviewDtos = new ArrayList<>();

for (StoreReview review : storeReviews)
reviewDtos.add(review.toResponse());

return reviewDtos;
public List<ReviewDto> getMyReviews(Member member) {
List<ReviewDto> reviewDtos = new ArrayList<>();
reviewRepository.findByMember(member).forEach(storeReview -> {
reviewDtos.add(ReviewDto.toDto(storeReview));
});
return reviewDtos;
}

public List<StoreReview> findAll(){
Expand Down
21 changes: 10 additions & 11 deletions src/main/java/com/dongyang/dongpo/service/store/StoreService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@
import com.dongyang.dongpo.domain.store.StorePayMethod;
import com.dongyang.dongpo.dto.location.CoordinateRange;
import com.dongyang.dongpo.dto.location.LatLong;
import com.dongyang.dongpo.dto.store.OpenPossibility;
import com.dongyang.dongpo.dto.store.StoreDto;
import com.dongyang.dongpo.dto.store.StoreRegisterDto;
import com.dongyang.dongpo.dto.store.StoreUpdateDto;
import com.dongyang.dongpo.dto.store.*;
import com.dongyang.dongpo.exception.CustomException;
import com.dongyang.dongpo.exception.ErrorCode;
import com.dongyang.dongpo.repository.store.StoreOperatingDayRepository;
Expand Down Expand Up @@ -182,14 +179,16 @@ public void updateStore(Long id, StoreUpdateDto request, Member member) {
}
}

public List<StoreDto> myRegStore(Member member){
List<Store> stores = storeRepository.findByMember(member);
List<StoreDto> storeResponse = new ArrayList<>();

for (Store store : stores)
storeResponse.add(store.toResponse());
public List<StoreIndexDto> getMyRegisteredStores(Member member) {
List<StoreIndexDto> storeIndexDtos = new ArrayList<>();
storeRepository.findByMember(member).forEach(store -> {
storeIndexDtos.add(store.toIndexResponse());
});
return storeIndexDtos;
}

return storeResponse;
public Long getMyRegisteredStoreCount(Member member) {
return storeRepository.countByMember(member);
}

public StoreDto findOne(Long id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
import com.dongyang.dongpo.domain.member.Member;
import com.dongyang.dongpo.domain.member.MemberTitle;
import com.dongyang.dongpo.domain.member.Title;
import com.dongyang.dongpo.repository.member.MemberRepository;
import com.dongyang.dongpo.dto.mypage.MyPageDto;
import com.dongyang.dongpo.repository.member.MemberTitleRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Service
Expand All @@ -33,4 +34,12 @@ public void addTitle(Member member, Title title) {
log.info("member {} add title : {}", member.getId(), title.getDescription());
}
}

public List<MyPageDto.TitleDto> getMemberTitles(Member member) {
List<MyPageDto.TitleDto> titleDtos = new ArrayList<>();
memberTitleRepository.findByMember(member).forEach(memberTitle -> {
titleDtos.add(MyPageDto.toTitleDto(memberTitle));
});
return titleDtos;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.dongyang.dongpo.service.bookmark;

import com.dongyang.dongpo.domain.member.Member;
import com.dongyang.dongpo.domain.store.Store;
import com.dongyang.dongpo.domain.store.StoreBookmark;
import com.dongyang.dongpo.dto.bookmark.BookmarkDto;
import com.dongyang.dongpo.repository.bookmark.BookmarkRepository;
import com.dongyang.dongpo.repository.store.StoreRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.time.LocalDateTime;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class BookmarkServiceTest {

@Mock
private BookmarkRepository bookmarkRepository;

@Mock
private StoreRepository storeRepository;

@InjectMocks
private BookmarkService bookmarkService;

@Test
void addBookmark() {
}

@Test
void getMyBookmarks() {
// given
Member member = mock(Member.class);
Store store1 = mock(Store.class);
Store store2 = mock(Store.class);
StoreBookmark bookmark1 = mock(StoreBookmark.class);
StoreBookmark bookmark2 = mock(StoreBookmark.class);
LocalDateTime bookmarkDate1 = LocalDateTime.now();
LocalDateTime bookmarkDate2 = LocalDateTime.now().plusDays(1);

when(bookmarkRepository.findByMember(member)).thenReturn(List.of(bookmark1, bookmark2));
when(bookmark1.getStore()).thenReturn(store1);
when(bookmark2.getStore()).thenReturn(store2);
when(bookmark1.getBookmarkDate()).thenReturn(bookmarkDate1);
when(bookmark2.getBookmarkDate()).thenReturn(bookmarkDate2);
when(BookmarkDto.toDto(bookmark1)).thenCallRealMethod();
when(BookmarkDto.toDto(bookmark2)).thenCallRealMethod();

// when
List<BookmarkDto> bookmarkDtos = bookmarkService.getMyBookmarks(member);

// then
assertThat(bookmarkDtos).hasSize(2);
verify(bookmarkRepository).findByMember(member);
}

@Test
void deleteBookmark() {
}
}
Loading

0 comments on commit e651b0d

Please sign in to comment.