Skip to content

Commit

Permalink
마이페이지 기능 수정 (#65)
Browse files Browse the repository at this point in the history
* Title enum 수정
- 달성 조건도 같이 담기도록 타입 수정

* 마이페이지 기능 추가
- 자신이 등록한 점포, 달성한 칭호, 작성한 리뷰, 등록한 북마크 조회 기능 추가
- 기타 연관된 Dto 일부 수정
- 테스트 케이스 작성 중

* 테스트 케이스 작성

* 병합 오류 해결
  • Loading branch information
ysw789 authored Sep 25, 2024
1 parent f4bc1ef commit b235106
Show file tree
Hide file tree
Showing 11 changed files with 280 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,19 @@

import com.dongyang.dongpo.apiresponse.ApiResponse;
import com.dongyang.dongpo.domain.member.Member;
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.service.mypage.MyPageService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/my-page")
@RequiredArgsConstructor
Expand All @@ -22,6 +27,27 @@ public ResponseEntity<ApiResponse<MyPageDto>> getMyPageIndex(@AuthenticationPrin
return ResponseEntity.ok(new ApiResponse<>(myPageService.getMyPageIndex(member)));
}

@GetMapping("/stores")
public ResponseEntity<ApiResponse<List<StoreIndexDto>>> getMyRegisteredStores(@AuthenticationPrincipal Member member) {
return ResponseEntity.ok(new ApiResponse<>(myPageService.getMyRegisteredStores(member)));
}

@GetMapping("/titles")
public ResponseEntity<ApiResponse<List<MyPageDto.TitleDto>>> getMyTitles(@AuthenticationPrincipal Member member) {
return ResponseEntity.ok(new ApiResponse<>(myPageService.getMyTitles(member)));
}

@GetMapping("/bookmarks")
public ResponseEntity<ApiResponse<List<BookmarkDto>>> getMyBookmarks(@AuthenticationPrincipal Member member) {
return ResponseEntity.ok(new ApiResponse<>(myPageService.getMyBookmarks(member)));
}

@GetMapping("/reviews")
public ResponseEntity<ApiResponse<List<ReviewDto>>> getMyReviews(@AuthenticationPrincipal Member member) {
return ResponseEntity.ok(new ApiResponse<>(myPageService.getMyReviews(member)));
}


@PatchMapping
public ResponseEntity<ApiResponse<String>> updateMyPageInfo(@AuthenticationPrincipal Member member, @RequestBody MyPageUpdateDto myPageUpdateDto) {
myPageService.updateMyPageInfo(member.getEmail(), myPageUpdateDto);
Expand Down
18 changes: 10 additions & 8 deletions src/main/java/com/dongyang/dongpo/domain/member/Title.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,20 @@

@Getter
public enum Title {
BASIC_TITLE("막 개장한 포장마차"), // 첫 가입시
FAILED_TO_VISIT("실패는 성공의 어머니"), // 3회 이상 방문 실패시
REGULAR_CUSTOMER("난 한 놈만 패"), // 3회 이상 같은 점포 방문시
FIRST_VISIT_CERT("첫 발을 디딘 자"), // 처음 방문인증 한 사람
FIRST_STORE_REGISTER("개척자"), // 처음으로 점포를 등록한 사람
REVIEW_PRO("프로 리뷰어"), // 3회 이상 리뷰 등록한 사람
REGISTER_PRO("점포 스카우터"), // 점포를 3곳 이상 등록한 사람
BASIC_TITLE("막 개장한 포장마차", "첫 가입 시"),
FAILED_TO_VISIT("실패는 성공의 어머니", "3회 이상 방문 실패"),
REGULAR_CUSTOMER("난 한 놈만 패", "3회 이상 같은 점포 방문"),
FIRST_VISIT_CERT("첫 발을 디딘 자", "첫 방문 인증 시도"),
FIRST_STORE_REGISTER("개척자", "점포를 처음 등록 한 사람"),
REVIEW_PRO("프로 리뷰어", "3회 이상 리뷰 등록"),
REGISTER_PRO("점포 스카우터", "3곳 이상 점포 등록"),
;

private final String description;
private final String achieveCondition;

Title(String description) {
Title(String description, String achieveCondition) {
this.description = description;
this.achieveCondition = achieveCondition;
}
}
10 changes: 10 additions & 0 deletions src/main/java/com/dongyang/dongpo/domain/store/Store.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.dongyang.dongpo.dto.store.OpenPossibility;
import com.dongyang.dongpo.dto.store.ReviewDto;
import com.dongyang.dongpo.dto.store.StoreDto;
import com.dongyang.dongpo.dto.store.StoreIndexDto;
import com.dongyang.dongpo.dto.store.StoreUpdateDto;
import jakarta.persistence.*;
import lombok.*;
Expand Down Expand Up @@ -113,6 +114,15 @@ public StoreDto toResponse() {
.build();
}

public StoreIndexDto toIndexResponse() {
return StoreIndexDto.builder()
.id(id)
.name(name)
.address(address)
.registerDate(registerDate)
.build();
}

public StoreDto toResponse(OpenPossibility openPossibility) {
List<Store.OperatingDay> operatingDayValues = this.storeOperatingDays.stream()
.map(StoreOperatingDay::getOperatingDay)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,33 @@
package com.dongyang.dongpo.dto.bookmark;

import com.dongyang.dongpo.domain.store.StoreBookmark;
import com.dongyang.dongpo.dto.store.StoreDto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;


@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BookmarkDto {

private Long id;
private Long storeId;
private String storeName;
private LocalDateTime bookmarkDate;

public static BookmarkDto toDto(StoreBookmark storeBookmark) {
return BookmarkDto.builder()
.id(storeBookmark.getId())
.storeId(storeBookmark.getStore().getId())
.storeName(storeBookmark.getStore().getName())
.bookmarkDate(storeBookmark.getBookmarkDate())
.build();
}
}
19 changes: 16 additions & 3 deletions src/main/java/com/dongyang/dongpo/dto/mypage/MyPageDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
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.domain.store.Store;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.*;

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

@Data
Expand All @@ -29,12 +30,24 @@ public class MyPageDto {
@JsonSerialize
@JsonDeserialize
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public static class TitleDto {
private Title title;
private String description;
private String achieveCondition;
private LocalDateTime achieveDate;
}

public static MyPageDto toEntity(Member member, List<MemberTitle> memberTitles, List<Store> memberStores) {
public static TitleDto toTitleDto(MemberTitle memberTitle) {
return TitleDto.builder()
.title(memberTitle.getTitle())
.description(memberTitle.getTitle().getDescription())
.achieveCondition(memberTitle.getTitle().getAchieveCondition())
.achieveDate(memberTitle.getAchieveDate())
.build();
}

public static MyPageDto toEntity(Member member, List<MemberTitle> memberTitles, Long storeRegisterCount) {
List<TitleDto> titles = memberTitles.stream()
.map(title -> TitleDto.builder()
.title(title.getTitle())
Expand All @@ -49,7 +62,7 @@ public static MyPageDto toEntity(Member member, List<MemberTitle> memberTitles,
.description(member.getMainTitle().getDescription())
.build())
.titles(titles)
.registerCount(memberStores.size())
.registerCount(storeRegisterCount.intValue())
.titleCount(memberTitles.size())
.presentCount(0) // test
.build();
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/com/dongyang/dongpo/dto/store/ReviewDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,18 @@ public StoreReview toEntity(Store store, Member member){
.reviewStar(reviewStar)
.build();
}

public static ReviewDto toDto(StoreReview storeReview){
return ReviewDto.builder()
.id(storeReview.getId())
.storeId(storeReview.getStore().getId())
.memberId(storeReview.getMember().getId())
.reviewStar(storeReview.getReviewStar())
.text(storeReview.getText())
.reviewPic(storeReview.getReviewPic())
.registerDate(storeReview.getRegisterDate())
.status(storeReview.getStatus())
.reportCount(storeReview.getReportCount())
.build();
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/dongyang/dongpo/dto/store/StoreIndexDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.dongyang.dongpo.dto.store;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreIndexDto {
private Long id;
private String name;
private String address;
private LocalDateTime registerDate;
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.dongyang.dongpo.repository.bookmark;


import com.dongyang.dongpo.domain.member.Member;
import com.dongyang.dongpo.domain.store.StoreBookmark;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface BookmarkRepository extends JpaRepository<StoreBookmark, Long> {
List<StoreBookmark> findByMemberId(Long id);

List<StoreBookmark> findByMember(Member member);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ public interface StoreReviewRepository extends JpaRepository<StoreReview, Long>
List<Object[]> findTop10MembersByReviewCount(Pageable pageable);

Long countByMember(Member member);

List<StoreReview> findByMember(Member member);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,26 @@

import com.dongyang.dongpo.domain.member.Member;
import com.dongyang.dongpo.domain.member.MemberTitle;
import com.dongyang.dongpo.domain.store.Store;
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 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 @@ -29,14 +34,48 @@ public class MyPageService {
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;

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

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

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;
}

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

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

@Transactional
Expand Down
Loading

0 comments on commit b235106

Please sign in to comment.