From 444893a18ff1897a8c60e32d999832b8ea700455 Mon Sep 17 00:00:00 2001 From: JSoi Date: Mon, 11 Jul 2022 13:58:58 +0900 Subject: [PATCH 1/3] [Conflict Solved & Merge] -> Merge branch 'feature/review' into develop # Conflicts: # build.gradle # src/main/java/com/mpnp/baechelin/store/domain/Store.java --- build.gradle | 2 +- .../bookmark/controller/BookmarkController.java | 4 ++-- .../bookmark/controller/FolderController.java | 10 +++++----- .../com/mpnp/baechelin/bookmark/domain/Folder.java | 3 ++- .../bookmark/repository/FolderRepository.java | 2 +- .../baechelin/bookmark/service/BookmarkService.java | 2 +- .../mpnp/baechelin/bookmark/service/FolderService.java | 3 ++- .../baechelin/{util => config/s3}/AmazonS3Config.java | 8 ++++---- .../baechelin/review/controller/ReviewController.java | 4 ++-- .../java/com/mpnp/baechelin/review/domain/Review.java | 2 +- .../mpnp/baechelin/review/service/ReviewService.java | 6 +++--- .../java/com/mpnp/baechelin/store/domain/Store.java | 2 +- .../java/com/mpnp/baechelin/user/entity/user/User.java | 8 ++++++++ 13 files changed, 33 insertions(+), 23 deletions(-) rename src/main/java/com/mpnp/baechelin/{util => config/s3}/AmazonS3Config.java (82%) diff --git a/build.gradle b/build.gradle index 2e9ca99..586b9fc 100644 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.batch:spring-batch-test' testImplementation 'org.springframework.security:spring-security-test' -// WebClient + // WebClient compileOnly 'org.springframework.boot:spring-boot-starter-webflux' compileOnly 'org.projectreactor:reactor-spring:1.0.1.RELEASE' compileOnly 'org.apache.httpcomponents:httpclient:4.5.13' diff --git a/src/main/java/com/mpnp/baechelin/bookmark/controller/BookmarkController.java b/src/main/java/com/mpnp/baechelin/bookmark/controller/BookmarkController.java index 2274857..5ebad9e 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/controller/BookmarkController.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/controller/BookmarkController.java @@ -12,8 +12,8 @@ public class BookmarkController { private final BookmarkService bookmarkService; - /* 북마크 생성 폴더 담기 */ - @PostMapping("/api/bookmark") + /** 북마크 생성 폴더 담기 */ + @PostMapping("/bookmark") public void bookmark(@RequestBody BookmarkReqDTO bookmarkReqDTO){ bookmarkService.bookmark(bookmarkReqDTO); diff --git a/src/main/java/com/mpnp/baechelin/bookmark/controller/FolderController.java b/src/main/java/com/mpnp/baechelin/bookmark/controller/FolderController.java index 81ee7ca..f74774b 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/controller/FolderController.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/controller/FolderController.java @@ -16,8 +16,8 @@ public class FolderController { private final FolderService folderService; - /* 폴더 신규 생성 */ - @PostMapping("/api/folder") + /** 폴더 신규 생성 */ + @PostMapping("/folder") public void folder (@RequestBody FolderReqDTO folderReqDTO){ folderService.folder(folderReqDTO); @@ -25,7 +25,7 @@ public void folder (@RequestBody FolderReqDTO folderReqDTO){ /* 폴더 삭제 -> 삭제 시 안에 담긴 모든 북마크가 삭제됨 */ - @DeleteMapping("/api/folder/{folderId}") + @DeleteMapping("/folder/{folderId}") public void folderDelete (@PathVariable int folderId){ folderService.folderDelete(folderId); @@ -33,14 +33,14 @@ public void folderDelete (@PathVariable int folderId){ /* 폴더 명 변경 */ - @PutMapping("/api/folderUpdate/{folderId}") + @PutMapping("/folderUpdate/{folderId}") public void folderUpdate (@PathVariable int folderId, @RequestParam String newFolderName){ System.out.println(newFolderName); folderService.folderUpdate(folderId, newFolderName); } - @PutMapping("/api/folderList/{userId}") + @PutMapping("/folderList/{userId}") public List folderList (@PathVariable int userId){ return folderService.folderList(userId); diff --git a/src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java b/src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java index a3ffa82..19f2852 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java @@ -2,7 +2,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore; -import com.mpnp.baechelin.user.domain.User; + +import com.mpnp.baechelin.user.entity.user.User; import com.mpnp.baechelin.util.TimeStamped; import lombok.*; diff --git a/src/main/java/com/mpnp/baechelin/bookmark/repository/FolderRepository.java b/src/main/java/com/mpnp/baechelin/bookmark/repository/FolderRepository.java index 201df21..713254b 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/repository/FolderRepository.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/repository/FolderRepository.java @@ -1,7 +1,7 @@ package com.mpnp.baechelin.bookmark.repository; import com.mpnp.baechelin.bookmark.domain.Folder; -import com.mpnp.baechelin.user.domain.User; +import com.mpnp.baechelin.user.entity.user.User; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; diff --git a/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java b/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java index 4126385..57ca101 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java @@ -6,7 +6,7 @@ import com.mpnp.baechelin.bookmark.repository.BookmarkRepository; import com.mpnp.baechelin.bookmark.repository.FolderRepository; import com.mpnp.baechelin.store.domain.Store; -import com.mpnp.baechelin.store.domain.repository.StoreRepository; +import com.mpnp.baechelin.store.repository.StoreRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/mpnp/baechelin/bookmark/service/FolderService.java b/src/main/java/com/mpnp/baechelin/bookmark/service/FolderService.java index c041b9b..8a97eb3 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/service/FolderService.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/service/FolderService.java @@ -4,7 +4,8 @@ import com.mpnp.baechelin.bookmark.dto.FolderReqDTO; import com.mpnp.baechelin.bookmark.dto.FolderResDTO; import com.mpnp.baechelin.bookmark.repository.FolderRepository; -import com.mpnp.baechelin.user.domain.User; + +import com.mpnp.baechelin.user.entity.user.User; import com.mpnp.baechelin.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/mpnp/baechelin/util/AmazonS3Config.java b/src/main/java/com/mpnp/baechelin/config/s3/AmazonS3Config.java similarity index 82% rename from src/main/java/com/mpnp/baechelin/util/AmazonS3Config.java rename to src/main/java/com/mpnp/baechelin/config/s3/AmazonS3Config.java index 785558d..ed45345 100644 --- a/src/main/java/com/mpnp/baechelin/util/AmazonS3Config.java +++ b/src/main/java/com/mpnp/baechelin/config/s3/AmazonS3Config.java @@ -1,4 +1,4 @@ -package com.mpnp.baechelin.util; +package com.mpnp.baechelin.config.s3; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; @@ -11,13 +11,13 @@ @Configuration public class AmazonS3Config { - @Value("${cloud.aws.s3.accessKey}") + @Value("${cloud.aws.credentials.access-key}") private String accessKey; - @Value("${cloud.aws.s3.secretKey}") + @Value("${cloud.aws.credentials.secret-key}") private String secretKey; - @Value("${cloud.aws.s3.region}") + @Value("${cloud.aws.region.static}") private String region; @Bean diff --git a/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java b/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java index 056cf4f..6540203 100644 --- a/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java +++ b/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java @@ -18,7 +18,7 @@ public class ReviewController { private final ReviewService reviewService; /**리뷰 작성*/ - @PostMapping("/api/review") + @PostMapping("/review") public ReviewResDTO review(@RequestParam double point, @RequestParam String comment, @RequestParam int storeId, @@ -26,7 +26,7 @@ public ReviewResDTO review(@RequestParam double point, @RequestParam(required = false) MultipartFile imageFile) throws IOException { ReviewReqDTO reviewReqDTO =new ReviewReqDTO(); - reviewReqDTO + ReviewReqDTO .builder() .point(point) .comment(comment) diff --git a/src/main/java/com/mpnp/baechelin/review/domain/Review.java b/src/main/java/com/mpnp/baechelin/review/domain/Review.java index 141d83e..4befe6a 100644 --- a/src/main/java/com/mpnp/baechelin/review/domain/Review.java +++ b/src/main/java/com/mpnp/baechelin/review/domain/Review.java @@ -4,7 +4,7 @@ import com.mpnp.baechelin.review.service.ReviewService; import com.mpnp.baechelin.store.domain.Store; import com.mpnp.baechelin.tag.domain.Tag; -import com.mpnp.baechelin.user.domain.User; +import com.mpnp.baechelin.user.entity.user.User; import com.mpnp.baechelin.util.TimeStamped; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java b/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java index 9057534..f71cb3b 100644 --- a/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java +++ b/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java @@ -7,10 +7,10 @@ import com.mpnp.baechelin.review.dto.ReviewReqDTO; import com.mpnp.baechelin.review.repository.ReviewRepository; import com.mpnp.baechelin.store.domain.Store; -import com.mpnp.baechelin.store.domain.repository.StoreRepository; +import com.mpnp.baechelin.store.repository.StoreRepository; import com.mpnp.baechelin.tag.domain.Tag; import com.mpnp.baechelin.tag.repository.TagRepository; -import com.mpnp.baechelin.user.domain.User; +import com.mpnp.baechelin.user.entity.user.User; import com.mpnp.baechelin.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,7 +29,7 @@ @RequiredArgsConstructor public class ReviewService { private final ReviewRepository reviewRepository; - private final UserRepository userRepository; + private final UserRepository userRepository; private final StoreRepository storeRepository; private final TagRepository tagRepository; private final AmazonS3Client amazonS3Client; diff --git a/src/main/java/com/mpnp/baechelin/store/domain/Store.java b/src/main/java/com/mpnp/baechelin/store/domain/Store.java index 4c9b432..ec9cf10 100644 --- a/src/main/java/com/mpnp/baechelin/store/domain/Store.java +++ b/src/main/java/com/mpnp/baechelin/store/domain/Store.java @@ -56,7 +56,7 @@ public class Store { // 연관관계 매핑 @OneToMany(mappedBy = "store", cascade = CascadeType.ALL, orphanRemoval = true) - private List storeImageList; + private List storeImageList = new ArrayList<>(); public Store(PublicApiResponseDto.Row row) { //storeId - 임시 diff --git a/src/main/java/com/mpnp/baechelin/user/entity/user/User.java b/src/main/java/com/mpnp/baechelin/user/entity/user/User.java index cd47a62..68b7867 100644 --- a/src/main/java/com/mpnp/baechelin/user/entity/user/User.java +++ b/src/main/java/com/mpnp/baechelin/user/entity/user/User.java @@ -1,6 +1,7 @@ package com.mpnp.baechelin.user.entity.user; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.mpnp.baechelin.bookmark.domain.Folder; import com.mpnp.baechelin.oauth.entity.ProviderType; import com.mpnp.baechelin.oauth.entity.RoleType; import com.mpnp.baechelin.review.domain.Review; @@ -14,6 +15,7 @@ import javax.persistence.*; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import java.util.ArrayList; import java.util.List; @Entity @@ -70,4 +72,10 @@ public User(String socialId, this.providerType = providerType; this.roleType = roleType; } + + @OneToMany(mappedBy = "userId", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewList; + + @OneToMany(mappedBy = "userId", cascade = CascadeType.ALL, orphanRemoval = true) + private List folderList = new ArrayList<>(); } From da19f032869ef0c6f6cc0772c388950f962299dd Mon Sep 17 00:00:00 2001 From: JSoi Date: Mon, 11 Jul 2022 17:06:19 +0900 Subject: [PATCH 2/3] =?UTF-8?q?#3=20[Update]=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bookmark, Store의 업데이트에 맞추어 UserInfo의 구조를 변경했습니다 --- .../user/controller/UserInfoController.java | 28 ++++ .../user/dto/UserInfoResponseDto.java | 120 ++++++++++++++++++ .../user/service/UserInfoService.java | 24 ++++ 3 files changed, 172 insertions(+) create mode 100644 src/main/java/com/mpnp/baechelin/user/controller/UserInfoController.java create mode 100644 src/main/java/com/mpnp/baechelin/user/dto/UserInfoResponseDto.java create mode 100644 src/main/java/com/mpnp/baechelin/user/service/UserInfoService.java diff --git a/src/main/java/com/mpnp/baechelin/user/controller/UserInfoController.java b/src/main/java/com/mpnp/baechelin/user/controller/UserInfoController.java new file mode 100644 index 0000000..fbc99b7 --- /dev/null +++ b/src/main/java/com/mpnp/baechelin/user/controller/UserInfoController.java @@ -0,0 +1,28 @@ +package com.mpnp.baechelin.user.controller; + +import com.mpnp.baechelin.user.dto.UserInfoResponseDto; +import com.mpnp.baechelin.user.entity.user.User; +import com.mpnp.baechelin.user.service.UserInfoService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/userinfo") +@RequiredArgsConstructor +@Slf4j +public class UserInfoController { + private final UserInfoService userInfoService; + + @GetMapping + // Security 추가 후 변경할 예정 +// public ResponseEntity getUserInfo(@AuthenticationPrincipal User user) { + public ResponseEntity getUserInfo(@RequestParam Integer userId) { + log.warn("USERID {} " , userId); +// return new ResponseEntity<>(userInfoService.giveUserInfo(user), HttpStatus.OK); + return new ResponseEntity<>(userInfoService.giveUserInfo(userId), HttpStatus.OK); + } +} diff --git a/src/main/java/com/mpnp/baechelin/user/dto/UserInfoResponseDto.java b/src/main/java/com/mpnp/baechelin/user/dto/UserInfoResponseDto.java new file mode 100644 index 0000000..59d9c36 --- /dev/null +++ b/src/main/java/com/mpnp/baechelin/user/dto/UserInfoResponseDto.java @@ -0,0 +1,120 @@ +package com.mpnp.baechelin.user.dto; + + +import com.mpnp.baechelin.bookmark.domain.Bookmark; +import com.mpnp.baechelin.bookmark.domain.Folder; +import com.mpnp.baechelin.review.domain.Review; +import com.mpnp.baechelin.tag.domain.Tag; +import com.mpnp.baechelin.user.entity.user.User; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class UserInfoResponseDto { + // User info + private String name; + private List review; + private List bookmarkFolderList; + + public UserInfoResponseDto(User user) { + this.name = user.getName(); + this.review = user.getReviewList().stream().map(ReviewResponseDto::new).collect(Collectors.toList()); + this.bookmarkFolderList = user.getFolderList().stream().map(BookmarkFolderResponseDto::new).collect(Collectors.toList()); + //folder + + } + + @Builder + @AllArgsConstructor + @NoArgsConstructor + @Getter + static class BookmarkFolderResponseDto { + private int userId; + private List folders; // 폴더 여러 개 + + public BookmarkFolderResponseDto(Folder folder) { + this.userId = folder.getUserId().getId(); + this.folders = folder.getBookmarkList().stream().map(BookmarkResponseDto::new).collect(Collectors.toList()); + } + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + static class BookmarkResponseDto { + private int folderId; + private int storeId; + + public BookmarkResponseDto(Bookmark bookmark){ + this.folderId = bookmark.getFolderId().getId(); + this.storeId = bookmark.getStoreId().getId(); + } + } + + @Builder + @AllArgsConstructor + @NoArgsConstructor + @Getter + static class ReviewResponseDto { + int id; // storeId + int review; // reviewId + Double point; + + String comment; + String reviewImageUrl; + + TagResponseDto tag; + + LocalDateTime createdAt; + LocalDateTime modifiedAt; + + public ReviewResponseDto(Review review) { + this.id = review.getStoreId().getId(); + this.review = review.getId(); + this.point = review.getPoint(); + this.comment = review.getReview(); + this.reviewImageUrl = review.getReviewImageUrl(); + this.tag = new TagResponseDto(review.getTagId(), review); + } + } + + @Builder + @AllArgsConstructor + @NoArgsConstructor + @Getter + static class TagResponseDto { + int id; // 태그 아이디 + int review; // 리뷰 아이디 + + @Builder.Default + char bKiosk = 'N', bTable = 'N', bMenu = 'N', bWheelchair = 'N', bHelp = 'N', bAutoDoor = 'N'; + @Builder.Default + char fDelicious = 'N', fClean = 'N', fVibe = 'N', fQuantity = 'N', fPrice = 'N', fGoodToEat = 'N'; + + public TagResponseDto(Tag tag, Review review) { + this.id = tag.getId(); + this.review = review.getId(); + this.bKiosk = tag.getBKiosk(); + this.bTable = tag.getBTable(); + this.bMenu = tag.getBMenu(); + this.bWheelchair = tag.getBWheelchair(); + this.bHelp = tag.getBHelp(); + this.bAutoDoor = tag.getBAutoDoor(); + this.fDelicious = tag.getFDelicious(); + this.fClean = tag.getFClean(); + this.fVibe = tag.getFVibe(); + this.fQuantity = tag.getFQuantity(); + this.fPrice = tag.getFPrice(); + this.fGoodToEat = tag.getFGoodToEat(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/mpnp/baechelin/user/service/UserInfoService.java b/src/main/java/com/mpnp/baechelin/user/service/UserInfoService.java new file mode 100644 index 0000000..b9ce5d2 --- /dev/null +++ b/src/main/java/com/mpnp/baechelin/user/service/UserInfoService.java @@ -0,0 +1,24 @@ +package com.mpnp.baechelin.user.service; + +import com.mpnp.baechelin.user.dto.UserInfoResponseDto; +import com.mpnp.baechelin.user.entity.user.User; +import com.mpnp.baechelin.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Transactional +@Service +@RequiredArgsConstructor +public class UserInfoService { + private final UserRepository userRepository; + + // TODO Security 추가 후 변경할 예정 + // public UserInfoResponseDto giveUserInfo(User user){ + public UserInfoResponseDto giveUserInfo(Integer userId) { + User targetUser = userRepository.findById(userId).orElseThrow(() -> new IllegalArgumentException("test - no user")); + return new UserInfoResponseDto(targetUser); +// return new UserInfoResponseDto(user); + } +} From 12318475532abe343708b08d85d31aa5d5716d5c Mon Sep 17 00:00:00 2001 From: JSoi Date: Mon, 11 Jul 2022 13:58:58 +0900 Subject: [PATCH 3/3] =?UTF-8?q?#3=20[Update]=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bookmark, Store의 업데이트에 맞추어 UserInfo의 구조를 변경했습니다 --- build.gradle | 2 +- .../controller/BookmarkController.java | 4 +- .../bookmark/controller/FolderController.java | 10 +- .../baechelin/bookmark/domain/Folder.java | 3 +- .../bookmark/repository/FolderRepository.java | 2 +- .../bookmark/service/BookmarkService.java | 2 +- .../bookmark/service/FolderService.java | 3 +- .../{util => config/s3}/AmazonS3Config.java | 8 +- .../review/controller/ReviewController.java | 4 +- .../mpnp/baechelin/review/domain/Review.java | 2 +- .../review/service/ReviewService.java | 6 +- .../mpnp/baechelin/store/domain/Store.java | 2 +- .../user/controller/UserInfoController.java | 28 ++++ .../user/dto/UserInfoResponseDto.java | 120 ++++++++++++++++++ .../mpnp/baechelin/user/entity/user/User.java | 8 ++ .../user/service/UserInfoService.java | 24 ++++ 16 files changed, 205 insertions(+), 23 deletions(-) rename src/main/java/com/mpnp/baechelin/{util => config/s3}/AmazonS3Config.java (82%) create mode 100644 src/main/java/com/mpnp/baechelin/user/controller/UserInfoController.java create mode 100644 src/main/java/com/mpnp/baechelin/user/dto/UserInfoResponseDto.java create mode 100644 src/main/java/com/mpnp/baechelin/user/service/UserInfoService.java diff --git a/build.gradle b/build.gradle index 2e9ca99..586b9fc 100644 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.batch:spring-batch-test' testImplementation 'org.springframework.security:spring-security-test' -// WebClient + // WebClient compileOnly 'org.springframework.boot:spring-boot-starter-webflux' compileOnly 'org.projectreactor:reactor-spring:1.0.1.RELEASE' compileOnly 'org.apache.httpcomponents:httpclient:4.5.13' diff --git a/src/main/java/com/mpnp/baechelin/bookmark/controller/BookmarkController.java b/src/main/java/com/mpnp/baechelin/bookmark/controller/BookmarkController.java index 2274857..5ebad9e 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/controller/BookmarkController.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/controller/BookmarkController.java @@ -12,8 +12,8 @@ public class BookmarkController { private final BookmarkService bookmarkService; - /* 북마크 생성 폴더 담기 */ - @PostMapping("/api/bookmark") + /** 북마크 생성 폴더 담기 */ + @PostMapping("/bookmark") public void bookmark(@RequestBody BookmarkReqDTO bookmarkReqDTO){ bookmarkService.bookmark(bookmarkReqDTO); diff --git a/src/main/java/com/mpnp/baechelin/bookmark/controller/FolderController.java b/src/main/java/com/mpnp/baechelin/bookmark/controller/FolderController.java index 81ee7ca..f74774b 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/controller/FolderController.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/controller/FolderController.java @@ -16,8 +16,8 @@ public class FolderController { private final FolderService folderService; - /* 폴더 신규 생성 */ - @PostMapping("/api/folder") + /** 폴더 신규 생성 */ + @PostMapping("/folder") public void folder (@RequestBody FolderReqDTO folderReqDTO){ folderService.folder(folderReqDTO); @@ -25,7 +25,7 @@ public void folder (@RequestBody FolderReqDTO folderReqDTO){ /* 폴더 삭제 -> 삭제 시 안에 담긴 모든 북마크가 삭제됨 */ - @DeleteMapping("/api/folder/{folderId}") + @DeleteMapping("/folder/{folderId}") public void folderDelete (@PathVariable int folderId){ folderService.folderDelete(folderId); @@ -33,14 +33,14 @@ public void folderDelete (@PathVariable int folderId){ /* 폴더 명 변경 */ - @PutMapping("/api/folderUpdate/{folderId}") + @PutMapping("/folderUpdate/{folderId}") public void folderUpdate (@PathVariable int folderId, @RequestParam String newFolderName){ System.out.println(newFolderName); folderService.folderUpdate(folderId, newFolderName); } - @PutMapping("/api/folderList/{userId}") + @PutMapping("/folderList/{userId}") public List folderList (@PathVariable int userId){ return folderService.folderList(userId); diff --git a/src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java b/src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java index a3ffa82..19f2852 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java @@ -2,7 +2,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore; -import com.mpnp.baechelin.user.domain.User; + +import com.mpnp.baechelin.user.entity.user.User; import com.mpnp.baechelin.util.TimeStamped; import lombok.*; diff --git a/src/main/java/com/mpnp/baechelin/bookmark/repository/FolderRepository.java b/src/main/java/com/mpnp/baechelin/bookmark/repository/FolderRepository.java index 201df21..713254b 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/repository/FolderRepository.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/repository/FolderRepository.java @@ -1,7 +1,7 @@ package com.mpnp.baechelin.bookmark.repository; import com.mpnp.baechelin.bookmark.domain.Folder; -import com.mpnp.baechelin.user.domain.User; +import com.mpnp.baechelin.user.entity.user.User; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; diff --git a/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java b/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java index 4126385..57ca101 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java @@ -6,7 +6,7 @@ import com.mpnp.baechelin.bookmark.repository.BookmarkRepository; import com.mpnp.baechelin.bookmark.repository.FolderRepository; import com.mpnp.baechelin.store.domain.Store; -import com.mpnp.baechelin.store.domain.repository.StoreRepository; +import com.mpnp.baechelin.store.repository.StoreRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/mpnp/baechelin/bookmark/service/FolderService.java b/src/main/java/com/mpnp/baechelin/bookmark/service/FolderService.java index c041b9b..8a97eb3 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/service/FolderService.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/service/FolderService.java @@ -4,7 +4,8 @@ import com.mpnp.baechelin.bookmark.dto.FolderReqDTO; import com.mpnp.baechelin.bookmark.dto.FolderResDTO; import com.mpnp.baechelin.bookmark.repository.FolderRepository; -import com.mpnp.baechelin.user.domain.User; + +import com.mpnp.baechelin.user.entity.user.User; import com.mpnp.baechelin.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/mpnp/baechelin/util/AmazonS3Config.java b/src/main/java/com/mpnp/baechelin/config/s3/AmazonS3Config.java similarity index 82% rename from src/main/java/com/mpnp/baechelin/util/AmazonS3Config.java rename to src/main/java/com/mpnp/baechelin/config/s3/AmazonS3Config.java index 785558d..ed45345 100644 --- a/src/main/java/com/mpnp/baechelin/util/AmazonS3Config.java +++ b/src/main/java/com/mpnp/baechelin/config/s3/AmazonS3Config.java @@ -1,4 +1,4 @@ -package com.mpnp.baechelin.util; +package com.mpnp.baechelin.config.s3; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; @@ -11,13 +11,13 @@ @Configuration public class AmazonS3Config { - @Value("${cloud.aws.s3.accessKey}") + @Value("${cloud.aws.credentials.access-key}") private String accessKey; - @Value("${cloud.aws.s3.secretKey}") + @Value("${cloud.aws.credentials.secret-key}") private String secretKey; - @Value("${cloud.aws.s3.region}") + @Value("${cloud.aws.region.static}") private String region; @Bean diff --git a/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java b/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java index 056cf4f..6540203 100644 --- a/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java +++ b/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java @@ -18,7 +18,7 @@ public class ReviewController { private final ReviewService reviewService; /**리뷰 작성*/ - @PostMapping("/api/review") + @PostMapping("/review") public ReviewResDTO review(@RequestParam double point, @RequestParam String comment, @RequestParam int storeId, @@ -26,7 +26,7 @@ public ReviewResDTO review(@RequestParam double point, @RequestParam(required = false) MultipartFile imageFile) throws IOException { ReviewReqDTO reviewReqDTO =new ReviewReqDTO(); - reviewReqDTO + ReviewReqDTO .builder() .point(point) .comment(comment) diff --git a/src/main/java/com/mpnp/baechelin/review/domain/Review.java b/src/main/java/com/mpnp/baechelin/review/domain/Review.java index 141d83e..4befe6a 100644 --- a/src/main/java/com/mpnp/baechelin/review/domain/Review.java +++ b/src/main/java/com/mpnp/baechelin/review/domain/Review.java @@ -4,7 +4,7 @@ import com.mpnp.baechelin.review.service.ReviewService; import com.mpnp.baechelin.store.domain.Store; import com.mpnp.baechelin.tag.domain.Tag; -import com.mpnp.baechelin.user.domain.User; +import com.mpnp.baechelin.user.entity.user.User; import com.mpnp.baechelin.util.TimeStamped; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java b/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java index 9057534..f71cb3b 100644 --- a/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java +++ b/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java @@ -7,10 +7,10 @@ import com.mpnp.baechelin.review.dto.ReviewReqDTO; import com.mpnp.baechelin.review.repository.ReviewRepository; import com.mpnp.baechelin.store.domain.Store; -import com.mpnp.baechelin.store.domain.repository.StoreRepository; +import com.mpnp.baechelin.store.repository.StoreRepository; import com.mpnp.baechelin.tag.domain.Tag; import com.mpnp.baechelin.tag.repository.TagRepository; -import com.mpnp.baechelin.user.domain.User; +import com.mpnp.baechelin.user.entity.user.User; import com.mpnp.baechelin.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,7 +29,7 @@ @RequiredArgsConstructor public class ReviewService { private final ReviewRepository reviewRepository; - private final UserRepository userRepository; + private final UserRepository userRepository; private final StoreRepository storeRepository; private final TagRepository tagRepository; private final AmazonS3Client amazonS3Client; diff --git a/src/main/java/com/mpnp/baechelin/store/domain/Store.java b/src/main/java/com/mpnp/baechelin/store/domain/Store.java index 4c9b432..ec9cf10 100644 --- a/src/main/java/com/mpnp/baechelin/store/domain/Store.java +++ b/src/main/java/com/mpnp/baechelin/store/domain/Store.java @@ -56,7 +56,7 @@ public class Store { // 연관관계 매핑 @OneToMany(mappedBy = "store", cascade = CascadeType.ALL, orphanRemoval = true) - private List storeImageList; + private List storeImageList = new ArrayList<>(); public Store(PublicApiResponseDto.Row row) { //storeId - 임시 diff --git a/src/main/java/com/mpnp/baechelin/user/controller/UserInfoController.java b/src/main/java/com/mpnp/baechelin/user/controller/UserInfoController.java new file mode 100644 index 0000000..fbc99b7 --- /dev/null +++ b/src/main/java/com/mpnp/baechelin/user/controller/UserInfoController.java @@ -0,0 +1,28 @@ +package com.mpnp.baechelin.user.controller; + +import com.mpnp.baechelin.user.dto.UserInfoResponseDto; +import com.mpnp.baechelin.user.entity.user.User; +import com.mpnp.baechelin.user.service.UserInfoService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/userinfo") +@RequiredArgsConstructor +@Slf4j +public class UserInfoController { + private final UserInfoService userInfoService; + + @GetMapping + // Security 추가 후 변경할 예정 +// public ResponseEntity getUserInfo(@AuthenticationPrincipal User user) { + public ResponseEntity getUserInfo(@RequestParam Integer userId) { + log.warn("USERID {} " , userId); +// return new ResponseEntity<>(userInfoService.giveUserInfo(user), HttpStatus.OK); + return new ResponseEntity<>(userInfoService.giveUserInfo(userId), HttpStatus.OK); + } +} diff --git a/src/main/java/com/mpnp/baechelin/user/dto/UserInfoResponseDto.java b/src/main/java/com/mpnp/baechelin/user/dto/UserInfoResponseDto.java new file mode 100644 index 0000000..5b8775a --- /dev/null +++ b/src/main/java/com/mpnp/baechelin/user/dto/UserInfoResponseDto.java @@ -0,0 +1,120 @@ +package com.mpnp.baechelin.user.dto; + + +import com.mpnp.baechelin.bookmark.domain.Bookmark; +import com.mpnp.baechelin.bookmark.domain.Folder; +import com.mpnp.baechelin.review.domain.Review; +import com.mpnp.baechelin.tag.domain.Tag; +import com.mpnp.baechelin.user.entity.user.User; +import lombok.*; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class UserInfoResponseDto { + // User info + private String name; + private List reviewList; + private List bookmarkFolderList; + + public UserInfoResponseDto(User user) { + this.name = user.getName(); + this.reviewList = user.getReviewList().stream().map(ReviewResponseDto::new).collect(Collectors.toList()); + this.bookmarkFolderList = user.getFolderList().stream().map(BookmarkFolderResponseDto::new).collect(Collectors.toList()); + //folder + + } + + @Builder + @AllArgsConstructor + @NoArgsConstructor + @Getter + static class BookmarkFolderResponseDto { + private int userId; + private List folders; // 폴더 여러 개 + + public BookmarkFolderResponseDto(Folder folder) { + this.userId = folder.getUserId().getId(); + this.folders = folder.getBookmarkList().stream().map(BookmarkResponseDto::new).collect(Collectors.toList()); + } + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + static class BookmarkResponseDto { + private int folderId; + private int storeId; + + public BookmarkResponseDto(Bookmark bookmark){ + this.folderId = bookmark.getFolderId().getId(); + this.storeId = bookmark.getStoreId().getId(); + } + } + + @Builder + @AllArgsConstructor + @NoArgsConstructor + @Getter + static class ReviewResponseDto { + int id; // storeId + int review; // reviewId + Double point; + + String comment; + String reviewImageUrl; + + TagResponseDto tag; + + LocalDateTime createdAt; + LocalDateTime modifiedAt; + + public ReviewResponseDto(Review review) { + this.id = review.getStoreId().getId(); + this.review = review.getId(); + this.point = review.getPoint(); + this.comment = review.getReview(); + this.reviewImageUrl = review.getReviewImageUrl(); + this.tag = new TagResponseDto(review.getTagId(), review); + } + } + + @Builder + @AllArgsConstructor + @NoArgsConstructor + @Getter + static class TagResponseDto { + int id; // 태그 아이디 + int review; // 리뷰 아이디 + + @Builder.Default + char bKiosk = 'N', bTable = 'N', bMenu = 'N', bWheelchair = 'N', bHelp = 'N', bAutoDoor = 'N'; + @Builder.Default + char fDelicious = 'N', fClean = 'N', fVibe = 'N', fQuantity = 'N', fPrice = 'N', fGoodToEat = 'N'; + + public TagResponseDto(Tag tag, Review review) { + this.id = tag.getId(); + this.review = review.getId(); + this.bKiosk = tag.getBKiosk(); + this.bTable = tag.getBTable(); + this.bMenu = tag.getBMenu(); + this.bWheelchair = tag.getBWheelchair(); + this.bHelp = tag.getBHelp(); + this.bAutoDoor = tag.getBAutoDoor(); + this.fDelicious = tag.getFDelicious(); + this.fClean = tag.getFClean(); + this.fVibe = tag.getFVibe(); + this.fQuantity = tag.getFQuantity(); + this.fPrice = tag.getFPrice(); + this.fGoodToEat = tag.getFGoodToEat(); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/mpnp/baechelin/user/entity/user/User.java b/src/main/java/com/mpnp/baechelin/user/entity/user/User.java index cd47a62..68b7867 100644 --- a/src/main/java/com/mpnp/baechelin/user/entity/user/User.java +++ b/src/main/java/com/mpnp/baechelin/user/entity/user/User.java @@ -1,6 +1,7 @@ package com.mpnp.baechelin.user.entity.user; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.mpnp.baechelin.bookmark.domain.Folder; import com.mpnp.baechelin.oauth.entity.ProviderType; import com.mpnp.baechelin.oauth.entity.RoleType; import com.mpnp.baechelin.review.domain.Review; @@ -14,6 +15,7 @@ import javax.persistence.*; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import java.util.ArrayList; import java.util.List; @Entity @@ -70,4 +72,10 @@ public User(String socialId, this.providerType = providerType; this.roleType = roleType; } + + @OneToMany(mappedBy = "userId", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewList; + + @OneToMany(mappedBy = "userId", cascade = CascadeType.ALL, orphanRemoval = true) + private List folderList = new ArrayList<>(); } diff --git a/src/main/java/com/mpnp/baechelin/user/service/UserInfoService.java b/src/main/java/com/mpnp/baechelin/user/service/UserInfoService.java new file mode 100644 index 0000000..b9ce5d2 --- /dev/null +++ b/src/main/java/com/mpnp/baechelin/user/service/UserInfoService.java @@ -0,0 +1,24 @@ +package com.mpnp.baechelin.user.service; + +import com.mpnp.baechelin.user.dto.UserInfoResponseDto; +import com.mpnp.baechelin.user.entity.user.User; +import com.mpnp.baechelin.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; + +@Transactional +@Service +@RequiredArgsConstructor +public class UserInfoService { + private final UserRepository userRepository; + + // TODO Security 추가 후 변경할 예정 + // public UserInfoResponseDto giveUserInfo(User user){ + public UserInfoResponseDto giveUserInfo(Integer userId) { + User targetUser = userRepository.findById(userId).orElseThrow(() -> new IllegalArgumentException("test - no user")); + return new UserInfoResponseDto(targetUser); +// return new UserInfoResponseDto(user); + } +}