Skip to content

Commit

Permalink
Merge pull request #70 from ssu-student-union/feat/50-post
Browse files Browse the repository at this point in the history
 [refactor] #50 api 테스트 중 오류해결, 파라미터 수정 및 dto 수정
  • Loading branch information
qogustj authored Aug 21, 2024
2 parents e880b40 + 7eb4fcc commit 70bbf08
Show file tree
Hide file tree
Showing 19 changed files with 172 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,29 @@
public class PostManageController {

private final PostManageService postManageService;

@GetMapping("/{boardCode}/{groupCode}/{memberCode}/posts")
@Operation(summary = "게시판 별 게시물 리스트 조회 api", description = """
게시판 별 게시물 리스트 조회 시 필요한 데이터를 조회하는 api 입니다.
요청으로 boardCode 그리고 queryParam 형식으로 , groupCode(중앙기구, 단과대학생회), memberCode(중앙운영위원회), page(입력 안 할시 첫번째 페이지), take(몇개 가져올지) 값을 넣으면 됩니다.
공지사항게시판을 사용할때만 groupCode, memberCode에 값을 넣어서 사용하시면 됩니다.
""")
@GetMapping("/{boardCode}/posts")
public ResponseEntity<ApiResponse<?>> getBoardPostsList(@RequestParam(value = "page", defaultValue = "0") int page, @RequestParam(value = "take") int take,
@PathVariable(name = "boardCode") String boardCode, @PathVariable(name = "groupCode") String groupCode, @PathVariable(name = "memberCode") String memberCode) {
@PathVariable(name = "boardCode") String boardCode, @RequestParam(value = "groupCode", required = false) String groupCode,
@RequestParam(value = "memberCode", required = false) String memberCode) {

// PostListResponse postList = postService.getPostList(PageRequest.of(page, take, Sort.by("id").descending()), boardCode);
return ApiResponse.success(postManageService.getPostList(page, take, boardCode, groupCode, memberCode));
}

@GetMapping("data/{majorCategory}/{middleCategory}/{subCategory}/posts")
@Operation(summary = "자료집게시판 게시물 리스트 조회 api", description = """
자료집게시판 게시물 리스트 조회 시 필요한 데이터를 조회하는 api 입니다.
queryParam 형식으로 majorCategory(대분류), middleCategory(중분류), subCategory(소분류), page(입력 안 할시 첫번째 페이지), take(몇개 가져올지) 값을 넣으면 됩니다.
대분류로만 검색하거나 중분류까지만 검색하거나 하면 필요없는 값은 안 보내셔도 됩니다.
response에서 총학생회칙일때만 isNotice에 true로 가게 했습니다.
""")
@GetMapping("data/posts")
public ResponseEntity<ApiResponse<?>> getDataPostsList(@RequestParam(value = "page", defaultValue = "0") int page, @RequestParam(value = "take") int take,
@PathVariable(name = "majorCategory") String majorCategory, @PathVariable(name = "middleCategory") String middleCategory,@PathVariable(name = "subCategory") String subCategory) {
@RequestParam(name = "majorCategory", required = false) String majorCategory, @RequestParam(name = "middleCategory", required = false) String middleCategory,@RequestParam(name = "subCategory", required = false) String subCategory) {

// PostListResponse postList = postService.getPostList(PageRequest.of(page, take, Sort.by("id").descending()), boardCode);
return ApiResponse.success(postManageService.getDataList(page, take, majorCategory, middleCategory, subCategory));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import ussum.homepage.application.comment.service.dto.response.PostOfficialCommentResponse;
import ussum.homepage.application.post.service.dto.request.PostCreateRequest;
Expand Down Expand Up @@ -38,6 +39,8 @@
import ussum.homepage.global.common.PageInfo;
import ussum.homepage.global.error.exception.GeneralException;
import ussum.homepage.global.error.status.ErrorStatus;
import ussum.homepage.infra.jpa.group.entity.GroupCode;
import ussum.homepage.infra.jpa.member.entity.MemberCode;
import ussum.homepage.infra.jpa.post.entity.BoardCode;
import ussum.homepage.infra.jpa.post.entity.Category;
import ussum.homepage.infra.utils.S3utils;
Expand Down Expand Up @@ -74,7 +77,7 @@ public class PostManageService {
"제휴게시판", (post, ignored1, ignored2) -> PartnerPostResponse.of(post),
"감사기구게시판", (post, ignored1, ignored2) -> AuditPostResponseDto.of(post),
"청원게시판", (post, likeCount, ignored2) -> PetitionPostResponse.of(post, likeCount),
"자료집", (post, likeCount, ignored2) -> DataPostResponse.of(post)
"자료집게시판", (post, likeCount, ignored2) -> DataPostResponse.of(post)

);

Expand Down Expand Up @@ -102,7 +105,10 @@ public PostListRes<?> getPostList(int page, int take, String boardCode, String g
BoardImpl boardImpl = BoardFactory.createBoard(boardCode, board.getId());
Pageable pageable = PageInfo.of(page, take);

Page<Post> postList = boardImpl.getPostList(postReader, groupCode, memberCode, pageable);
GroupCode groupCodeEnum = StringUtils.hasText(groupCode) ? GroupCode.getEnumGroupCodeFromStringGroupCode(groupCode) : null;
MemberCode memberCodeEnum = StringUtils.hasText(memberCode) ? MemberCode.getEnumMemberCodeFromStringMemberCode(memberCode) : null;

Page<Post> postList = boardImpl.getPostList(postReader, groupCodeEnum, memberCodeEnum, pageable);

PageInfo pageInfo = PageInfo.of(postList);

Expand Down Expand Up @@ -138,9 +144,13 @@ public PostListRes<?> getPostList(int page, int take, String boardCode, String g
}
public PostListRes<?> getDataList(int page, int take, String majorCategory, String middleCategory, String subCategory){
Pageable pageable = PageInfo.of(page, take);
Page<Post> postList = postReader.getPostListByGroupCodeAndMemberCodeAndSubCategory(majorCategory, middleCategory, subCategory, pageable);

GroupCode groupCodeEnum = StringUtils.hasText(majorCategory) ? GroupCode.getEnumGroupCodeFromStringGroupCode(majorCategory) : null;
MemberCode memberCodeEnum = StringUtils.hasText(middleCategory) ? MemberCode.getEnumMemberCodeFromStringMemberCode(middleCategory) : null;

Page<Post> postList = postReader.getPostListByGroupCodeAndMemberCodeAndSubCategory(groupCodeEnum, memberCodeEnum, subCategory, pageable);
PageInfo pageInfo = PageInfo.of(postList);
TriFunction<Post, Integer, User, ? extends PostListResDto> responseFunction = postResponseMap.get("자료집");
TriFunction<Post, Integer, User, ? extends PostListResDto> responseFunction = postResponseMap.get("자료집게시판");
List<? extends PostListResDto> responseList = postList.getContent().stream().map(post -> responseFunction.apply(post, null, null)).toList();
return PostListRes.of(responseList, pageInfo);
}
Expand Down Expand Up @@ -186,7 +196,7 @@ public PostDetailRes<?> getPost(PostUserRequest postUserRequest, String boardCod
@Transactional
public PostCreateResponse createBoardPost(Long userId, String boardCode, PostCreateRequest postCreateRequest){
Board board = boardReader.getBoardWithBoardCode(boardCode);
String onGoingStatus = Objects.equals(boardCode, "청원게시판") ? postCreateRequest.categoryCode() : null;
String onGoingStatus = Objects.equals(boardCode, "청원게시판") ? postCreateRequest.categoryCode() : postCreateRequest.isNotice() ? Category.EMERGENCY.getStringCategoryCode() : null;

Post post = postAppender.createPost(postCreateRequest.toDomain(board, userId, Category.getEnumCategoryCodeFromStringCategoryCode(postCreateRequest.categoryCode()), onGoingStatus));
postFileAppender.updatePostIdForIds(postCreateRequest.postFileList(), post.getId());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ussum.homepage.application.post.service.dto.request;

import lombok.Builder;
import ussum.homepage.domain.post.Board;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.user.User;
Expand All @@ -12,8 +13,17 @@ public record PostCreateRequest(
String content,
String categoryCode,
String thumbNailImage,
boolean isNotice,
List<Long> postFileList
) {
@Builder
public PostCreateRequest {
}

public PostCreateRequest(String title, String content, String categoryCode, String thumbNailImage, List<Long> postFileList) {
this(title, content, categoryCode, thumbNailImage, false, postFileList);
}

public Post toDomain(Board board, Long userId, Category category, String OnGoingStatus) {
return Post.of(
null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,42 @@
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import org.springframework.util.StringUtils;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.user.User;
import ussum.homepage.infra.jpa.group.entity.GroupCode;
import ussum.homepage.infra.jpa.post.entity.Category;
import ussum.homepage.infra.jpa.post.entity.OngoingStatus;
import ussum.homepage.infra.jpa.post.entity.Status;

@Getter
public class NoticePostResponse extends PostListResDto{
private final String thumbNail;
private final String status;
private final String author;
private final Boolean isEmergency;

@Builder
private NoticePostResponse(Long postId, String title, String content, String date, String thumbNail, String status, String author) {
private NoticePostResponse(Long postId, String title, String content, String date, String thumbNail, String status, String author, Boolean isEmergency) {
super(postId, title, content, date);
this.thumbNail = thumbNail;
this.status = status;
this.author = author;
this.isEmergency = isEmergency;
}

public static NoticePostResponse of(Post post, User user) {
OngoingStatus ongoingStatus = StringUtils.hasText(post.getOnGoingStatus()) ? OngoingStatus.getEnumOngoingStatusFromStringOngoingStatus(post.getOnGoingStatus()) : null;

return NoticePostResponse.builder()
.postId(post.getId())
.title(post.getTitle())
.content(post.getContent())
.date(post.getCreatedAt().toString())
.date(post.getCreatedAt())
.thumbNail(post.getThumbnailImage())
.status(post.getStatus())
.author(user.getName())
.isEmergency(ongoingStatus!=null&& ongoingStatus.equals(Category.EMERGENCY)? true : false)
.build();
}
}
3 changes: 2 additions & 1 deletion src/main/java/ussum/homepage/domain/post/Post.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.AllArgsConstructor;
import lombok.Getter;
import ussum.homepage.infra.jpa.post.entity.Category;
import ussum.homepage.infra.utils.DateUtils;


import java.time.LocalDateTime;
Expand Down Expand Up @@ -40,7 +41,7 @@ public static Post of(Long id,
Category category,
Long userId,
Long boardId) {
return new Post(id, title, content, viewCount, thumbnailImage, status, onGoingStatus, String.valueOf(createdAt),
return new Post(id, title, content, viewCount, thumbnailImage, status, onGoingStatus, DateUtils.formatToCustomString(createdAt),
String.valueOf(updatedAt), String.valueOf(lastEditedAt), category.getStringCategoryCode(),
userId, boardId);
}
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/ussum/homepage/domain/post/PostRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import ussum.homepage.application.post.service.dto.response.SimplePostResponse;
import ussum.homepage.infra.jpa.group.entity.GroupCode;
import ussum.homepage.infra.jpa.member.entity.MemberCode;
import ussum.homepage.infra.jpa.post.entity.Category;

import java.util.Optional;
Expand All @@ -18,6 +20,6 @@ public interface PostRepository {
Page<Post> findBySearchCriteria(Pageable pageable,String boardCode, String q, String categoryCode);
Page<SimplePostResponse> findPostDtoListByBoardCode(String boardCode, Pageable pageable);
Post updatePostOngoingStatus(Long postId, String onGoingStatus, Category category);
Page<Post> findAllByGroupCodeAndMemberCodeAndSubCategory(String groupCode, String memberCode, String subCategory, Pageable pageable);
Page<Post> findAllByBoardIdAndGroupCodeAndMemberCode(Long boarId, String groupCode, String memberCode, Pageable pageable);
Page<Post> findAllByGroupCodeAndMemberCodeAndSubCategory(GroupCode groupCode, MemberCode memberCode, String subCategory, Pageable pageable);
Page<Post> findAllByBoardIdAndGroupCodeAndMemberCode(Long boarId, GroupCode groupCode, MemberCode memberCode, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import org.springframework.stereotype.Service;

import ussum.homepage.application.post.service.dto.response.SimplePostResponse;
import ussum.homepage.infra.jpa.group.entity.GroupCode;
import ussum.homepage.infra.jpa.member.entity.MemberCode;
import ussum.homepage.infra.jpa.post.dto.SimplePostDto;
import ussum.homepage.domain.post.Board;
import ussum.homepage.domain.post.BoardRepository;
Expand Down Expand Up @@ -33,11 +35,11 @@ public Page<SimplePostResponse> findSimplePostDtoListByBoardCode(String boardCod
return postRepository.findPostDtoListByBoardCode(boardCode, pageable);
}

public Page<Post> getPostListByBoardIdAndGroupCodeAndMemberCode(Long boardId, String groupCode, String memberCode, Pageable pageable ){
public Page<Post> getPostListByBoardIdAndGroupCodeAndMemberCode(Long boardId, GroupCode groupCode, MemberCode memberCode, Pageable pageable ){
return postRepository.findAllByBoardIdAndGroupCodeAndMemberCode(boardId, groupCode,memberCode, pageable);
}

public Page<Post> getPostListByGroupCodeAndMemberCodeAndSubCategory(String groupCode, String memberCode, String subCategory, Pageable pageable){
public Page<Post> getPostListByGroupCodeAndMemberCodeAndSubCategory(GroupCode groupCode, MemberCode memberCode, String subCategory, Pageable pageable){
return postRepository.findAllByGroupCodeAndMemberCodeAndSubCategory(groupCode,memberCode,subCategory, pageable);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import org.springframework.data.domain.Pageable;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.infra.jpa.group.entity.GroupCode;
import ussum.homepage.infra.jpa.member.entity.MemberCode;

public interface BoardImpl {
Page<Post> getPostList(PostReader postReader, String groupCode, String memberCode, Pageable pageable);
Page<Post> getPostList(PostReader postReader, GroupCode groupCode, MemberCode memberCode, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
import org.springframework.data.domain.Pageable;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.infra.jpa.group.entity.GroupCode;
import ussum.homepage.infra.jpa.member.entity.MemberCode;

@RequiredArgsConstructor
public class GeneralBoardImpl implements BoardImpl {
private final Long id;

@Override
public Page<Post> getPostList(PostReader postReader, String groupCode, String memberCode, Pageable pageable) {
public Page<Post> getPostList(PostReader postReader, GroupCode groupCode, MemberCode memberCode, Pageable pageable) {
return postReader.getPostListByBoardId(this.id, pageable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
import org.springframework.data.domain.Pageable;
import ussum.homepage.domain.post.Post;
import ussum.homepage.domain.post.service.PostReader;
import ussum.homepage.infra.jpa.group.entity.GroupCode;
import ussum.homepage.infra.jpa.member.entity.MemberCode;

@RequiredArgsConstructor
public class NoticeBoardImpl implements BoardImpl {
private final Long id;

@Override
public Page<Post> getPostList(PostReader postReader, String groupCode, String memberCode, Pageable pageable) {
public Page<Post> getPostList(PostReader postReader, GroupCode groupCode, MemberCode memberCode, Pageable pageable) {
return postReader.getPostListByBoardIdAndGroupCodeAndMemberCode(this.id, groupCode, memberCode, pageable);
}
}
6 changes: 4 additions & 2 deletions src/main/java/ussum/homepage/global/config/CorsConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

import java.util.Arrays;
import java.util.List;

@Configuration
Expand All @@ -16,9 +17,10 @@ public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedOrigin("http://localhost:5173");
config.addAllowedOrigin("http://localhost:3000");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.setAllowedMethods(Arrays.asList("HEAD", "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
source.registerCorsConfiguration("/**",config);
return new CorsFilter(source);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ public class SecurityConfig {
"/board/{boardCode}/posts",
"/board/{boardCode}/posts/{postId}",
"/board/posts/{postId}/comments",
"/board/{boardCode}/{groupCode}/{memberCode}/posts"
"/board/{boardCode}/{groupCode}/{memberCode}/posts",
"/board/data/posts"
};

private static final String[] whiteList = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public enum ErrorStatus implements BaseErrorCode {
INVALID_STATUS(HttpStatus.BAD_REQUEST,"ENUM_012","유효하지 않은 STATUS입니다."),
INVALID_ONGOING_STATUS(HttpStatus.BAD_REQUEST,"ENUM_013","유효하지 않은 ONGOING_STATUS입니다."),
WRONG_TRANSLATED_TO_KOREAN(HttpStatus.BAD_REQUEST,"ENUM_014","ONGOING_STATUS가 한국어로 잘못변환되었습니다."),
INVALID_GROUP_CODE(HttpStatus.BAD_REQUEST,"ENUM_015","유효하지 않은 GROUPCODE입니다."),

/**
* 401 Unauthorized, Token 관련 에러
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.util.StringUtils;
import ussum.homepage.global.error.exception.InvalidValueException;

import java.util.Arrays;
import java.util.Optional;

import static ussum.homepage.global.error.status.ErrorStatus.INVALID_GROUP_CODE;
import static ussum.homepage.global.error.status.ErrorStatus.INVALID_MAJORCODE;

@RequiredArgsConstructor
Expand Down Expand Up @@ -80,6 +83,19 @@ public static GroupCode getEnumGroupCodeFromStringGroupCode(String stringGroupCo
return Arrays.stream(values())
.filter(groupCode -> groupCode.stringGroupCode.equals(stringGroupCode))
.findFirst()
.orElseThrow(() -> new InvalidValueException(INVALID_MAJORCODE));
.orElseThrow(() -> new InvalidValueException(INVALID_GROUP_CODE));
}

public static Optional<GroupCode> fromString(String stringGroupCode) {
if (!StringUtils.hasText(stringGroupCode)) {
return Optional.empty();
}
return Arrays.stream(values())
.filter(groupCode -> groupCode.stringGroupCode.equals(stringGroupCode))
.findFirst();
}

public static GroupCode fromStringOrNull(String stringGroupCode) {
return fromString(stringGroupCode).orElse(null);
}
}
Loading

0 comments on commit 70bbf08

Please sign in to comment.