From d802ec50b869c3f85955cda6a23eef8fb744a031 Mon Sep 17 00:00:00 2001 From: hsuush Date: Sun, 14 Jan 2024 20:25:45 +0900 Subject: [PATCH 01/23] =?UTF-8?q?feat=20:=20=ED=8A=B9=EC=A0=95=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=9D=98=20=EC=A0=95=EB=B3=B4=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/follow/FollowsRepository.java | 11 ++++++++ .../ReviewZIP/domain/store/Stores.java | 1 - .../example/ReviewZIP/domain/user/Users.java | 4 +++ .../domain/user/UsersController.java | 23 ++++++++++++++++ .../ReviewZIP/domain/user/UsersConverter.java | 19 ++++++++++++++ .../domain/user/UsersRepository.java | 8 ++++++ .../ReviewZIP/domain/user/UsersService.java | 26 +++++++++++++++++++ .../user/dto/request/OtherInfoReqDto.java | 8 ++++++ .../user/dto/response/OtherInfoResDto.java | 20 ++++++++++++++ 9 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersService.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoReqDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java new file mode 100644 index 00000000..a480db40 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java @@ -0,0 +1,11 @@ +package com.example.ReviewZIP.domain.follow; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FollowsRepository extends JpaRepository { + Integer countBySenderId(Long userId); + + Integer countByReceiverId(Long userid); +} diff --git a/src/main/java/com/example/ReviewZIP/domain/store/Stores.java b/src/main/java/com/example/ReviewZIP/domain/store/Stores.java index d4580b02..13bb9b94 100644 --- a/src/main/java/com/example/ReviewZIP/domain/store/Stores.java +++ b/src/main/java/com/example/ReviewZIP/domain/store/Stores.java @@ -1,6 +1,5 @@ package com.example.ReviewZIP.domain.store; -import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.global.entity.BaseEntity; import com.example.ReviewZIP.post.Posts; import jakarta.persistence.*; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 0e128afd..acc6db31 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -1,6 +1,7 @@ package com.example.ReviewZIP.domain.user; import com.example.ReviewZIP.domain.follow.Follows; +import com.example.ReviewZIP.domain.image.Images; import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; @@ -43,6 +44,9 @@ public class Users extends BaseEntity { @Enumerated(EnumType.STRING) private Status status; + @OneToOne(mappedBy = "user", cascade = CascadeType.ALL) + private Images image; + @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) private List followingList = new ArrayList<>(); diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java new file mode 100644 index 00000000..312a3805 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -0,0 +1,23 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResDto; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static org.springframework.http.ResponseEntity.ok; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v1/users") +public class UsersController { + private final UsersService usersService; + @GetMapping("/{userId}") + public ResponseEntity getOtherInfo(@PathVariable(name = "userId") Long userId){ + + return ResponseEntity.ok(usersService.getOtherInfo(userId)); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java new file mode 100644 index 00000000..1c67cfe1 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -0,0 +1,19 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResDto; + +public class UsersConverter { + public static OtherInfoResDto toOtherInfoDto(Users user, Integer followingNum, Integer followerNum){ + + String imageUrl = (user.getImage() != null) ? user.getImage().getUrl() : null; + + return OtherInfoResDto.builder() + .userId(user.getId()) + .name(user.getName()) + .nickname(user.getNickname()) + .imageUrl(imageUrl) + .followingNum(followingNum) + .followerNum(followerNum) + .build(); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java new file mode 100644 index 00000000..745a9d50 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.user; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UsersRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java new file mode 100644 index 00000000..59617680 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -0,0 +1,26 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.follow.FollowsRepository; +import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class UsersService { + private final UsersRepository usersRepository; + private final FollowsRepository followsRepository; + @Transactional + public OtherInfoResDto getOtherInfo(Long userId){ + Users other = usersRepository.findById(userId) + .orElseThrow(()->new IllegalArgumentException("not found user")); + + Integer followingNum = followsRepository.countBySenderId(userId); + Integer followerNum = followsRepository.countByReceiverId(userId); + + return UsersConverter.toOtherInfoDto(other, followingNum, followerNum); + } + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoReqDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoReqDto.java new file mode 100644 index 00000000..adf65c98 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoReqDto.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.domain.user.dto.request; + +import lombok.Getter; + +@Getter +public class OtherInfoReqDto { + private Long userId; +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResDto.java new file mode 100644 index 00000000..9c027880 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResDto.java @@ -0,0 +1,20 @@ +package com.example.ReviewZIP.domain.user.dto.response; + +import com.example.ReviewZIP.domain.image.Images; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OtherInfoResDto { + private Long userId; + private String name; + private String nickname; + private String imageUrl; + private Integer followingNum; + private Integer followerNum; +} From b6fd74570e2530ee290532e6852b64cc1681bf05 Mon Sep 17 00:00:00 2001 From: hsuush Date: Mon, 15 Jan 2024 00:51:49 +0900 Subject: [PATCH 02/23] =?UTF-8?q?feat=20:=20=ED=8A=B9=EC=A0=95=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=9D=98=20=EC=A0=95=EB=B3=B4=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/ReviewZIP/domain/image/Images.java | 5 ----- src/main/java/com/example/ReviewZIP/domain/user/Users.java | 2 ++ .../com/example/ReviewZIP/domain/user/UsersConverter.java | 2 +- src/main/java/com/example/ReviewZIP/post/Posts.java | 2 +- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/image/Images.java b/src/main/java/com/example/ReviewZIP/domain/image/Images.java index e3877c29..c5fa7c02 100644 --- a/src/main/java/com/example/ReviewZIP/domain/image/Images.java +++ b/src/main/java/com/example/ReviewZIP/domain/image/Images.java @@ -1,6 +1,5 @@ package com.example.ReviewZIP.domain.image; -import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.global.entity.BaseEntity; import com.example.ReviewZIP.post.Posts; import jakarta.persistence.*; @@ -27,10 +26,6 @@ public class Images extends BaseEntity { @Column(nullable = false) private String url; - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private Users user; - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "post_id") private Posts post; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index acc6db31..12de7145 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -41,6 +41,8 @@ public class Users extends BaseEntity { @Column(nullable = false) private String nickname; + private String imageUrl; + @Enumerated(EnumType.STRING) private Status status; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index 1c67cfe1..eda3aa5c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -5,7 +5,7 @@ public class UsersConverter { public static OtherInfoResDto toOtherInfoDto(Users user, Integer followingNum, Integer followerNum){ - String imageUrl = (user.getImage() != null) ? user.getImage().getUrl() : null; + String imageUrl = (user.getImage() != null) ? user.getImageUrl() : null; return OtherInfoResDto.builder() .userId(user.getId()) diff --git a/src/main/java/com/example/ReviewZIP/post/Posts.java b/src/main/java/com/example/ReviewZIP/post/Posts.java index 9c6b2196..fad6424e 100644 --- a/src/main/java/com/example/ReviewZIP/post/Posts.java +++ b/src/main/java/com/example/ReviewZIP/post/Posts.java @@ -30,7 +30,7 @@ public class Posts { private Double point; @Column(nullable = false) - private Boolean read; + private Boolean is_read; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") From d027a7bc41c6759a3a034f7c35289628c1903146 Mon Sep 17 00:00:00 2001 From: hsuush Date: Wed, 17 Jan 2024 18:34:55 +0900 Subject: [PATCH 03/23] =?UTF-8?q?feat=20:=20=ED=8A=B9=EC=A0=95=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=9D=98=20=EC=A0=95=EB=B3=B4=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/ReviewZIP/domain/user/Users.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 12de7145..ff7c1f60 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -2,6 +2,7 @@ import com.example.ReviewZIP.domain.follow.Follows; import com.example.ReviewZIP.domain.image.Images; +import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; @@ -41,13 +42,11 @@ public class Users extends BaseEntity { @Column(nullable = false) private String nickname; - private String imageUrl; + private String profileUrl; @Enumerated(EnumType.STRING) private Status status; - @OneToOne(mappedBy = "user", cascade = CascadeType.ALL) - private Images image; @OneToMany(mappedBy = "sender", cascade = CascadeType.ALL) private List followingList = new ArrayList<>(); @@ -57,4 +56,7 @@ public class Users extends BaseEntity { @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List scrabList = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) + private List postList = new ArrayList<>(); } From ae65ad0b53c425ddfb82b2066f6f18de2c90f4b4 Mon Sep 17 00:00:00 2001 From: hsuush Date: Wed, 17 Jan 2024 19:18:10 +0900 Subject: [PATCH 04/23] =?UTF-8?q?feat=20:=20=ED=8A=B9=EC=A0=95=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=9D=98=20=EC=A0=95=EB=B3=B4=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/user/UsersController.java | 4 ++-- .../com/example/ReviewZIP/domain/user/UsersConverter.java | 8 ++++---- .../com/example/ReviewZIP/domain/user/UsersService.java | 4 ++-- .../{OtherInfoReqDto.java => OtherInfoRequestDto.java} | 2 +- .../{OtherInfoResDto.java => OtherInfoResponseDto.java} | 5 ++--- 5 files changed, 11 insertions(+), 12 deletions(-) rename src/main/java/com/example/ReviewZIP/domain/user/dto/request/{OtherInfoReqDto.java => OtherInfoRequestDto.java} (76%) rename src/main/java/com/example/ReviewZIP/domain/user/dto/response/{OtherInfoResDto.java => OtherInfoResponseDto.java} (77%) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index 312a3805..fed8757d 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -1,6 +1,6 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResDto; +import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -16,7 +16,7 @@ public class UsersController { private final UsersService usersService; @GetMapping("/{userId}") - public ResponseEntity getOtherInfo(@PathVariable(name = "userId") Long userId){ + public ResponseEntity getOtherInfo(@PathVariable(name = "userId") Long userId){ return ResponseEntity.ok(usersService.getOtherInfo(userId)); } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index 3d93593a..cf3a683c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -1,17 +1,17 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResDto; +import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResponseDto; public class UsersConverter { - public static OtherInfoResDto toOtherInfoDto(Users user, Integer followingNum, Integer followerNum){ + public static OtherInfoResponseDto toOtherInfoDto(Users user, Integer followingNum, Integer followerNum){ String imageUrl = (user.getProfileUrl() != null) ? user.getProfileUrl() : null; - return OtherInfoResDto.builder() + return OtherInfoResponseDto.builder() .userId(user.getId()) .name(user.getName()) .nickname(user.getNickname()) - .imageUrl(imageUrl) + .profileUrl(imageUrl) .followingNum(followingNum) .followerNum(followerNum) .build(); diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index 59617680..ad855bc3 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -1,7 +1,7 @@ package com.example.ReviewZIP.domain.user; import com.example.ReviewZIP.domain.follow.FollowsRepository; -import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResDto; +import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -13,7 +13,7 @@ public class UsersService { private final UsersRepository usersRepository; private final FollowsRepository followsRepository; @Transactional - public OtherInfoResDto getOtherInfo(Long userId){ + public OtherInfoResponseDto getOtherInfo(Long userId){ Users other = usersRepository.findById(userId) .orElseThrow(()->new IllegalArgumentException("not found user")); diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoReqDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoRequestDto.java similarity index 76% rename from src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoReqDto.java rename to src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoRequestDto.java index adf65c98..ae59679e 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoReqDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoRequestDto.java @@ -3,6 +3,6 @@ import lombok.Getter; @Getter -public class OtherInfoReqDto { +public class OtherInfoRequestDto { private Long userId; } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResponseDto.java similarity index 77% rename from src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResDto.java rename to src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResponseDto.java index 9c027880..ad3fa44b 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResDto.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResponseDto.java @@ -1,6 +1,5 @@ package com.example.ReviewZIP.domain.user.dto.response; -import com.example.ReviewZIP.domain.image.Images; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -10,11 +9,11 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class OtherInfoResDto { +public class OtherInfoResponseDto { private Long userId; private String name; private String nickname; - private String imageUrl; + private String profileUrl; private Integer followingNum; private Integer followerNum; } From c781529a41e289fc2898f6c1e6158ffe97c6bada Mon Sep 17 00:00:00 2001 From: YPYP333YPYP Date: Thu, 18 Jan 2024 00:38:27 +0900 Subject: [PATCH 05/23] =?UTF-8?q?feat=20:=20=ED=8F=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=97=90=20=EA=B3=B5=EA=B0=90=20=EB=88=84=EB=A5=B8=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EB=AA=A9=EB=A1=9D=20=EA=B0=80=EC=A0=B8=EC=98=A4?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/ReviewZipApplication.java | 6 +- .../example/ReviewZIP/domain/post/Posts.java | 1 + .../domain/postLike/PostLikesController.java | 28 +++++++++ .../domain/postLike/PostLikesRepository.java | 15 +++++ .../domain/postLike/PostLikesService.java | 29 +++++++++ .../ReviewZIP/domain/user/UsersConverter.java | 39 ++++++++++++ .../user/dto/response/UserResponseDTO.java | 60 +++++++++++++++++++ 7 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesService.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java diff --git a/src/main/java/com/example/ReviewZIP/ReviewZipApplication.java b/src/main/java/com/example/ReviewZIP/ReviewZipApplication.java index 3ee22aff..06709739 100644 --- a/src/main/java/com/example/ReviewZIP/ReviewZipApplication.java +++ b/src/main/java/com/example/ReviewZIP/ReviewZipApplication.java @@ -2,10 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -@SpringBootApplication() -public class ReviewZipApplication(exclude = SecurityAutoConfiguration.class) { +@SpringBootApplication(exclude = SecurityAutoConfiguration.class) +public class ReviewZipApplication { public static void main(String[] args) { SpringApplication.run(ReviewZipApplication.class, args); diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java index ee0b7334..1bf6d90c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -4,6 +4,7 @@ import com.example.ReviewZIP.domain.postHashtag.PostHashtags; import com.example.ReviewZIP.domain.postLike.PostLikes; import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java new file mode 100644 index 00000000..51cef137 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java @@ -0,0 +1,28 @@ +package com.example.ReviewZIP.domain.postLike; + + + +import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.domain.user.UsersConverter; +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v1/posts") +public class PostLikesController { + + private final PostLikesService postLikesService; + + + @GetMapping("/{postId}/users") + public ResponseEntity getUsersByPostIdFromPostLikes(@PathVariable Long postId, @RequestParam (defaultValue = "0") Integer page) { + Page pageUsers = postLikesService.getUsersByPostId(postId, page); + UserResponseDTO.UserListDTO userListDTO = UsersConverter.convertToUserListDTO(pageUsers); + return ResponseEntity.ok(userListDTO); + } + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java new file mode 100644 index 00000000..ef5c3b74 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java @@ -0,0 +1,15 @@ +package com.example.ReviewZIP.domain.postLike; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface PostLikesRepository extends JpaRepository { + Optional findByPostIdAndUserId(Long postId, Long userId); + + Page findAllByPostId(Long postId, Pageable pageable); +} diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesService.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesService.java new file mode 100644 index 00000000..4db2908e --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesService.java @@ -0,0 +1,29 @@ +package com.example.ReviewZIP.domain.postLike; + +import com.example.ReviewZIP.domain.user.Users; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; + +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class PostLikesService{ + + private final PostLikesRepository postLikesRepository; + + + public Page getUsersByPostId(Long postId, Integer page) { + Page postLikesList = postLikesRepository.findAllByPostId(postId, PageRequest.of(page, 10)); + return new PageImpl<>( + postLikesList.getContent().stream() + .map(PostLikes::getUser) + .collect(Collectors.toList()), + postLikesList.getPageable(), + postLikesList.getTotalElements() + ); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java new file mode 100644 index 00000000..9cff25c1 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -0,0 +1,39 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDTO; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.stream.Collectors; + +public class UsersConverter { + public static UserResponseDTO.UserDTO convertToUserDTO(Users user) { + return UserResponseDTO.UserDTO.builder() + .id(user.getId()) + .email(user.getEmail()) + .name(user.getName()) + .user_id(user.getUser_id()) + .password(user.getPassword()) + .phone_num(user.getPhone_num()) + .nickname(user.getNickname()) + .status(user.getStatus()) + .createdAt(user.getCreatedAt()) + .updatedAt(user.getUpdatedAt()) + .build(); + } + + public static UserResponseDTO.UserListDTO convertToUserListDTO(Page userList) { + List userDTOList = userList.stream() + .map(UsersConverter::convertToUserDTO) + .collect(Collectors.toList()); + + return UserResponseDTO.UserListDTO.builder() + .isLast(userList.isLast()) + .isFirst(userList.isFirst()) + .totalPage(userList.getTotalPages()) + .totalElements(userList.getTotalElements()) + .listSize(userDTOList.size()) + .userList(userDTOList) + .build(); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java new file mode 100644 index 00000000..795c2f03 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java @@ -0,0 +1,60 @@ +package com.example.ReviewZIP.domain.user.dto.response; + + +import com.example.ReviewZIP.domain.user.Status; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; +import java.util.List; + +public class UserResponseDTO { + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class UserListDTO { + List userList; + Integer listSize; + Integer totalPage; + Long totalElements; + Boolean isFirst; + Boolean isLast; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class UserDTO { + @NotNull + private Long id; + + @NotBlank + private String email; + + @NotBlank + private String name; + + @NotBlank + private String user_id; + + @NotBlank + private String password; + + @NotBlank + private String phone_num; + + @NotBlank + private String nickname; + private Status status; + + private LocalDate createdAt; + private LocalDate updatedAt; + } +} + From 573c1f314edf7c9bf0cf4fa69fc42e8cf487de7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sat, 20 Jan 2024 01:14:06 +0900 Subject: [PATCH 06/23] =?UTF-8?q?fix=20:=20ApiResponse=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/post/PostsRepository.java | 10 ++++++ .../domain/user/UsersController.java | 31 +++++++++++++++++ .../ReviewZIP/domain/user/UsersConverter.java | 33 ++++++++++++++++++ .../domain/user/UsersRepository.java | 6 ++++ .../ReviewZIP/domain/user/UsersService.java | 28 +++++++++++++++ .../user/dto/response/UserResponseDto.java | 34 +++++++++++++++++++ .../response/code/resultCode/ErrorStatus.java | 1 + 7 files changed, 143 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/UsersService.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java new file mode 100644 index 00000000..1d09deba --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java @@ -0,0 +1,10 @@ +package com.example.ReviewZIP.domain.post; + +import com.example.ReviewZIP.domain.user.Users; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PostsRepository extends JpaRepository { + Page findAllByUser(Users user, PageRequest pageRequest); +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java new file mode 100644 index 00000000..f4ae8479 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -0,0 +1,31 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; +import com.example.ReviewZIP.global.response.ApiResponse; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.PostsHandler; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v1/users") +public class UsersController { + + private final UsersService usersService; + + @GetMapping("/me/posts") + public ApiResponse getUserPostList(@RequestParam(name = "page")Integer page, @RequestParam(name = "size")Integer size){ + Page UserPage = usersService.getUserPostList(page, size); + + if(UserPage.isEmpty()){ + throw new PostsHandler(ErrorStatus.POST_LIST_NOT_FOUND); + } + return ApiResponse.onSuccess(UsersConverter.toPostPreviewListDto(UserPage)); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java new file mode 100644 index 00000000..61386c38 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -0,0 +1,33 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.stream.Collectors; + +public class UsersConverter { + public static UserResponseDto.PostPreviewDto toUserPostPreviewDto(Posts post){ + return UserResponseDto.PostPreviewDto.builder() + .postId(post.getId()) + .likeNum(post.getPostLikeList().size()) + .scrabNum(post.getScrabList().size()) + .postImageUrl(post.getPostImageList().get(0).getUrl()) + .build(); + } + + public static UserResponseDto.PostPreviewListDto toPostPreviewListDto(Page postList){ + List userPostPriviewDtoList = postList.stream() + .map(UsersConverter::toUserPostPreviewDto).collect(Collectors.toList()); + + return UserResponseDto.PostPreviewListDto.builder() + .isLast(postList.isLast()) + .isFirst(postList.isFirst()) + .totalElements(postList.getTotalElements()) + .totalPage(postList.getTotalPages()) + .listSize(userPostPriviewDtoList.size()) + .postList(userPostPriviewDtoList) + .build(); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java new file mode 100644 index 00000000..7e9d8285 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersRepository.java @@ -0,0 +1,6 @@ +package com.example.ReviewZIP.domain.user; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UsersRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java new file mode 100644 index 00000000..21fa99ba --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -0,0 +1,28 @@ +package com.example.ReviewZIP.domain.user; + +import com.example.ReviewZIP.domain.post.Posts; +import com.example.ReviewZIP.domain.post.PostsRepository; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class UsersService { + private final UsersRepository usersRepository; + private final PostsRepository postsRepository; + public Page getUserPostList(Integer page, Integer size ){ + // 유저의 값은 1L이라 가정. 가져올땐 로그인 후에 사용자의 id값을 가져옴. + Users user = usersRepository.findById(1L).orElseThrow(()-> new UsersHandler(ErrorStatus.USER_NOT_FOUND)); + + Page PostPage = postsRepository.findAllByUser(user, PageRequest.of(page, size)); + + return PostPage; + + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java new file mode 100644 index 00000000..32788d4f --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java @@ -0,0 +1,34 @@ +package com.example.ReviewZIP.domain.user.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +public class UserResponseDto { + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class PostPreviewListDto{ + private List postList; + private Integer listSize; + private Integer totalPage; + private Long totalElements; + private Boolean isFirst; + private Boolean isLast; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class PostPreviewDto{ + private Long postId; + private String postImageUrl; + private Integer likeNum; + private Integer scrabNum; + } +} diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java index cce53c6c..f3d7c810 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java +++ b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java @@ -35,6 +35,7 @@ public enum ErrorStatus implements BaseErrorCode { POST_NOT_FOUND(HttpStatus.NOT_FOUND, "POST401", "게시글을 찾을 수 없습니다."), LIKE_PERSON_NOT_FOUND(HttpStatus.BAD_REQUEST, "POST402", "공감 누른 사람을 찾을 수 없습니다."), POST_CREATE_FAIL(HttpStatus.BAD_REQUEST,"POST403", "게시글 작성에 실패하였습니다"), + POST_LIST_NOT_FOUND(HttpStatus.BAD_REQUEST,"POST404", "게시글 목록을 찾을 수 없습니다."), // Hashtag HASHTAG_NOT_FOUND(HttpStatus.NOT_FOUND, "HASHTAG401", "존재하지 않는 해쉬태그입니다."), From a033c0bdaa2cbe80add24f9bdde1f747a71c2f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sat, 20 Jan 2024 09:06:23 +0900 Subject: [PATCH 07/23] =?UTF-8?q?fix=20:=20ApiResponse=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 --- .../domain/follow/FollowsRepository.java | 3 +++ .../domain/user/UsersController.java | 7 +++--- .../ReviewZIP/domain/user/UsersConverter.java | 7 +++--- .../ReviewZIP/domain/user/UsersService.java | 13 +++++++---- .../dto/response/OtherInfoResponseDto.java | 19 ---------------- .../user/dto/response/UserResponseDto.java | 22 +++++++++++++++++++ 6 files changed, 42 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResponseDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java index a480db40..e5fcdf65 100644 --- a/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java +++ b/src/main/java/com/example/ReviewZIP/domain/follow/FollowsRepository.java @@ -1,5 +1,6 @@ package com.example.ReviewZIP.domain.follow; +import com.example.ReviewZIP.domain.user.Users; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -8,4 +9,6 @@ public interface FollowsRepository extends JpaRepository { Integer countBySenderId(Long userId); Integer countByReceiverId(Long userid); + + boolean existsBySenderAndReceiver(Users sender, Users receiver); } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index fed8757d..d06c5d0c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -1,6 +1,7 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResponseDto; +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; +import com.example.ReviewZIP.global.response.ApiResponse; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -16,8 +17,8 @@ public class UsersController { private final UsersService usersService; @GetMapping("/{userId}") - public ResponseEntity getOtherInfo(@PathVariable(name = "userId") Long userId){ + public ApiResponse getOtherInfo(@PathVariable(name = "userId") Long userId){ - return ResponseEntity.ok(usersService.getOtherInfo(userId)); + return ApiResponse.onSuccess(usersService.getOtherInfo(userId)); } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index cf3a683c..1ecf0782 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -1,19 +1,20 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResponseDto; +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; public class UsersConverter { - public static OtherInfoResponseDto toOtherInfoDto(Users user, Integer followingNum, Integer followerNum){ + public static UserResponseDto.OtherInfoDto toOtherInfoDto(Users user, Integer followingNum, Integer followerNum, boolean isFollowing){ String imageUrl = (user.getProfileUrl() != null) ? user.getProfileUrl() : null; - return OtherInfoResponseDto.builder() + return UserResponseDto.OtherInfoDto.builder() .userId(user.getId()) .name(user.getName()) .nickname(user.getNickname()) .profileUrl(imageUrl) .followingNum(followingNum) .followerNum(followerNum) + .isFollowing(isFollowing) .build(); } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java index ad855bc3..88459fd4 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersService.java @@ -1,7 +1,9 @@ package com.example.ReviewZIP.domain.user; import com.example.ReviewZIP.domain.follow.FollowsRepository; -import com.example.ReviewZIP.domain.user.dto.response.OtherInfoResponseDto; +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -13,14 +15,17 @@ public class UsersService { private final UsersRepository usersRepository; private final FollowsRepository followsRepository; @Transactional - public OtherInfoResponseDto getOtherInfo(Long userId){ + public UserResponseDto.OtherInfoDto getOtherInfo(Long userId){ + // 사용자 임의 처리, 1L 가정 + Users me = usersRepository.getById(1L); Users other = usersRepository.findById(userId) - .orElseThrow(()->new IllegalArgumentException("not found user")); + .orElseThrow(()->new UsersHandler(ErrorStatus.USER_NOT_FOUND)); Integer followingNum = followsRepository.countBySenderId(userId); Integer followerNum = followsRepository.countByReceiverId(userId); + boolean isFollowing = followsRepository.existsBySenderAndReceiver(me, other); - return UsersConverter.toOtherInfoDto(other, followingNum, followerNum); + return UsersConverter.toOtherInfoDto(other, followingNum, followerNum, isFollowing); } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResponseDto.java deleted file mode 100644 index ad3fa44b..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/OtherInfoResponseDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.ReviewZIP.domain.user.dto.response; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class OtherInfoResponseDto { - private Long userId; - private String name; - private String nickname; - private String profileUrl; - private Integer followingNum; - private Integer followerNum; -} diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java new file mode 100644 index 00000000..cddfa9e4 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDto.java @@ -0,0 +1,22 @@ +package com.example.ReviewZIP.domain.user.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +public class UserResponseDto { + @Getter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class OtherInfoDto { + private Long userId; + private String name; + private String nickname; + private String profileUrl; + private Integer followingNum; + private Integer followerNum; + private boolean isFollowing; + } +} From ee3bc93d823d66a9c0a8fd30d7cb63070123f8b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sat, 20 Jan 2024 16:14:37 +0900 Subject: [PATCH 08/23] =?UTF-8?q?feat=20:=20=EA=B2=8C=EC=8B=9C=EA=B8=80?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=A7=84=ED=96=89=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/post/PostsContoroller.java | 21 +++++++++++++++++++ .../ReviewZIP/domain/post/PostsConverter.java | 5 +++++ .../domain/post/PostsRepository.java | 7 +++++++ .../ReviewZIP/domain/post/PostsService.java | 10 +++++++++ 4 files changed, 43 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsService.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java new file mode 100644 index 00000000..28b9ed23 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java @@ -0,0 +1,21 @@ +package com.example.ReviewZIP.domain.post; + +import com.example.ReviewZIP.global.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v1/posts") +public class PostsContoroller { + private final PostsService postsService; + + @DeleteMapping("/{postId}") + public ApiResponse deletePost(@PathVariable(name = "postId") Long postId){ + return ApiResponse.onSuccess(null); + } + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java new file mode 100644 index 00000000..1c692d95 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java @@ -0,0 +1,5 @@ +package com.example.ReviewZIP.domain.post; + +public class PostsConverter { + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java new file mode 100644 index 00000000..ae1ea90c --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java @@ -0,0 +1,7 @@ +package com.example.ReviewZIP.domain.post; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PostsRepository extends JpaRepository { + +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java new file mode 100644 index 00000000..34fe3c63 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java @@ -0,0 +1,10 @@ +package com.example.ReviewZIP.domain.post; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class PostsService { + +} From d86993bd2cb087018d43d80f71cb2b41f11277b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sat, 20 Jan 2024 18:08:34 +0900 Subject: [PATCH 09/23] =?UTF-8?q?feat=20:=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/image/ImagesRepository.java | 6 ++++++ .../example/ReviewZIP/domain/post/PostsContoroller.java | 1 + .../example/ReviewZIP/domain/postHashtag/PostHashtags.java | 4 +--- .../domain/postHashtag/PostHashtagsRepository.java | 6 ++++++ .../ReviewZIP/domain/postLike/PostLikesRepository.java | 6 ++++++ .../example/ReviewZIP/domain/scrab/ScrabsRepository.java | 6 ++++++ .../example/ReviewZIP/domain/store/StoresRepository.java | 7 +++++++ 7 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/store/StoresRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java b/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java new file mode 100644 index 00000000..021c4ec1 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java @@ -0,0 +1,6 @@ +package com.example.ReviewZIP.domain.image; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ImagesRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java index 28b9ed23..53f4ae23 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java @@ -15,6 +15,7 @@ public class PostsContoroller { @DeleteMapping("/{postId}") public ApiResponse deletePost(@PathVariable(name = "postId") Long postId){ + postsService.deletePost(postId); return ApiResponse.onSuccess(null); } diff --git a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtags.java b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtags.java index 0549a25b..ed0159ab 100644 --- a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtags.java +++ b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtags.java @@ -22,8 +22,6 @@ public class PostHashtags { @JoinColumn(name = "post_id") private Posts post; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "hashtag_id") - private Hashtags hashtag; + private String hashtag; } diff --git a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java new file mode 100644 index 00000000..ffcb41b3 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java @@ -0,0 +1,6 @@ +package com.example.ReviewZIP.domain.postHashtag; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PostHashtagsRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java new file mode 100644 index 00000000..11310491 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java @@ -0,0 +1,6 @@ +package com.example.ReviewZIP.domain.postLike; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PostLikesRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java b/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java new file mode 100644 index 00000000..d4a21b84 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java @@ -0,0 +1,6 @@ +package com.example.ReviewZIP.domain.scrab; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ScrabsRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/store/StoresRepository.java b/src/main/java/com/example/ReviewZIP/domain/store/StoresRepository.java new file mode 100644 index 00000000..f4196f40 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/store/StoresRepository.java @@ -0,0 +1,7 @@ +package com.example.ReviewZIP.domain.store; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StoresRepository extends JpaRepository { + +} From 38381e515f78344a8ecd7d9a8eb3e42a72b30f75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sat, 20 Jan 2024 18:10:41 +0900 Subject: [PATCH 10/23] =?UTF-8?q?feat=20:=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/post/PostStatus.java | 12 +++++ .../example/ReviewZIP/domain/post/Posts.java | 9 ++++ .../ReviewZIP/domain/post/PostsService.java | 47 +++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostStatus.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostStatus.java b/src/main/java/com/example/ReviewZIP/domain/post/PostStatus.java new file mode 100644 index 00000000..c27bcb3a --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostStatus.java @@ -0,0 +1,12 @@ +package com.example.ReviewZIP.domain.post; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum PostStatus { + ENABLED, // 활성화(default) + DISABLED, // 비활성화 ( 장기 미접속자 ) + DELETED; // 삭제 +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java index 9fa91578..c32ceb13 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -5,12 +5,15 @@ import com.example.ReviewZIP.domain.postLike.PostLikes; import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.domain.store.Stores; +import com.example.ReviewZIP.domain.user.Status; import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; import java.util.ArrayList; import java.util.List; @@ -18,6 +21,8 @@ @Entity @Getter @Setter +@Where(clause = "status = 'ENABLED'") +@SQLDelete(sql = "UPDATE reviewzip.posts SET status = 'DISABLED' WHERE id = ?") @NoArgsConstructor @Table(name = "posts") public class Posts extends BaseEntity { @@ -35,6 +40,10 @@ public class Posts extends BaseEntity { @Column(nullable = false) private Boolean is_read; + @Enumerated(EnumType.STRING) + @Column(columnDefinition = "VARCHAR(255) DEFAULT 'ENABLED'") + private PostStatus status; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private Users user; diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java index 34fe3c63..e7ebb24f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java @@ -1,10 +1,57 @@ package com.example.ReviewZIP.domain.post; +import com.example.ReviewZIP.domain.image.Images; +import com.example.ReviewZIP.domain.image.ImagesRepository; +import com.example.ReviewZIP.domain.postHashtag.PostHashtags; +import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; +import com.example.ReviewZIP.domain.postLike.PostLikes; +import com.example.ReviewZIP.domain.postLike.PostLikesRepository; +import com.example.ReviewZIP.domain.scrab.Scrabs; +import com.example.ReviewZIP.domain.scrab.ScrabsRepository; +import com.example.ReviewZIP.domain.store.Stores; +import com.example.ReviewZIP.domain.store.StoresRepository; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.PostsHandler; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor +@Transactional public class PostsService { + private final PostsRepository postsRepository; + private final ScrabsRepository scrabsRepository; + private final PostLikesRepository postLikesRepository; + private final PostHashtagsRepository postHashtagsRepository; + private final ImagesRepository imagesRepository; + private final StoresRepository storesRepository; + @Transactional + public void deletePost(Long postId){ + Posts post = postsRepository.findById(postId).orElseThrow(()-> new PostsHandler(ErrorStatus.POST_NOT_FOUND)); + + for (Scrabs scrab : post.getScrabList()) { + scrabsRepository.delete(scrab); + } + + for (Images images : post.getPostImageList()){ + imagesRepository.delete(images); + } + + for (PostLikes likes : post.getPostLikeList()){ + postLikesRepository.delete(likes); + } + + for (PostHashtags hashtags : post.getPostHashtagList()){ + postHashtagsRepository.delete(hashtags); + } + + for (Stores store : post.getStoreList()){ + storesRepository.delete(store); + } + + postsRepository.deleteById(post.getId()); + + } } From 91f1d2c531c337bcea131781ac17e0fa5fc280f6 Mon Sep 17 00:00:00 2001 From: YPYP333YPYP Date: Sun, 21 Jan 2024 03:57:20 +0900 Subject: [PATCH 11/23] =?UTF-8?q?refactor=20:=20dto=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD,=20=EC=98=88=EC=99=B8=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/ReviewZipApplication.java | 6 ++-- .../domain/postLike/PostLikesController.java | 10 +++---- .../ReviewZIP/domain/user/UsersConverter.java | 29 +++++++----------- .../user/dto/response/UserResponseDTO.java | 30 ++++--------------- 4 files changed, 24 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/ReviewZipApplication.java b/src/main/java/com/example/ReviewZIP/ReviewZipApplication.java index 3ee22aff..06709739 100644 --- a/src/main/java/com/example/ReviewZIP/ReviewZipApplication.java +++ b/src/main/java/com/example/ReviewZIP/ReviewZipApplication.java @@ -2,10 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -@SpringBootApplication() -public class ReviewZipApplication(exclude = SecurityAutoConfiguration.class) { +@SpringBootApplication(exclude = SecurityAutoConfiguration.class) +public class ReviewZipApplication { public static void main(String[] args) { SpringApplication.run(ReviewZipApplication.class, args); diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java index 51cef137..bfa6facd 100644 --- a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java @@ -4,10 +4,10 @@ import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.domain.user.UsersConverter; -import com.example.ReviewZIP.domain.user.dto.response.UserResponseDTO; +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; +import com.example.ReviewZIP.global.response.ApiResponse; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController @@ -19,10 +19,10 @@ public class PostLikesController { @GetMapping("/{postId}/users") - public ResponseEntity getUsersByPostIdFromPostLikes(@PathVariable Long postId, @RequestParam (defaultValue = "0") Integer page) { + public ApiResponse getUsersByPostIdFromPostLikes(@PathVariable Long postId, @RequestParam (defaultValue = "0") Integer page) { Page pageUsers = postLikesService.getUsersByPostId(postId, page); - UserResponseDTO.UserListDTO userListDTO = UsersConverter.convertToUserListDTO(pageUsers); - return ResponseEntity.ok(userListDTO); + UserResponseDto.UserPreviewListDto userListDto = UsersConverter.toUserListDto(pageUsers); + return ApiResponse.onSuccess(userListDto); } } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index 9cff25c1..ab190468 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -1,39 +1,32 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.user.dto.response.UserResponseDTO; +import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; import org.springframework.data.domain.Page; import java.util.List; import java.util.stream.Collectors; public class UsersConverter { - public static UserResponseDTO.UserDTO convertToUserDTO(Users user) { - return UserResponseDTO.UserDTO.builder() + public static UserResponseDto.UserPreviewDto toUserPreviewDto(Users user) { + return UserResponseDto.UserPreviewDto.builder() .id(user.getId()) - .email(user.getEmail()) - .name(user.getName()) - .user_id(user.getUser_id()) - .password(user.getPassword()) - .phone_num(user.getPhone_num()) .nickname(user.getNickname()) - .status(user.getStatus()) - .createdAt(user.getCreatedAt()) - .updatedAt(user.getUpdatedAt()) + .profileImage(user.getProfileUrl()) .build(); } - public static UserResponseDTO.UserListDTO convertToUserListDTO(Page userList) { - List userDTOList = userList.stream() - .map(UsersConverter::convertToUserDTO) + public static UserResponseDto.UserPreviewListDto toUserListDto(Page userList) { + List userDtoList = userList.stream() + .map(UsersConverter::toUserPreviewDto) .collect(Collectors.toList()); - return UserResponseDTO.UserListDTO.builder() + return UserResponseDto.UserPreviewListDto.builder() .isLast(userList.isLast()) .isFirst(userList.isFirst()) .totalPage(userList.getTotalPages()) .totalElements(userList.getTotalElements()) - .listSize(userDTOList.size()) - .userList(userDTOList) + .listSize(userDtoList.size()) + .userList(userDtoList) .build(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java index 795c2f03..2776f2f5 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java @@ -12,13 +12,13 @@ import java.time.LocalDate; import java.util.List; -public class UserResponseDTO { +public class UserResponseDto { @Builder @Getter @NoArgsConstructor @AllArgsConstructor - public static class UserListDTO { - List userList; + public static class UserPreviewListDto { + List userList; Integer listSize; Integer totalPage; Long totalElements; @@ -30,31 +30,11 @@ public static class UserListDTO { @Getter @NoArgsConstructor @AllArgsConstructor - public static class UserDTO { - @NotNull + public static class UserPreviewDto { private Long id; - - @NotBlank - private String email; - - @NotBlank - private String name; - - @NotBlank - private String user_id; - - @NotBlank - private String password; - - @NotBlank - private String phone_num; - - @NotBlank private String nickname; - private Status status; + private String profileImage; - private LocalDate createdAt; - private LocalDate updatedAt; } } From 3f3092ac37f2ac1b228a0b8049772c4084ec97ea Mon Sep 17 00:00:00 2001 From: YPYP333YPYP Date: Sun, 21 Jan 2024 04:14:35 +0900 Subject: [PATCH 12/23] =?UTF-8?q?feat=20:=20=ED=95=B4=EC=8B=9C=ED=83=9C?= =?UTF-8?q?=EA=B7=B8=20id=EB=A1=9C=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=EA=B0=80=EC=A0=B8=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/post/PostsController.java | 22 ++++++++++++ .../ReviewZIP/domain/post/PostsConverter.java | 33 +++++++++++++++++ .../domain/post/PostsRepository.java | 4 +++ .../ReviewZIP/domain/post/PostsService.java | 29 +++++++++++++++ .../post/dto/response/PostResponseDto.java | 35 +++++++++++++++++++ .../postHashtag/PostHashtagsRepository.java | 11 ++++++ 6 files changed, 134 insertions(+) create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsController.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsService.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/post/dto/response/PostResponseDto.java create mode 100644 src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java new file mode 100644 index 00000000..873f932a --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java @@ -0,0 +1,22 @@ +package com.example.ReviewZIP.domain.post; + +import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto; +import com.example.ReviewZIP.global.response.ApiResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("v1/posts") +public class PostsController { + + private final PostsService postsService; + + @GetMapping("/{hashtagId}") + public ApiResponse searchPostsByHashtagId(@PathVariable Long hashtagId, @RequestParam(defaultValue = "0") Integer page) { + Page postsPage = postsService.searchPostByHashtag(hashtagId, page); + PostResponseDto.PostPreviewListDto postPreviewListDto = PostsConverter.toPostPreviewListDto(postsPage); + return ApiResponse.onSuccess(postPreviewListDto); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java new file mode 100644 index 00000000..6eb21de3 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java @@ -0,0 +1,33 @@ +package com.example.ReviewZIP.domain.post; + +import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.stream.Collectors; + +public class PostsConverter { + + public static PostResponseDto.PostPreviewDto toPostPreviewDto(Posts post) { + return PostResponseDto.PostPreviewDto.builder() + .id(post.getId()) + .likeNum(post.getPostLikeList().size()) + .scrabNum(post.getScrabList().size()) + .imageUrl(post.getPostImageList().get(0).getUrl()) + .build(); + } + + public static PostResponseDto.PostPreviewListDto toPostPreviewListDto(Page postList) { + List postPreviewDtoList = postList.stream() + .map(PostsConverter::toPostPreviewDto).collect(Collectors.toList()); + + return PostResponseDto.PostPreviewListDto.builder() + .isLast(postList.isLast()) + .isFirst(postList.isFirst()) + .totalPage(postList.getTotalPages()) + .totalElements(postList.getTotalElements()) + .listSize(postPreviewDtoList.size()) + .postList(postPreviewDtoList) + .build(); + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java new file mode 100644 index 00000000..201fc44d --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsRepository.java @@ -0,0 +1,4 @@ +package com.example.ReviewZIP.domain.post; + +public interface PostsRepository { +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java new file mode 100644 index 00000000..96213588 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java @@ -0,0 +1,29 @@ +package com.example.ReviewZIP.domain.post; + +import com.example.ReviewZIP.domain.postHashtag.PostHashtags; +import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class PostsService { + + private final PostHashtagsRepository postHashtagsRepository; + + public Page searchPostByHashtag (Long id, Integer page){ + Page postHashtagsList = postHashtagsRepository.findPostHashtagsById(id, PageRequest.of(page,10)); + + List postsList = postHashtagsList.getContent().stream() + .map(PostHashtags::getPost) + .collect(Collectors.toList()); + + return new PageImpl<>(postsList, postHashtagsList.getPageable(), postHashtagsList.getTotalElements()); + + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/dto/response/PostResponseDto.java b/src/main/java/com/example/ReviewZIP/domain/post/dto/response/PostResponseDto.java new file mode 100644 index 00000000..5429b1a6 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/post/dto/response/PostResponseDto.java @@ -0,0 +1,35 @@ +package com.example.ReviewZIP.domain.post.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +public class PostResponseDto { + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class PostPreviewDto { + private Long id; + private String imageUrl; + private Integer likeNum; + private Integer scrabNum; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class PostPreviewListDto{ + private List postList; + private Integer listSize; + private Integer totalPage; + private Long totalElements; + private Boolean isFirst; + private Boolean isLast; + } +} diff --git a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java new file mode 100644 index 00000000..cb0d2cd5 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java @@ -0,0 +1,11 @@ +package com.example.ReviewZIP.domain.postHashtag; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface PostHashtagsRepository extends JpaRepository { + + Page findPostHashtagsById(Long id, PageRequest pageRequest); +} From 05049d8c12efd3d7682f382af1cb3d90a1dad502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 12:56:48 +0900 Subject: [PATCH 13/23] =?UTF-8?q?refactor=20:=20=EC=96=91=EB=B0=A9?= =?UTF-8?q?=ED=96=A5=EB=A7=A4=ED=95=91=EC=9C=BC=EB=A1=9C=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EA=B0=84=EA=B2=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/post/PostsService.java | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java index e7ebb24f..e2f39bc5 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java @@ -31,26 +31,6 @@ public class PostsService { public void deletePost(Long postId){ Posts post = postsRepository.findById(postId).orElseThrow(()-> new PostsHandler(ErrorStatus.POST_NOT_FOUND)); - for (Scrabs scrab : post.getScrabList()) { - scrabsRepository.delete(scrab); - } - - for (Images images : post.getPostImageList()){ - imagesRepository.delete(images); - } - - for (PostLikes likes : post.getPostLikeList()){ - postLikesRepository.delete(likes); - } - - for (PostHashtags hashtags : post.getPostHashtagList()){ - postHashtagsRepository.delete(hashtags); - } - - for (Stores store : post.getStoreList()){ - storesRepository.delete(store); - } - postsRepository.deleteById(post.getId()); } From b623489421665af7f3afd126fc3f2dffd7d4eadc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 13:06:02 +0900 Subject: [PATCH 14/23] =?UTF-8?q?chore=20:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=EC=95=8A=EB=8A=94=20repository=EB=AC=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReviewZIP/domain/image/ImagesRepository.java | 6 ------ .../ReviewZIP/domain/post/PostsService.java | 15 --------------- .../postHashtag/PostHashtagsRepository.java | 6 ------ .../domain/postLike/PostLikesRepository.java | 6 ------ .../ReviewZIP/domain/scrab/ScrabsRepository.java | 6 ------ .../ReviewZIP/domain/store/StoresRepository.java | 7 ------- 6 files changed, 46 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/store/StoresRepository.java diff --git a/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java b/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java deleted file mode 100644 index 021c4ec1..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/image/ImagesRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.ReviewZIP.domain.image; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ImagesRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java index e2f39bc5..58914fec 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java @@ -1,15 +1,5 @@ package com.example.ReviewZIP.domain.post; -import com.example.ReviewZIP.domain.image.Images; -import com.example.ReviewZIP.domain.image.ImagesRepository; -import com.example.ReviewZIP.domain.postHashtag.PostHashtags; -import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; -import com.example.ReviewZIP.domain.postLike.PostLikes; -import com.example.ReviewZIP.domain.postLike.PostLikesRepository; -import com.example.ReviewZIP.domain.scrab.Scrabs; -import com.example.ReviewZIP.domain.scrab.ScrabsRepository; -import com.example.ReviewZIP.domain.store.Stores; -import com.example.ReviewZIP.domain.store.StoresRepository; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; import com.example.ReviewZIP.global.response.exception.handler.PostsHandler; import lombok.RequiredArgsConstructor; @@ -21,11 +11,6 @@ @Transactional public class PostsService { private final PostsRepository postsRepository; - private final ScrabsRepository scrabsRepository; - private final PostLikesRepository postLikesRepository; - private final PostHashtagsRepository postHashtagsRepository; - private final ImagesRepository imagesRepository; - private final StoresRepository storesRepository; @Transactional public void deletePost(Long postId){ diff --git a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java b/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java deleted file mode 100644 index ffcb41b3..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/postHashtag/PostHashtagsRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.ReviewZIP.domain.postHashtag; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface PostHashtagsRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java deleted file mode 100644 index 11310491..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.ReviewZIP.domain.postLike; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface PostLikesRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java b/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java deleted file mode 100644 index d4a21b84..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/scrab/ScrabsRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.ReviewZIP.domain.scrab; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ScrabsRepository extends JpaRepository { -} diff --git a/src/main/java/com/example/ReviewZIP/domain/store/StoresRepository.java b/src/main/java/com/example/ReviewZIP/domain/store/StoresRepository.java deleted file mode 100644 index f4196f40..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/store/StoresRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.ReviewZIP.domain.store; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface StoresRepository extends JpaRepository { - -} From 2442a6b016f2f421e9c671534c46686e9008c40d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Sun, 21 Jan 2024 15:33:06 +0900 Subject: [PATCH 15/23] =?UTF-8?q?refactor=20:=20PostSatus=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/ReviewZIP/domain/post/PostStatus.java | 12 ------------ .../com/example/ReviewZIP/domain/post/Posts.java | 6 ------ .../ReviewZIP/domain/post/PostsConverter.java | 5 ----- 3 files changed, 23 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostStatus.java delete mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostStatus.java b/src/main/java/com/example/ReviewZIP/domain/post/PostStatus.java deleted file mode 100644 index c27bcb3a..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostStatus.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.ReviewZIP.domain.post; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public enum PostStatus { - ENABLED, // 활성화(default) - DISABLED, // 비활성화 ( 장기 미접속자 ) - DELETED; // 삭제 -} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java index c32ceb13..7d99a3f5 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/Posts.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/Posts.java @@ -21,8 +21,6 @@ @Entity @Getter @Setter -@Where(clause = "status = 'ENABLED'") -@SQLDelete(sql = "UPDATE reviewzip.posts SET status = 'DISABLED' WHERE id = ?") @NoArgsConstructor @Table(name = "posts") public class Posts extends BaseEntity { @@ -40,10 +38,6 @@ public class Posts extends BaseEntity { @Column(nullable = false) private Boolean is_read; - @Enumerated(EnumType.STRING) - @Column(columnDefinition = "VARCHAR(255) DEFAULT 'ENABLED'") - private PostStatus status; - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private Users user; diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java deleted file mode 100644 index 1c692d95..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsConverter.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.example.ReviewZIP.domain.post; - -public class PostsConverter { - -} From 5d20186b078614660b7ccc67e91a268aa4d38e1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 22 Jan 2024 13:06:49 +0900 Subject: [PATCH 16/23] =?UTF-8?q?chore=20:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/dto/request/OtherInfoRequestDto.java | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoRequestDto.java diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoRequestDto.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoRequestDto.java deleted file mode 100644 index ae59679e..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/request/OtherInfoRequestDto.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.ReviewZIP.domain.user.dto.request; - -import lombok.Getter; - -@Getter -public class OtherInfoRequestDto { - private Long userId; -} From 1789fc8c699e7a09a82ca46a11903683710f4ecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 22 Jan 2024 13:59:11 +0900 Subject: [PATCH 17/23] =?UTF-8?q?chore=20:=20=ED=95=A8=EC=88=98=EB=AA=85?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/ReviewZIP/domain/user/UsersConverter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index 61386c38..6d72555c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -8,7 +8,7 @@ import java.util.stream.Collectors; public class UsersConverter { - public static UserResponseDto.PostPreviewDto toUserPostPreviewDto(Posts post){ + public static UserResponseDto.PostPreviewDto toPostPreviewDto(Posts post){ return UserResponseDto.PostPreviewDto.builder() .postId(post.getId()) .likeNum(post.getPostLikeList().size()) @@ -19,7 +19,7 @@ public static UserResponseDto.PostPreviewDto toUserPostPreviewDto(Posts post){ public static UserResponseDto.PostPreviewListDto toPostPreviewListDto(Page postList){ List userPostPriviewDtoList = postList.stream() - .map(UsersConverter::toUserPostPreviewDto).collect(Collectors.toList()); + .map(UsersConverter::toPostPreviewDto).collect(Collectors.toList()); return UserResponseDto.PostPreviewListDto.builder() .isLast(postList.isLast()) From 02ea7e74428b11a0e0b381035584871c0895f716 Mon Sep 17 00:00:00 2001 From: YPYP333YPYP Date: Mon, 29 Jan 2024 17:17:37 +0900 Subject: [PATCH 18/23] =?UTF-8?q?refactor=20:=20swagger=20=EC=84=A4?= =?UTF-8?q?=EB=AA=85=20=EC=B6=94=EA=B0=80,=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/postLike/PostLikesController.java | 21 ++++++++++++++++--- .../domain/postLike/PostLikesService.java | 10 +++++++-- .../response/code/resultCode/ErrorStatus.java | 5 ++++- .../exception/handler/PostLikesHandler.java | 8 +++++++ 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/global/response/exception/handler/PostLikesHandler.java diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java index bfa6facd..73a1f908 100644 --- a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java @@ -6,6 +6,12 @@ import com.example.ReviewZIP.domain.user.UsersConverter; import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; import com.example.ReviewZIP.global.response.ApiResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.*; @@ -17,10 +23,19 @@ public class PostLikesController { private final PostLikesService postLikesService; - @GetMapping("/{postId}/users") - public ApiResponse getUsersByPostIdFromPostLikes(@PathVariable Long postId, @RequestParam (defaultValue = "0") Integer page) { - Page pageUsers = postLikesService.getUsersByPostId(postId, page); + @Operation(summary = "게시물에 공감을 누른 유저리스트를 검색하는 API",description = "게시물 아이디를 조회하여 게시물에 공감을 누른 유저 리스트를 검색, 반환 시 UserPreviewListDto 사용") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POSTLIKE403", description = "포스트에 공감을 한 사람이 없음",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) + @Parameters({ + @Parameter(name = "postId", description = "게시물 아이디"), + @Parameter(name = "page", description = "페이지 번호"), + @Parameter(name = "size", description = "페이징 사이즈") + }) + public ApiResponse getPostLikeUserList(@PathVariable Long postId, @RequestParam (defaultValue = "0") Integer page, @RequestParam (defaultValue = "0") Integer size) { + Page pageUsers = postLikesService.getUsersByPostId(postId, page, size); UserResponseDto.UserPreviewListDto userListDto = UsersConverter.toUserListDto(pageUsers); return ApiResponse.onSuccess(userListDto); } diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesService.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesService.java index 4db2908e..95ad7e6e 100644 --- a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesService.java +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesService.java @@ -1,6 +1,8 @@ package com.example.ReviewZIP.domain.postLike; import com.example.ReviewZIP.domain.user.Users; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.PostLikesHandler; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -16,8 +18,12 @@ public class PostLikesService{ private final PostLikesRepository postLikesRepository; - public Page getUsersByPostId(Long postId, Integer page) { - Page postLikesList = postLikesRepository.findAllByPostId(postId, PageRequest.of(page, 10)); + public Page getUsersByPostId(Long postId, Integer page, Integer size) { + Page postLikesList = postLikesRepository.findAllByPostId(postId, PageRequest.of(page, size)); + + if (postLikesList.isEmpty()) { + throw new PostLikesHandler(ErrorStatus.POSTLIKE_NOT_FOUND); + } return new PageImpl<>( postLikesList.getContent().stream() .map(PostLikes::getUser) diff --git a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java index cce53c6c..b0b8ca84 100644 --- a/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java +++ b/src/main/java/com/example/ReviewZIP/global/response/code/resultCode/ErrorStatus.java @@ -41,7 +41,10 @@ public enum ErrorStatus implements BaseErrorCode { //Store STORE_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE401", "존재하지 않는 가게입니다."), - LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE402", "존재하지 않는 가게 위치입니다."); + LOCATION_NOT_FOUND(HttpStatus.NOT_FOUND, "STORE402", "존재하지 않는 가게 위치입니다."), + + POSTLIKE_NOT_FOUND(HttpStatus.NOT_FOUND,"POSTLIKE403","존재하지 않는 공감입니다."); + private final HttpStatus httpStatus; diff --git a/src/main/java/com/example/ReviewZIP/global/response/exception/handler/PostLikesHandler.java b/src/main/java/com/example/ReviewZIP/global/response/exception/handler/PostLikesHandler.java new file mode 100644 index 00000000..8123cfd0 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/global/response/exception/handler/PostLikesHandler.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.global.response.exception.handler; + +import com.example.ReviewZIP.global.response.code.BaseErrorCode; +import com.example.ReviewZIP.global.response.exception.GeneralException; + +public class PostLikesHandler extends GeneralException{ + public PostLikesHandler(BaseErrorCode errorCode) {super(errorCode);} +} \ No newline at end of file From 6213e53cb0e909bd9817f3372ce04d86bae52b7c Mon Sep 17 00:00:00 2001 From: YPYP333YPYP Date: Mon, 29 Jan 2024 17:24:03 +0900 Subject: [PATCH 19/23] =?UTF-8?q?refactor=20:=20DTO=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C,=20=EC=B6=A9=EB=8F=8C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/postLike/PostLikesController.java | 2 - .../ReviewZIP/domain/user/UsersConverter.java | 1 - .../user/dto/response/UserResponseDTO.java | 40 ------------------- 3 files changed, 43 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java diff --git a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java index 3ca8592e..03f81634 100644 --- a/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java +++ b/src/main/java/com/example/ReviewZIP/domain/postLike/PostLikesController.java @@ -10,9 +10,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import com.example.ReviewZIP.domain.postLike.dto.request.PostLikesRequestDto; -import com.example.ReviewZIP.global.response.ApiResponse; import com.example.ReviewZIP.global.response.code.resultCode.SuccessStatus; -import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponses; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index 454bbc59..7f4f19d4 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -15,7 +15,6 @@ public static UserResponseDto.UserPreviewDto toUserPreviewDto(Users user) { return UserResponseDto.UserPreviewDto.builder() .id(user.getId()) .nickname(user.getNickname()) - .profileImage(user.getProfileUrl()) .profileImages(user.getProfileUrl()) .build(); } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java b/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java deleted file mode 100644 index 2776f2f5..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/user/dto/response/UserResponseDTO.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.example.ReviewZIP.domain.user.dto.response; - - -import com.example.ReviewZIP.domain.user.Status; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -import java.time.LocalDate; -import java.util.List; - -public class UserResponseDto { - @Builder - @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class UserPreviewListDto { - List userList; - Integer listSize; - Integer totalPage; - Long totalElements; - Boolean isFirst; - Boolean isLast; - } - - @Builder - @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class UserPreviewDto { - private Long id; - private String nickname; - private String profileImage; - - } -} - From 66e131e9244f9ca6ea039bde8b5bbec1836040f8 Mon Sep 17 00:00:00 2001 From: YPYP333YPYP Date: Mon, 29 Jan 2024 17:31:16 +0900 Subject: [PATCH 20/23] =?UTF-8?q?refactor=20:=20swagger=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/post/PostsController.java | 20 +++++++++++++++++-- .../ReviewZIP/domain/post/PostsService.java | 9 +++++++-- .../handler/PostHashtagsHandler.java | 8 ++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/example/ReviewZIP/global/response/exception/handler/PostHashtagsHandler.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java index 873f932a..b152ea5b 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java @@ -2,6 +2,12 @@ import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto; import com.example.ReviewZIP.global.response.ApiResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.*; @@ -14,8 +20,18 @@ public class PostsController { private final PostsService postsService; @GetMapping("/{hashtagId}") - public ApiResponse searchPostsByHashtagId(@PathVariable Long hashtagId, @RequestParam(defaultValue = "0") Integer page) { - Page postsPage = postsService.searchPostByHashtag(hashtagId, page); + @Operation(summary = "해시태그 아이디로 게시글을 찾는 API",description = "해시태그 아이디로 게시글을 찾는 기능, 반환 시 PostPreviewListDto, PostPreviewDto 사용") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "HASHTAG401", description = "해시태그를 찾을 수 없음",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) + @Parameters({ + @Parameter(name = "hashtagId", description = "해시태그 아이디"), + @Parameter(name = "page", description = "페이지 번호"), + @Parameter(name = "size", description = "페이징 사이즈") + }) + public ApiResponse searchPostsByHashtagId(@PathVariable Long hashtagId, @RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "0") Integer size) { + Page postsPage = postsService.searchPostByHashtag(hashtagId, page, size); PostResponseDto.PostPreviewListDto postPreviewListDto = PostsConverter.toPostPreviewListDto(postsPage); return ApiResponse.onSuccess(postPreviewListDto); } diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java index 96213588..ebc34beb 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java @@ -2,6 +2,8 @@ import com.example.ReviewZIP.domain.postHashtag.PostHashtags; import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; +import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; +import com.example.ReviewZIP.global.response.exception.handler.PostHashtagsHandler; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -16,9 +18,12 @@ public class PostsService { private final PostHashtagsRepository postHashtagsRepository; - public Page searchPostByHashtag (Long id, Integer page){ - Page postHashtagsList = postHashtagsRepository.findPostHashtagsById(id, PageRequest.of(page,10)); + public Page searchPostByHashtag (Long id, Integer page, Integer size){ + Page postHashtagsList = postHashtagsRepository.findPostHashtagsById(id, PageRequest.of(page,size)); + if (postHashtagsList.isEmpty()) { + throw new PostHashtagsHandler(ErrorStatus.HASHTAG_NOT_FOUND); + } List postsList = postHashtagsList.getContent().stream() .map(PostHashtags::getPost) .collect(Collectors.toList()); diff --git a/src/main/java/com/example/ReviewZIP/global/response/exception/handler/PostHashtagsHandler.java b/src/main/java/com/example/ReviewZIP/global/response/exception/handler/PostHashtagsHandler.java new file mode 100644 index 00000000..82ab7682 --- /dev/null +++ b/src/main/java/com/example/ReviewZIP/global/response/exception/handler/PostHashtagsHandler.java @@ -0,0 +1,8 @@ +package com.example.ReviewZIP.global.response.exception.handler; + +import com.example.ReviewZIP.global.response.code.BaseErrorCode; +import com.example.ReviewZIP.global.response.exception.GeneralException; + +public class PostHashtagsHandler extends GeneralException { + public PostHashtagsHandler(BaseErrorCode errorCode) {super(errorCode);} +} \ No newline at end of file From d54b050c53f7707a4ed3674ed87cb6eb7c49aec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 18:43:28 +0900 Subject: [PATCH 21/23] =?UTF-8?q?refactor=20:=20swagger=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EC=B6=A9=EB=8F=8C=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config | 2 +- .../ReviewZIP/domain/image/Images.java | 1 + .../ReviewZIP/domain/oauth/OauthService.java | 4 +++ .../example/ReviewZIP/domain/user/Users.java | 3 ++- .../domain/user/UsersController.java | 25 ++++++++----------- .../ReviewZIP/domain/user/UsersConverter.java | 4 +-- .../ReviewZIP/domain/user/UsersService.java | 3 ++- .../user/dto/response/UserResponseDto.java | 2 +- 8 files changed, 24 insertions(+), 20 deletions(-) diff --git a/config b/config index d8e0093e..6164e96f 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit d8e0093ed7c949c75286aa6ad1486698ec240eff +Subproject commit 6164e96f718d8343628a2c997a8ec41fdb399596 diff --git a/src/main/java/com/example/ReviewZIP/domain/image/Images.java b/src/main/java/com/example/ReviewZIP/domain/image/Images.java index 4f4e4157..8b5fcc5c 100644 --- a/src/main/java/com/example/ReviewZIP/domain/image/Images.java +++ b/src/main/java/com/example/ReviewZIP/domain/image/Images.java @@ -1,5 +1,6 @@ package com.example.ReviewZIP.domain.image; +import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.global.entity.BaseEntity; import com.example.ReviewZIP.domain.post.Posts; import jakarta.persistence.*; diff --git a/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java b/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java index b41ff8a7..97d975b8 100644 --- a/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java +++ b/src/main/java/com/example/ReviewZIP/domain/oauth/OauthService.java @@ -2,6 +2,7 @@ import com.example.ReviewZIP.domain.jwt.TokenProvider; import com.example.ReviewZIP.domain.oauth.dto.request.OauthRequestDto; +import com.example.ReviewZIP.domain.user.Status; import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.domain.user.UsersRepository; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; @@ -35,6 +36,7 @@ public Long createUser(String id, String nickname, String email){ .nickname(nickname) .name(nickname) .email(email) + .status(Status.ENABLED) .build(); usersRepository.save(newUser); @@ -44,6 +46,8 @@ public Long createUser(String id, String nickname, String email){ @Transactional public Map generateAccessToken(String id, String nickname, String email){ boolean exist = usersRepository.existsBySocial(id); + + System.out.println(exist); Long userId; if(!exist) { diff --git a/src/main/java/com/example/ReviewZIP/domain/user/Users.java b/src/main/java/com/example/ReviewZIP/domain/user/Users.java index 6f481ff1..d769531f 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/Users.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/Users.java @@ -1,13 +1,13 @@ package com.example.ReviewZIP.domain.user; import com.example.ReviewZIP.domain.follow.Follows; -import com.example.ReviewZIP.domain.image.Images; import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.postLike.PostLikes; import com.example.ReviewZIP.domain.scrab.Scrabs; import com.example.ReviewZIP.global.entity.BaseEntity; import jakarta.persistence.*; import lombok.*; +import org.hibernate.annotations.ColumnDefault; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; @@ -35,6 +35,7 @@ public class Users extends BaseEntity { @Column(nullable = false) private String name; + @Column(unique = true) private String social; private String password; diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index 5cb9b356..30987b39 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -1,15 +1,5 @@ package com.example.ReviewZIP.domain.user; -import com.example.ReviewZIP.domain.user.dto.response.UserResponseDto; -import com.example.ReviewZIP.global.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import static org.springframework.http.ResponseEntity.ok; import com.example.ReviewZIP.domain.follow.Follows; import com.example.ReviewZIP.domain.post.Posts; import com.example.ReviewZIP.domain.scrab.Scrabs; @@ -141,22 +131,29 @@ public ApiResponse getOtherScrabList(@PathVa // 유저 삭제하기 @DeleteMapping("/{userId}") - @Operation(summary = "유저 삭제하기 API",description = "유저를 삭제") + @Operation(summary = "유저 삭제하기 API",description = "유저를 삭제한다.") @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), }) @Parameters({ @Parameter(name = "userId", description = "유저의 아이디"), - @Parameter(name = "page", description = "페이지 번호"), - @Parameter(name = "size", description = "페이징 사이즈") }) public ApiResponse deleteUser(@PathVariable(name = "userId")Long userId) { usersService.deleteUser(userId); return ApiResponse.onSuccess(null); } + // 특정 유저의 정보 가져오기 @GetMapping("/{userId}") - public ApiResponse getOtherInfo(@PathVariable(name = "userId") Long userId){ + @Operation(summary = "특정 유저의 정보(프로필) API",description = "user id를 받아 특정 유저의 정보(프로필) 가져오기, UserInfoDto 이용") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) + @Parameters({ + @Parameter(name = "userId", description = "유저의 아이디"), + }) + public ApiResponse getOtherInfo(@PathVariable(name = "userId") Long userId){ return ApiResponse.onSuccess(usersService.getOtherInfo(userId)); } diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java index 7a48a373..597f0f25 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersConverter.java @@ -144,11 +144,11 @@ public static UserResponseDto.PostPreviewListDto toScrabPreviewListDto(Page Date: Mon, 29 Jan 2024 19:13:07 +0900 Subject: [PATCH 22/23] =?UTF-8?q?refactor=20:=20swagger=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EC=B6=A9=EB=8F=8C=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/UsersController.java | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java index ba05242f..a62d72dc 100644 --- a/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java +++ b/src/main/java/com/example/ReviewZIP/domain/user/UsersController.java @@ -24,8 +24,17 @@ public class UsersController { private final UsersService usersService; - @GetMapping("/search/name") + @Operation(summary = "이름으로 유저 검색 API",description = "유저의 이름으로 특정 유저를 검색 (자신이 팔로잉한 대상은 제외)") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER408", description = "유저를 찾을 수 없음",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) + @Parameters({ + @Parameter(name = "name", description = "유저의 이름"), + @Parameter(name = "page", description = "페이지 번호"), + @Parameter(name = "size", description = "페이징 사이즈") + }) public ApiResponse searchUsersByName(@RequestParam String name, @RequestParam (defaultValue = "0") Integer page) { Page userPage = usersService.findUsersByName(name, page); UserResponseDto.UserPreviewListDto userListDto = UsersConverter.toUserPreviewListDto(userPage); @@ -49,8 +58,6 @@ public ApiResponse searchUsersByNickname(@Re return ApiResponse.onSuccess(userListDto); } - - // 특정 유저의 팔로잉 목록 가져오기 @GetMapping("{userId}/following") @Operation(summary = "특정 유저의 팔로잉 목록 가져오기 API",description = "특정 유저의 id를 이용하여 해당 유저의 팔로잉 목록 조회, FollowerPreviewDto와 FollowerPreviewListDto 이용") @ApiResponses({ @@ -68,7 +75,6 @@ public ApiResponse getOtherFollowingL return ApiResponse.onSuccess(UsersConverter.toFollowingPreviewListDto(FollowsPage)); } - // 특정 유저의 팔로워 목록 가져오기 @GetMapping("/{userId}/followers") @Operation(summary = "특정 유저의 팔로워 목록 가져오기 API",description = "특정 유저의 id를 이용하여 해당 유저의 팔로워 목록 조회, FollowingPreviewDto와 FollowingPreviewListDto 이용") @ApiResponses({ @@ -86,7 +92,22 @@ public ApiResponse getOtherFollowerLis return ApiResponse.onSuccess(UsersConverter.toFollowerPreviewListDto(FollowsPage)); } - // 특정 유저의 게시글들 가져오기 + @GetMapping("/me/posts") + @Operation(summary = "나의 게시물 목록 가져오기 API",description = "token을 이용하여 유저정보 받은 후 게시글 목록 가져오기, PostPreviewDto와 PostPreviewListDto 이용") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + }) + @Parameters({ + @Parameter(name = "userId", description = "유저의 아이디"), + @Parameter(name = "page", description = "페이지 번호"), + @Parameter(name = "size", description = "페이징 사이즈") + }) + public ApiResponse getUserPostList(@RequestParam(name = "page")Integer page, @RequestParam(name = "size")Integer size){ + // 토큰값 받아서 유저확인 하는 부분, 일단 1L로 대체 + Page UserPage = usersService.getPostList(1L, page, size); + + return ApiResponse.onSuccess(UsersConverter.toPostPreviewListDto(UserPage)); + } @GetMapping("/{userId}/posts") @Operation(summary = "특정 유저의 게시글 목록 가져오기 API",description = "특정 유저의 id를 받아 게시글들의 목록(대표 이미지들)을 반환, PostPreviewDto와 PostPreviewListDto 이용") @@ -111,7 +132,6 @@ public ApiResponse getOtherPostList(@PathVar } - // 특정 유저의 스크랩들 가져오기 @GetMapping("/{userId}/posts/scrabs") @Operation(summary = "특정 유저가 스크랩한 게시물 가져오기 API",description = "특정 유저의 id를 받아 스크랩한 게시글들의 목록(대표 이미지들)을 반환, PostPreviewDto와 PostPreviewListDto 이용") @ApiResponses({ @@ -129,23 +149,8 @@ public ApiResponse getOtherScrabList(@PathVa return ApiResponse.onSuccess(UsersConverter.toScrabPreviewListDto(UserPage)); } - // 유저 삭제하기 - @DeleteMapping("/{userId}") - @Operation(summary = "유저 삭제하기 API",description = "유저를 삭제한다.") - @ApiResponses({ - @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), - }) - @Parameters({ - @Parameter(name = "userId", description = "유저의 아이디"), - }) - public ApiResponse deleteUser(@PathVariable(name = "userId")Long userId) { - usersService.deleteUser(userId); - return ApiResponse.onSuccess(null); - } - - // 특정 유저의 정보 가져오기 @GetMapping("/{userId}") - @Operation(summary = "특정 유저의 정보(프로필) API",description = "user id를 받아 특정 유저의 정보(프로필) 가져오기, UserInfoDto 이용") + @Operation(summary = "특정 유저의 정보(프로필) API 가져오기",description = "user id를 받아 특정 유저의 정보(프로필) 가져오기, UserInfoDto 이용") @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "USER404", description = "유저가 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), @@ -158,18 +163,18 @@ public ApiResponse getOtherInfo(@PathVariable(name return ApiResponse.onSuccess(usersService.getOtherInfo(userId)); } - @GetMapping("/me/posts") - @Operation(summary = "나의 게시물 목록 가져오기 API",description = "token을 이용하여 유저정보 받은 후 게시글 목록 가져오기, PostPreviewDto와 PostPreviewListDto 이용") + @DeleteMapping("/{userId}") + @Operation(summary = "유저 삭제하기 API",description = "유저를 삭제한다.") @ApiResponses({ @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), }) @Parameters({ @Parameter(name = "userId", description = "유저의 아이디"), }) - public ApiResponse getUserPostList(@RequestParam(name = "page")Integer page, @RequestParam(name = "size")Integer size){ - // 토큰값 받아서 유저확인 하는 부분, 일단 1L로 대체 - Page UserPage = usersService.getPostList(1L, page, size); - - return ApiResponse.onSuccess(UsersConverter.toPostPreviewListDto(UserPage)); + public ApiResponse deleteUser(@PathVariable(name = "userId")Long userId) { + usersService.deleteUser(userId); + return ApiResponse.onSuccess(null); } + + } From b1bbe3d03698df5a5b04c26b7405f62326647b56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=88=98?= Date: Mon, 29 Jan 2024 19:39:14 +0900 Subject: [PATCH 23/23] =?UTF-8?q?refactor=20:=20swagger=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EC=B6=A9=EB=8F=8C=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/post/PostsContoroller.java | 22 ---------------- .../domain/post/PostsController.java | 16 ++++++++++-- .../ReviewZIP/domain/post/PostsService.java | 25 ++++--------------- 3 files changed, 19 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java deleted file mode 100644 index 53f4ae23..00000000 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsContoroller.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.ReviewZIP.domain.post; - -import com.example.ReviewZIP.global.response.ApiResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/v1/posts") -public class PostsContoroller { - private final PostsService postsService; - - @DeleteMapping("/{postId}") - public ApiResponse deletePost(@PathVariable(name = "postId") Long postId){ - postsService.deletePost(postId); - return ApiResponse.onSuccess(null); - } - -} diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java index 2c9a199d..34ed7977 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsController.java @@ -55,8 +55,6 @@ public ApiResponse searchPostsByHashtagId(@P }) @Parameters({ @Parameter(name = "postId", description = "게시글의 아이디"), - @Parameter(name = "page", description = "페이지 번호"), - @Parameter(name = "size", description = "페이징 사이즈") }) public ApiResponse getPostInfo(@PathVariable(name = "postId") Long postId){ @@ -87,4 +85,18 @@ public ApiResponse> getRandomPosts(@RequestPar return ApiResponse.onSuccess(randomPostInfoDtos); } + + @DeleteMapping("/{postId}") + @Operation(summary = "게시글 삭제 API", description = "게시글의 id를 받아 해당하는 게시글 삭제") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "POST401", description = "게시글이 존재하지 않습니다",content = @Content(schema = @Schema(implementation = ApiResponse.class))), + }) + @Parameters({ + @Parameter(name = "postId", description = "게시글의 아이디"), + }) + public ApiResponse deletePost(@PathVariable(name = "postId") Long postId){ + postsService.deletePost(postId); + return ApiResponse.onSuccess(null); + } } \ No newline at end of file diff --git a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java index a934a2de..c2930f70 100644 --- a/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java +++ b/src/main/java/com/example/ReviewZIP/domain/post/PostsService.java @@ -1,39 +1,23 @@ package com.example.ReviewZIP.domain.post; -import com.example.ReviewZIP.domain.postHashtag.PostHashtags; -import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; -import com.example.ReviewZIP.domain.postHashtag.PostHashtagsService; -import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; -import com.example.ReviewZIP.global.response.exception.handler.PostHashtagsHandler; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.stereotype.Service; -import java.util.List; -import java.util.stream.Collectors; - -import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; -import com.example.ReviewZIP.global.response.exception.handler.PostsHandler; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import com.example.ReviewZIP.domain.image.Images; import com.example.ReviewZIP.domain.image.ImagesRepository; import com.example.ReviewZIP.domain.post.dto.request.PostRequestDto; import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto; +import com.example.ReviewZIP.domain.postHashtag.PostHashtags; +import com.example.ReviewZIP.domain.postHashtag.PostHashtagsRepository; import com.example.ReviewZIP.domain.postLike.PostLikesRepository; import com.example.ReviewZIP.domain.scrab.ScrabsRepository; import com.example.ReviewZIP.domain.user.Users; import com.example.ReviewZIP.domain.user.UsersRepository; import com.example.ReviewZIP.global.response.code.resultCode.ErrorStatus; import com.example.ReviewZIP.global.response.exception.handler.ImagesHandler; +import com.example.ReviewZIP.global.response.exception.handler.PostHashtagsHandler; import com.example.ReviewZIP.global.response.exception.handler.PostsHandler; import com.example.ReviewZIP.global.response.exception.handler.UsersHandler; - import lombok.RequiredArgsConstructor; - import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -42,6 +26,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor