Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
chahyunsoo committed Aug 29, 2024
2 parents 1cc5fd9 + 0f3bbaf commit c4764b9
Show file tree
Hide file tree
Showing 10 changed files with 430 additions and 146 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
import ussum.homepage.domain.post.service.*;
import ussum.homepage.domain.post.service.factory.BoardFactory;
import ussum.homepage.domain.post.service.factory.BoardImpl;
import ussum.homepage.domain.post.service.factory.postList.DataPostResponseFactory;
import ussum.homepage.domain.post.service.factory.postList.PostListResponseFactory;
import ussum.homepage.domain.post.service.factory.postList.PostResponseFactoryProvider;
import ussum.homepage.domain.post.service.formatter.PostDetailFunction;
import ussum.homepage.domain.postlike.PostReaction;
import ussum.homepage.domain.postlike.service.PostReactionManager;
Expand Down Expand Up @@ -79,14 +82,6 @@ public class PostManageService {
private final PostOfficialCommentFormatter postOfficialCommentFormatter;
private final S3utils s3utils;

private final Map<String, QuadFunction<Post, List<PostFile>, Integer, User, ? extends PostListResDto>> postResponseMap = Map.of(
"공지사항게시판", (post, ignored1, ignored2, user) -> NoticePostResponse.of(post, user),
"분실물게시판", (post, ignored1, ignored2, ignored3) -> LostPostResponse.of(post),
"제휴게시판", (post, ignored1, ignored2, ignored3) -> PartnerPostResponse.of(post),
"감사기구게시판", (post, ignored1, ignored2, ignored3) -> AuditPostResponseDto.of(post),
"청원게시판", (post, ignored1, likeCount, ignored2) -> PetitionPostResponse.of(post, likeCount),
"자료집게시판", (post, postFiles, ignored1, ignored2) -> DataPostResponse.of(post, postFiles)
);

private final Map<String, PostDetailFunction<Post, Boolean, Boolean, User, Integer, String, String, String, PostOfficialCommentResponse, ? extends PostDetailResDto>> postDetailResponseMap = Map.of(
"공지사항게시판", (post, isAuthor, ignored, user, another_ignored1, categoryName, imageList, fileList, another_ignored2) -> NoticePostDetailResponse.of(post, isAuthor, user, categoryName, imageList, fileList),
Expand All @@ -98,14 +93,6 @@ public class PostManageService {

public PostListRes<?> getPostList(int page, int take, String boardCode, String groupCode, String memberCode, String category) {
Board board = boardReader.getBoardWithBoardCode(boardCode);
// Pageable pageable = PageInfo.of(page, take);
// Page<Post> postList = null;
// if(boardCode.equals("공지사항게시판")){
// postList = postReader.getPostListByBoardIdAndGroupCodeAndMemberCode(board.getId(), groupCode, memberCode, pageable);
// }else {
// postList = postReader.getPostListByBoardId(board.getId(), pageable);
// }


//factory 사용 로직
BoardImpl boardImpl = BoardFactory.createBoard(boardCode, board.getId());
Expand All @@ -119,43 +106,34 @@ public PostListRes<?> getPostList(int page, int take, String boardCode, String g

PageInfo pageInfo = PageInfo.of(postList);

QuadFunction<Post, List<PostFile>, Integer, User, ? extends PostListResDto> responseFunction = postResponseMap.get(board.getName());

if (responseFunction == null) {
throw new IllegalArgumentException("Unknown board type: " + board.getName());
}

List<? extends PostListResDto> responseList = postList.getContent().stream()
.map(post -> {
User user = null;
Integer likeCount = null;
switch (board.getName()) {
case "공지사항게시판":
user = userReader.getUserWithId(post.getUserId());
return responseFunction.apply(post, null, null,user);
case "분실물게시판":
case "제휴게시판":
case "감사기구게시판":
case "자료집":
return responseFunction.apply(post, null, null, null);
case "청원게시판":
likeCount = postReactionReader.countPostReactionsByType(post.getId(), "like");
return responseFunction.apply(post, null, likeCount,null);
default:
throw new EntityNotFoundException(String.valueOf(POST_NOT_FOUND));
}
PostListResponseFactory factory = PostResponseFactoryProvider.getFactory(board.getName());
return factory.createResponse(post, postReader, postReactionReader, userReader);
})
.toList();

return PostListRes.of(responseList, pageInfo);

}

public PostListRes<?> getDataList(int page, int take, String majorCategory, String middleCategory, String subCategory){
public PostListRes<?> getDataList(int page, int take, String majorCategory, String middleCategory, String subCategory) {
Pageable pageable = PageInfo.of(page, take);
Page<Post> postList = postReader.getPostListByFileCategories(FileCategory.getFileCategoriesByCategories(majorCategory, middleCategory, subCategory), pageable);
Page<Post> postList = postReader.getPostListByFileCategories(
FileCategory.getFileCategoriesByCategories(majorCategory, middleCategory, subCategory),
pageable
);
PageInfo pageInfo = PageInfo.of(postList);
QuadFunction<Post, List<PostFile> , Integer, User, ? extends PostListResDto> responseFunction = postResponseMap.get("자료집게시판");
List<? extends PostListResDto> responseList = postList.getContent().stream().map(post -> responseFunction.apply(post, postFileReader.getPostFileListByPostId(post.getId()), null, null)).toList();

PostListResponseFactory factory = PostResponseFactoryProvider.getFactory("자료집게시판");

List<? extends PostListResDto> responseList = postList.getContent().stream()
.map(post -> {
List<PostFile> postFiles = postFileReader.getPostFileListByPostId(post.getId());
return ((DataPostResponseFactory) factory).createDataResponse(post, postFiles);
})
.toList();

return PostListRes.of(responseList, pageInfo);
}

Expand Down Expand Up @@ -286,6 +264,8 @@ public void deletePost(String boardCode, Long postId) {

public PostListRes<?> searchPost(int page, int take, String q, String boardCode, String groupCode, String memberCode, String category) {
Board board = boardReader.getBoardWithBoardCode(boardCode);

//factory 사용 로직
BoardImpl boardImpl = BoardFactory.createBoard(boardCode, board.getId());
Pageable pageable = PageInfo.of(page, take);

Expand All @@ -297,35 +277,15 @@ public PostListRes<?> searchPost(int page, int take, String q, String boardCode,

PageInfo pageInfo = PageInfo.of(postList);

QuadFunction<Post, List<PostFile>, Integer, User, ? extends PostListResDto> responseFunction = postResponseMap.get(board.getName());

if (responseFunction == null) {
throw new IllegalArgumentException("Unknown board type: " + board.getName());
}

List<? extends PostListResDto> responseList = postList.getContent().stream()
.map(post -> {
User user = null;
Integer likeCount = null;
switch (board.getName()) {
case "공지사항게시판":
user = userReader.getUserWithId(post.getUserId());
return responseFunction.apply(post, null, null,user);
case "분실물게시판":
case "제휴게시판":
case "감사기구게시판":
case "자료집":
return responseFunction.apply(post, null, null, null);
case "청원게시판":
likeCount = postReactionReader.countPostReactionsByType(post.getId(), "like");
return responseFunction.apply(post, null, likeCount,null);
default:
throw new EntityNotFoundException(String.valueOf(POST_NOT_FOUND));
}
PostListResponseFactory factory = PostResponseFactoryProvider.getFactory(board.getName());
return factory.createResponse(post, postReader, postReactionReader, userReader);
})
.toList();

return PostListRes.of(responseList, pageInfo);

}

public TopLikedPostListResponse getTopLikedPostList(int page, int take, String boardCode) {
Expand All @@ -335,83 +295,4 @@ public TopLikedPostListResponse getTopLikedPostList(int page, int take, String b

return TopLikedPostListResponse.of(simplePostDtoList.getContent(), pageInfo);
}
}
//스위치 사용 로직
/*
package ussum.homepage.application.post.service;
import jakarta.persistence.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import ussum.homepage.application.post.service.dto.response.postList.*;
import ussum.homepage.domain.post.Board;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.BoardReader;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.global.common.PageInfo;
import java.util.List;
import static ussum.homepage.global.error.status.ErrorStatus.POST_NOT_FOUND;
@Service
@RequiredArgsConstructor
public class PostManageService {
private final BoardReader boardReader;
private final PostReader postReader;
public PostListRes<?> getPostList(int page, int take, String boardCode) {
Board board = boardReader.getBoardWithBoardCode(boardCode);
Pageable pageable = PageInfo.of(page, take);
Page<Post> postList = postReader.getPostListByBoardId(board.getId(), pageable);
PageInfo pageInfo = PageInfo.of(postList);
switch (board.getName()) {
case "공지사항":
return getNoticePostList(postList, pageInfo);
case "분실물":
return getLostPostList(postList, pageInfo);
case "제휴":
return getPartnerPostList(postList, pageInfo);
case "감사기구":
return getAuditPostList(postList, pageInfo);
case "청원":
// return getPetitionPostList(postList, pageInfo);
default:
throw new EntityNotFoundException(String.valueOf(POST_NOT_FOUND));
}
}
private PostListRes<NoticePostResponse> getNoticePostList(Page<Post> postList, PageInfo pageInfo) {
List<NoticePostResponse> responseList = postList.getContent().stream()
.map(NoticePostResponse::of)
.toList();
return PostListRes.of(responseList, pageInfo);
}
private PostListRes<LostPostResponse> getLostPostList(Page<Post> postList, PageInfo pageInfo) {
List<LostPostResponse> responseList = postList.getContent().stream()
.map(LostPostResponse::of)
.toList();
return PostListRes.of(responseList, pageInfo);
}
private PostListRes<PartnerPostResponse> getPartnerPostList(Page<Post> postList, PageInfo pageInfo) {
List<PartnerPostResponse> responseList = postList.getContent().stream()
.map(PartnerPostResponse::of)
.toList();
return PostListRes.of(responseList, pageInfo);
}
private PostListRes<AuditPostResponseDto> getAuditPostList(Page<Post> postList, PageInfo pageInfo) {
List<AuditPostResponseDto> responseList = postList.getContent().stream()
.map(AuditPostResponseDto::of)
.toList();
return PostListRes.of(responseList, pageInfo);
}
}
*/
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ussum.homepage.domain.post.service.factory.postList;

import ussum.homepage.application.post.service.dto.response.postList.AuditPostResponseDto;
import ussum.homepage.application.post.service.dto.response.postList.PostListResDto;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.domain.postlike.service.PostReactionReader;
import ussum.homepage.domain.user.service.UserReader;

public class AuditPostResponseFactory implements PostListResponseFactory {
@Override
public PostListResDto createResponse(Post post, PostReader postReader, PostReactionReader postReactionReader, UserReader userReader) {
return AuditPostResponseDto.of(post);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package ussum.homepage.domain.post.service.factory.postList;

import ussum.homepage.application.post.service.dto.response.DataPostResponse;
import ussum.homepage.application.post.service.dto.response.postList.PostListResDto;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.PostFile;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.domain.postlike.service.PostReactionReader;
import ussum.homepage.domain.user.service.UserReader;

import java.util.List;

public class DataPostResponseFactory implements PostListResponseFactory {
@Override
public PostListResDto createResponse(Post post, PostReader postReader, PostReactionReader postReactionReader, UserReader userReader) {
// 이 메서드는 일반적인 경우에 사용되지 않을 것이므로, 예외를 던지거나 null을 반환할 수 있습니다.
throw new UnsupportedOperationException("Use createDataResponse for DataPostResponse");
}

@Override
public PostListResDto createDataResponse(Post post, List<PostFile> postFiles) {
return DataPostResponse.of(post, postFiles);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ussum.homepage.domain.post.service.factory.postList;
import ussum.homepage.application.post.service.dto.response.postList.LostPostResponse;
import ussum.homepage.application.post.service.dto.response.postList.PostListResDto;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.domain.postlike.service.PostReactionReader;
import ussum.homepage.domain.user.service.UserReader;
public class LostPostResponseFactory implements PostListResponseFactory {
@Override
public PostListResDto createResponse(Post post, PostReader postReader, PostReactionReader postReactionReader, UserReader userReader) {
return LostPostResponse.of(post);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ussum.homepage.domain.post.service.factory.postList;

import ussum.homepage.application.post.service.dto.response.postList.NoticePostResponse;
import ussum.homepage.application.post.service.dto.response.postList.PostListResDto;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.domain.postlike.service.PostReactionReader;
import ussum.homepage.domain.user.User;
import ussum.homepage.domain.user.service.UserReader;
public class NoticePostResponseFactory implements PostListResponseFactory {
@Override
public PostListResDto createResponse(Post post, PostReader postReader, PostReactionReader postReactionReader, UserReader userReader) {
User user = userReader.getUserWithId(post.getUserId());
return NoticePostResponse.of(post, user);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ussum.homepage.domain.post.service.factory.postList;

import ussum.homepage.application.post.service.dto.response.postList.PartnerPostResponse;
import ussum.homepage.application.post.service.dto.response.postList.PostListResDto;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.domain.postlike.service.PostReactionReader;
import ussum.homepage.domain.user.service.UserReader;
public class PartnerPostResponseFactory implements PostListResponseFactory {
@Override
public PostListResDto createResponse(Post post, PostReader postReader, PostReactionReader postReactionReader, UserReader userReader) {
return PartnerPostResponse.of(post);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ussum.homepage.domain.post.service.factory.postList;

import ussum.homepage.application.post.service.dto.response.postList.PetitionPostResponse;
import ussum.homepage.application.post.service.dto.response.postList.PostListResDto;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.domain.postlike.service.PostReactionReader;
import ussum.homepage.domain.user.service.UserReader;

public class PetitionPostResponseFactory implements PostListResponseFactory {
@Override
public PostListResDto createResponse(Post post, PostReader postReader, PostReactionReader postReactionReader, UserReader userReader) {
Integer likeCount = postReactionReader.countPostReactionsByType(post.getId(), "like");
return PetitionPostResponse.of(post, likeCount);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ussum.homepage.domain.post.service.factory.postList;

import ussum.homepage.application.post.service.dto.response.postList.PostListResDto;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.PostFile;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.domain.postlike.service.PostReactionReader;
import ussum.homepage.domain.user.service.UserReader;

import java.util.List;

public interface PostListResponseFactory {
PostListResDto createResponse(Post post, PostReader postReader, PostReactionReader postReactionReader, UserReader userReader);

// 자료집 게시판을 위한 새로운 메서드
default PostListResDto createDataResponse(Post post, List<PostFile> postFiles) {
throw new UnsupportedOperationException("This operation is not supported for this board type.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ussum.homepage.domain.post.service.factory.postList;

import java.util.HashMap;
import java.util.Map;

public class PostResponseFactoryProvider {
private static final Map<String, PostListResponseFactory> factoryMap = new HashMap<>();

static {
factoryMap.put("공지사항게시판", new NoticePostResponseFactory());
factoryMap.put("분실물게시판", new LostPostResponseFactory());
factoryMap.put("제휴게시판", new PartnerPostResponseFactory());
factoryMap.put("감사기구게시판", new AuditPostResponseFactory());
factoryMap.put("청원게시판", new PetitionPostResponseFactory());
factoryMap.put("자료집게시판", new DataPostResponseFactory());
}

public static PostListResponseFactory getFactory(String boardName) {
PostListResponseFactory factory = factoryMap.get(boardName);
if (factory == null) {
throw new IllegalArgumentException("Unknown board type: " + boardName);
}
return factory;
}
}
Loading

0 comments on commit c4764b9

Please sign in to comment.