Skip to content

Commit

Permalink
Merge pull request #108 from Review-zip/dev
Browse files Browse the repository at this point in the history
[Merge] ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ dev -> main merge
  • Loading branch information
hsuush authored Jan 29, 2024
2 parents 55087a7 + a92f142 commit ea02a19
Show file tree
Hide file tree
Showing 20 changed files with 304 additions and 43 deletions.
2 changes: 1 addition & 1 deletion config
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,10 @@ public interface FollowsRepository extends JpaRepository<Follows, Long> {
Page<Follows> findAllByReceiver(Users user, PageRequest pageRequest);

Follows getBySenderAndReceiver(Users sender, Users receiver);

Integer countBySenderId(Long userId);

Integer countByReceiverId(Long userid);

boolean existsBySenderAndReceiver(Users sender, Users receiver);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand All @@ -44,6 +46,8 @@ public Long createUser(String id, String nickname, String email){
@Transactional
public Map<String, Object> generateAccessToken(String id, String nickname, String email){
boolean exist = usersRepository.existsBySocial(id);

System.out.println(exist);
Long userId;

if(!exist) {
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/example/ReviewZIP/domain/post/Posts.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
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.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand All @@ -20,13 +22,30 @@

import java.util.List;


@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/posts")
@RequestMapping("v1/posts")
public class PostsController {

private final PostsService postsService;

@GetMapping("/{hashtagId}")
@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<PostResponseDto.PostPreviewListDto> searchPostsByHashtagId(@PathVariable Long hashtagId, @RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "0") Integer size) {
Page<Posts> postsPage = postsService.searchPostByHashtag(hashtagId, page, size);
PostResponseDto.PostPreviewListDto postPreviewListDto = PostsConverter.toPostPreviewListDto(postsPage);
return ApiResponse.onSuccess(postPreviewListDto);
}

// ํŠน์ • ๊ฒŒ์‹œ๊ธ€์˜ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
@GetMapping("/{postId}")
@Operation(summary = "ํŠน์ • ๊ฒŒ์‹œ๊ธ€์˜ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ API",description = "๊ฒŒ์‹œ๊ธ€์˜ id๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ธ์ •๋ณด ์ถœ๋ ฅ, UserInfoDto & ImageListDto & PostInfoDto ์ด์šฉ")
Expand All @@ -36,8 +55,6 @@ public class PostsController {
})
@Parameters({
@Parameter(name = "postId", description = "๊ฒŒ์‹œ๊ธ€์˜ ์•„์ด๋””"),
@Parameter(name = "page", description = "ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ"),
@Parameter(name = "size", description = "ํŽ˜์ด์ง• ์‚ฌ์ด์ฆˆ")
})
public ApiResponse<PostResponseDto.PostInfoDto> getPostInfo(@PathVariable(name = "postId") Long postId){

Expand Down Expand Up @@ -68,4 +85,18 @@ public ApiResponse<List<PostResponseDto.PostInfoDto>> 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<Void> deletePost(@PathVariable(name = "postId") Long postId){
postsService.deletePost(postId);
return ApiResponse.onSuccess(null);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
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;
import com.example.ReviewZIP.domain.image.Images;
import com.example.ReviewZIP.domain.post.dto.response.PostResponseDto;
import com.example.ReviewZIP.domain.postHashtag.PostHashtags;
Expand All @@ -12,6 +17,29 @@

@Component
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<Posts> postList) {
List<PostResponseDto.PostPreviewDto> 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();
}
public static PostResponseDto.CreatedPostResponseDto toPostResponseDto(Posts post) {
List<Long> imageIds = post.getPostImageList().stream()
.map(Images::getId)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
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;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.example.ReviewZIP.domain.user.Users;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.query.Param;

@Repository
public interface PostsRepository extends JpaRepository<Posts, Long> {
Expand All @@ -16,4 +16,5 @@ public interface PostsRepository extends JpaRepository<Posts, Long> {
long countByUserNot(@Param("user") Users user);

Page<Posts> findAllByUserNot(Users user, PageRequest pageRequest);

}
29 changes: 26 additions & 3 deletions src/main/java/com/example/ReviewZIP/domain/post/PostsService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,20 @@
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;
Expand All @@ -24,6 +26,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
Expand All @@ -34,7 +37,21 @@ public class PostsService {
private final PostsRepository postsRepository;
private final PostLikesRepository postLikesRepository;
private final ScrabsRepository scrabsRepository;
private final PostHashtagsRepository postHashtagsRepository;

public Page<Posts> searchPostByHashtag (Long id, Integer page, Integer size){
Page<PostHashtags> postHashtagsList = postHashtagsRepository.findPostHashtagsById(id, PageRequest.of(page,size));

if (postHashtagsList.isEmpty()) {
throw new PostHashtagsHandler(ErrorStatus.HASHTAG_NOT_FOUND);
}
List<Posts> postsList = postHashtagsList.getContent().stream()
.map(PostHashtags::getPost)
.collect(Collectors.toList());

return new PageImpl<>(postsList, postHashtagsList.getPageable(), postHashtagsList.getTotalElements());

}
@Transactional
public Posts createPost(PostRequestDto postRequestDto) {
Users user = usersRepository.findById(postRequestDto.getUserId()).orElseThrow(() -> new UsersHandler(ErrorStatus.USER_NOT_FOUND));
Expand Down Expand Up @@ -104,5 +121,11 @@ public PostResponseDto.PostInfoDto getPostInfoDto(Long postId){
return PostsConverter.toPostInfoResultDto(post, checkLike, checkScrab);
}

@Transactional
public void deletePost(Long postId){
Posts post = postsRepository.findById(postId).orElseThrow(()-> new PostsHandler(ErrorStatus.POST_NOT_FOUND));

}
postsRepository.deleteById(post.getId());

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@

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
Expand All @@ -34,6 +44,18 @@ public static class ImageListDto{
private String url;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class PostPreviewListDto {
private List<PostPreviewDto> postList;
private Integer listSize;
private Integer totalPage;
private Long totalElements;
private Boolean isFirst;
private Boolean isLast;
}
@Builder
@Getter
@NoArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
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<PostHashtags, Long> {

Page<PostHashtags> findPostHashtagsById(Long id, PageRequest pageRequest);

}
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
package com.example.ReviewZIP.domain.postLike;

import com.example.ReviewZIP.domain.postLike.dto.request.PostLikesRequestDto;


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.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.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import com.example.ReviewZIP.domain.postLike.dto.request.PostLikesRequestDto;
import com.example.ReviewZIP.global.response.code.resultCode.SuccessStatus;
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.*;

@RestController
Expand Down Expand Up @@ -42,4 +50,21 @@ public ApiResponse<SuccessStatus> postRemoveLike(@PathVariable Long postId) {
return ApiResponse.onSuccess(SuccessStatus.POST_CANCEL_LIKE_SUCCESS);
}

@GetMapping("/{postId}/users")
@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<UserResponseDto.UserPreviewListDto> getPostLikeUserList(@PathVariable Long postId, @RequestParam (defaultValue = "0") Integer page, @RequestParam (defaultValue = "0") Integer size) {
Page<Users> pageUsers = postLikesService.getUsersByPostId(postId, page, size);
UserResponseDto.UserPreviewListDto userListDto = UsersConverter.toUserListDto(pageUsers);
return ApiResponse.onSuccess(userListDto);
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.example.ReviewZIP.domain.postLike;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.example.ReviewZIP.domain.post.Posts;
import com.example.ReviewZIP.domain.user.Users;
import org.springframework.data.jpa.repository.JpaRepository;
Expand All @@ -11,5 +13,6 @@
public interface PostLikesRepository extends JpaRepository<PostLikes, Long> {
Optional<PostLikes> findByPostIdAndUserId(Long postId, Long userId);

Page<PostLikes> findAllByPostId(Long postId, Pageable pageable);
boolean existsByUserAndPost(Users user, Posts post);
}
Loading

0 comments on commit ea02a19

Please sign in to comment.