From d1c2b601a46f0f4c7f68bb61c3e4bcd206404fb0 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Mon, 19 Aug 2024 04:05:08 +0900 Subject: [PATCH 01/13] =?UTF-8?q?[feat]=20#50=20=EA=B2=8C=EC=8B=9C?= =?UTF-8?q?=ED=8C=90=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20factory=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/service/PostManageService.java | 6 ++++-- .../homepage/domain/post/PostRepository.java | 6 ++++-- .../domain/post/service/PostReader.java | 6 ++++-- .../post/service/factory/BoardImpl.java | 4 +++- .../service/factory/GeneralBoardImpl.java | 4 +++- .../post/service/factory/NoticeBoardImpl.java | 4 +++- .../infra/jpa/post/PostRepositoryImpl.java | 20 +++++++++---------- 7 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/main/java/ussum/homepage/application/post/service/PostManageService.java b/src/main/java/ussum/homepage/application/post/service/PostManageService.java index 08f34502..f9aeb436 100644 --- a/src/main/java/ussum/homepage/application/post/service/PostManageService.java +++ b/src/main/java/ussum/homepage/application/post/service/PostManageService.java @@ -38,6 +38,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; @@ -102,7 +104,7 @@ public PostListRes getPostList(int page, int take, String boardCode, String g BoardImpl boardImpl = BoardFactory.createBoard(boardCode); Pageable pageable = PageInfo.of(page, take); - Page postList = boardImpl.getPostList(postReader, groupCode, memberCode, pageable); + Page postList = boardImpl.getPostList(postReader, GroupCode.getEnumGroupCodeFromStringGroupCode(groupCode), MemberCode.getEnumMemberCodeFromStringMemberCode(memberCode), pageable); PageInfo pageInfo = PageInfo.of(postList); @@ -138,7 +140,7 @@ 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 postList = postReader.getPostListByGroupCodeAndMemberCodeAndSubCategory(majorCategory, middleCategory, subCategory, pageable); + Page postList = postReader.getPostListByGroupCodeAndMemberCodeAndSubCategory(GroupCode.getEnumGroupCodeFromStringGroupCode(majorCategory), MemberCode.getEnumMemberCodeFromStringMemberCode(middleCategory), subCategory, pageable); PageInfo pageInfo = PageInfo.of(postList); TriFunction responseFunction = postResponseMap.get("자료집"); List responseList = postList.getContent().stream().map(post -> responseFunction.apply(post, null, null)).toList(); diff --git a/src/main/java/ussum/homepage/domain/post/PostRepository.java b/src/main/java/ussum/homepage/domain/post/PostRepository.java index 618095e0..db34a1fd 100644 --- a/src/main/java/ussum/homepage/domain/post/PostRepository.java +++ b/src/main/java/ussum/homepage/domain/post/PostRepository.java @@ -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; @@ -18,6 +20,6 @@ public interface PostRepository { Page findBySearchCriteria(Pageable pageable,String boardCode, String q, String categoryCode); Page findPostDtoListByBoardCode(String boardCode, Pageable pageable); Post updatePostOngoingStatus(Long postId, String onGoingStatus, Category category); - Page findAllByGroupCodeAndMemberCodeAndSubCategory(String groupCode, String memberCode, String subCategory, Pageable pageable); - Page findAllByBoardIdAndGroupCodeAndMemberCode(Long boarId, String groupCode, String memberCode, Pageable pageable); + Page findAllByGroupCodeAndMemberCodeAndSubCategory(GroupCode groupCode, MemberCode memberCode, String subCategory, Pageable pageable); + Page findAllByBoardIdAndGroupCodeAndMemberCode(Long boarId, GroupCode groupCode, MemberCode memberCode, Pageable pageable); } diff --git a/src/main/java/ussum/homepage/domain/post/service/PostReader.java b/src/main/java/ussum/homepage/domain/post/service/PostReader.java index b8c5c6cd..6fbe9361 100644 --- a/src/main/java/ussum/homepage/domain/post/service/PostReader.java +++ b/src/main/java/ussum/homepage/domain/post/service/PostReader.java @@ -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; @@ -33,11 +35,11 @@ public Page findSimplePostDtoListByBoardCode(String boardCod return postRepository.findPostDtoListByBoardCode(boardCode, pageable); } - public Page getPostListByBoardIdAndGroupCodeAndMemberCode(Long boardId, String groupCode, String memberCode, Pageable pageable ){ + public Page getPostListByBoardIdAndGroupCodeAndMemberCode(Long boardId, GroupCode groupCode, MemberCode memberCode, Pageable pageable ){ return postRepository.findAllByBoardIdAndGroupCodeAndMemberCode(boardId, groupCode,memberCode, pageable); } - public Page getPostListByGroupCodeAndMemberCodeAndSubCategory(String groupCode, String memberCode, String subCategory, Pageable pageable){ + public Page getPostListByGroupCodeAndMemberCodeAndSubCategory(GroupCode groupCode, MemberCode memberCode, String subCategory, Pageable pageable){ return postRepository.findAllByGroupCodeAndMemberCodeAndSubCategory(groupCode,memberCode,subCategory, pageable); } diff --git a/src/main/java/ussum/homepage/domain/post/service/factory/BoardImpl.java b/src/main/java/ussum/homepage/domain/post/service/factory/BoardImpl.java index f79b3640..0e3e8aa6 100644 --- a/src/main/java/ussum/homepage/domain/post/service/factory/BoardImpl.java +++ b/src/main/java/ussum/homepage/domain/post/service/factory/BoardImpl.java @@ -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 getPostList(PostReader postReader, String groupCode, String memberCode, Pageable pageable); + Page getPostList(PostReader postReader, GroupCode groupCode, MemberCode memberCode, Pageable pageable); } diff --git a/src/main/java/ussum/homepage/domain/post/service/factory/GeneralBoardImpl.java b/src/main/java/ussum/homepage/domain/post/service/factory/GeneralBoardImpl.java index eb2c3128..2f28918f 100644 --- a/src/main/java/ussum/homepage/domain/post/service/factory/GeneralBoardImpl.java +++ b/src/main/java/ussum/homepage/domain/post/service/factory/GeneralBoardImpl.java @@ -4,12 +4,14 @@ 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 class GeneralBoardImpl implements BoardImpl { private Long id; @Override - public Page getPostList(PostReader postReader, String groupCode, String memberCode, Pageable pageable) { + public Page getPostList(PostReader postReader, GroupCode groupCode, MemberCode memberCode, Pageable pageable) { return postReader.getPostListByBoardId(this.id, pageable); } } diff --git a/src/main/java/ussum/homepage/domain/post/service/factory/NoticeBoardImpl.java b/src/main/java/ussum/homepage/domain/post/service/factory/NoticeBoardImpl.java index 09d77b36..3ec3af22 100644 --- a/src/main/java/ussum/homepage/domain/post/service/factory/NoticeBoardImpl.java +++ b/src/main/java/ussum/homepage/domain/post/service/factory/NoticeBoardImpl.java @@ -4,12 +4,14 @@ 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 class NoticeBoardImpl implements BoardImpl { private Long id; @Override - public Page getPostList(PostReader postReader, String groupCode, String memberCode, Pageable pageable) { + public Page getPostList(PostReader postReader, GroupCode groupCode, MemberCode memberCode, Pageable pageable) { return postReader.getPostListByBoardIdAndGroupCodeAndMemberCode(this.id, groupCode, memberCode, pageable); } } diff --git a/src/main/java/ussum/homepage/infra/jpa/post/PostRepositoryImpl.java b/src/main/java/ussum/homepage/infra/jpa/post/PostRepositoryImpl.java index 034f8e85..4715e041 100644 --- a/src/main/java/ussum/homepage/infra/jpa/post/PostRepositoryImpl.java +++ b/src/main/java/ussum/homepage/infra/jpa/post/PostRepositoryImpl.java @@ -75,17 +75,17 @@ public Optional findByBoardIdAndIdForEditAndDelete(Long boardId, Long post } @Override - public Page findAllByGroupCodeAndMemberCodeAndSubCategory(String groupCode, String memberCode, String subCategory, Pageable pageable) { + public Page findAllByGroupCodeAndMemberCodeAndSubCategory(GroupCode groupCode, MemberCode memberCode, String subCategory, Pageable pageable) { BooleanBuilder whereClause = new BooleanBuilder(); if (subCategory != null && !subCategory.isEmpty()) { whereClause.and(postFileEntity.subCategory.eq(subCategory)); } - if (memberCode != null && !memberCode.isEmpty()) { - whereClause.and(memberEntity.memberCode.eq(MemberCode.valueOf(memberCode))); + if (memberCode != null) { + whereClause.and(memberEntity.memberCode.eq(memberCode)); } - if (groupCode != null && !groupCode.isEmpty()) { - whereClause.and(groupEntity.groupCode.eq(GroupCode.valueOf(groupCode))); + if (groupCode != null) { + whereClause.and(groupEntity.groupCode.eq(groupCode)); } if (whereClause.getValue() == null) { @@ -123,14 +123,14 @@ public Page findAllByGroupCodeAndMemberCodeAndSubCategory(String groupCode } @Override - public Page findAllByBoardIdAndGroupCodeAndMemberCode(Long boardId, String groupCode, String memberCode, Pageable pageable) { + public Page findAllByBoardIdAndGroupCodeAndMemberCode(Long boardId, GroupCode groupCode, MemberCode memberCode, Pageable pageable) { BooleanBuilder whereClause = new BooleanBuilder(); - if (memberCode != null && !memberCode.isEmpty()) { - whereClause.and(memberEntity.memberCode.eq(MemberCode.valueOf(memberCode))); + if (memberCode != null) { + whereClause.and(memberEntity.memberCode.eq(memberCode)); } - if (groupCode != null && !groupCode.isEmpty()) { - whereClause.and(groupEntity.groupCode.eq(GroupCode.valueOf(groupCode))); + if (groupCode != null) { + whereClause.and(groupEntity.groupCode.eq(groupCode)); } if (whereClause.getValue() == null) { From ad7f7d1e40344b77a43519e12cca8ebdc7b70068 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:53:53 +0900 Subject: [PATCH 02/13] =?UTF-8?q?[feat]=20#50=20dateUtil=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ussum/homepage/infra/utils/DateUtils.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/ussum/homepage/infra/utils/DateUtils.java diff --git a/src/main/java/ussum/homepage/infra/utils/DateUtils.java b/src/main/java/ussum/homepage/infra/utils/DateUtils.java new file mode 100644 index 00000000..4d286016 --- /dev/null +++ b/src/main/java/ussum/homepage/infra/utils/DateUtils.java @@ -0,0 +1,22 @@ +package ussum.homepage.infra.utils; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class DateUtils { + private static final DateTimeFormatter CUSTOM_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + + public static String formatToCustomString(LocalDateTime dateTime) { + if (dateTime == null) { + return null; + } + return dateTime.format(CUSTOM_FORMATTER); + } + + public static LocalDateTime parseFromCustomString(String dateString) { + if (dateString == null || dateString.isEmpty()) { + return null; + } + return LocalDateTime.parse(dateString, CUSTOM_FORMATTER); + } +} From 21233d6068430826bf9185a8ccb2dfd83df77fb6 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:54:27 +0900 Subject: [PATCH 03/13] =?UTF-8?q?[feat]=20#50=20Category=EC=97=90=20?= =?UTF-8?q?=EA=B8=B4=EA=B8=89=EA=B3=B5=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ussum/homepage/infra/jpa/post/entity/Category.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/ussum/homepage/infra/jpa/post/entity/Category.java b/src/main/java/ussum/homepage/infra/jpa/post/entity/Category.java index 4f5ff19d..7405d8bf 100644 --- a/src/main/java/ussum/homepage/infra/jpa/post/entity/Category.java +++ b/src/main/java/ussum/homepage/infra/jpa/post/entity/Category.java @@ -11,6 +11,9 @@ @RequiredArgsConstructor @Getter public enum Category { + //공지사항 카테고리 + EMERGENCY("긴급공지"), + //분실물 카테고리(분실문 현황, 분실 신고) LOST_STATUS("분실문현황"), LOST_REPORT("분실신고"), From 4bd659c499ea39f2c9b51bd76849ccc35bc5fc0c Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:56:23 +0900 Subject: [PATCH 04/13] =?UTF-8?q?[feat]=20#50=20INVALID=5FGROUP=5FCODE=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 --- .../java/ussum/homepage/global/error/status/ErrorStatus.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ussum/homepage/global/error/status/ErrorStatus.java b/src/main/java/ussum/homepage/global/error/status/ErrorStatus.java index 10dfc443..0a29eed8 100644 --- a/src/main/java/ussum/homepage/global/error/status/ErrorStatus.java +++ b/src/main/java/ussum/homepage/global/error/status/ErrorStatus.java @@ -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 관련 에러 From a8edf18acee92e81810d6adff71cffac9e76cdcb Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:56:52 +0900 Subject: [PATCH 05/13] =?UTF-8?q?[feat]=20#50=20enum=20null=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/jpa/group/entity/GroupCode.java | 18 +++++++++++++++++- .../infra/jpa/member/entity/MemberCode.java | 15 +++++++++++++++ .../infra/jpa/post/entity/OngoingStatus.java | 19 ++++++++++++++++++- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/main/java/ussum/homepage/infra/jpa/group/entity/GroupCode.java b/src/main/java/ussum/homepage/infra/jpa/group/entity/GroupCode.java index 4141b7d6..e42fae13 100644 --- a/src/main/java/ussum/homepage/infra/jpa/group/entity/GroupCode.java +++ b/src/main/java/ussum/homepage/infra/jpa/group/entity/GroupCode.java @@ -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 @@ -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 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); } } diff --git a/src/main/java/ussum/homepage/infra/jpa/member/entity/MemberCode.java b/src/main/java/ussum/homepage/infra/jpa/member/entity/MemberCode.java index f107ef57..a1c2c10a 100644 --- a/src/main/java/ussum/homepage/infra/jpa/member/entity/MemberCode.java +++ b/src/main/java/ussum/homepage/infra/jpa/member/entity/MemberCode.java @@ -2,9 +2,12 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.springframework.util.StringUtils; import ussum.homepage.global.error.exception.InvalidValueException; +import ussum.homepage.infra.jpa.group.entity.GroupCode; import java.util.Arrays; +import java.util.Optional; import static ussum.homepage.global.error.status.ErrorStatus.INVALID_MEMBERCODE; @@ -127,4 +130,16 @@ public static MemberCode getEnumMemberCodeFromStringMemberCode(String stringMemb .orElseThrow(() -> new InvalidValueException(INVALID_MEMBERCODE)); } + public static Optional fromString(String stringMemberCode) { + if (!StringUtils.hasText(stringMemberCode)) { + return Optional.empty(); + } + return Arrays.stream(values()) + .filter(memberCode -> memberCode.stringMemberCode.equals(stringMemberCode)) + .findFirst(); + } + + public static MemberCode fromStringOrNull(String stringMemberCode) { + return fromString(stringMemberCode).orElse(null); + } } diff --git a/src/main/java/ussum/homepage/infra/jpa/post/entity/OngoingStatus.java b/src/main/java/ussum/homepage/infra/jpa/post/entity/OngoingStatus.java index d4188e26..9fcf8cb7 100644 --- a/src/main/java/ussum/homepage/infra/jpa/post/entity/OngoingStatus.java +++ b/src/main/java/ussum/homepage/infra/jpa/post/entity/OngoingStatus.java @@ -2,9 +2,12 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.springframework.util.StringUtils; import ussum.homepage.global.error.exception.InvalidValueException; +import ussum.homepage.infra.jpa.member.entity.MemberCode; import java.util.Arrays; +import java.util.Optional; import static ussum.homepage.global.error.status.ErrorStatus.INVALID_ONGOING_STATUS; import static ussum.homepage.global.error.status.ErrorStatus.WRONG_TRANSLATED_TO_KOREAN; @@ -15,7 +18,8 @@ public enum OngoingStatus { IN_PROGRESS("진행중"), RECEIVED("접수완료"), ANSWERED("답변완료"), - COMPLETED("종료됨"); + COMPLETED("종료됨"), + EMERGENCY("긴급공지"); private final String stringOnGoingStatus; @@ -26,6 +30,19 @@ public static OngoingStatus getEnumOngoingStatusFromStringOngoingStatus(String s .orElseThrow(() -> new InvalidValueException(INVALID_ONGOING_STATUS)); } + public static Optional fromString(String stringOnGoingStatus) { + if (!StringUtils.hasText(stringOnGoingStatus)) { + return Optional.empty(); + } + return Arrays.stream(values()) + .filter(ongoingStatus -> ongoingStatus.stringOnGoingStatus.equals(stringOnGoingStatus)) + .findFirst(); + } + + public static OngoingStatus fromStringOrNull(String stringOnGoingStatus) { + return fromString(stringOnGoingStatus).orElse(null); + } + // public static String toKorean(String stringOnGoingStatus) { // switch (stringOnGoingStatus) { // case "IN_PROGRESS": From 309bde6fbebb9ea7babea99334fdaf7d2711a0c4 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:57:37 +0900 Subject: [PATCH 06/13] =?UTF-8?q?[feat]=20#50=20date=20=ED=98=95=EC=8B=9D?= =?UTF-8?q?=20=EC=B2=98=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ussum/homepage/domain/post/Post.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ussum/homepage/domain/post/Post.java b/src/main/java/ussum/homepage/domain/post/Post.java index 4d3b4198..a21dbe1e 100644 --- a/src/main/java/ussum/homepage/domain/post/Post.java +++ b/src/main/java/ussum/homepage/domain/post/Post.java @@ -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; @@ -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); } From e330e856f0b41902254e7aa79f1fe794f326c917 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:58:19 +0900 Subject: [PATCH 07/13] =?UTF-8?q?[feat]=20#50=20=EA=B3=B5=EC=A7=80?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EA=B2=8C=EC=8B=9C=ED=8C=90=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EC=9A=94=EC=B2=AD=EC=97=90=EC=84=9C=20=EA=B8=B4?= =?UTF-8?q?=EA=B8=89=EA=B3=B5=EC=A7=80=ED=95=84=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/service/dto/request/PostCreateRequest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/ussum/homepage/application/post/service/dto/request/PostCreateRequest.java b/src/main/java/ussum/homepage/application/post/service/dto/request/PostCreateRequest.java index c0e359bd..c444a4e2 100644 --- a/src/main/java/ussum/homepage/application/post/service/dto/request/PostCreateRequest.java +++ b/src/main/java/ussum/homepage/application/post/service/dto/request/PostCreateRequest.java @@ -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; @@ -12,8 +13,17 @@ public record PostCreateRequest( String content, String categoryCode, String thumbNailImage, + boolean isNotice, List postFileList ) { + @Builder + public PostCreateRequest { + } + + public PostCreateRequest(String title, String content, String categoryCode, String thumbNailImage, List postFileList) { + this(title, content, categoryCode, thumbNailImage, false, postFileList); + } + public Post toDomain(Board board, Long userId, Category category, String OnGoingStatus) { return Post.of( null, From d0c62cd6230b1894cdec2a1c5ac2c386a959d462 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:58:41 +0900 Subject: [PATCH 08/13] =?UTF-8?q?[feat]=20#50=20swagger=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/controller/PostManageController.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/ussum/homepage/application/post/controller/PostManageController.java b/src/main/java/ussum/homepage/application/post/controller/PostManageController.java index 2c6c6efa..2d37c642 100644 --- a/src/main/java/ussum/homepage/application/post/controller/PostManageController.java +++ b/src/main/java/ussum/homepage/application/post/controller/PostManageController.java @@ -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> 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> 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)); From 212078815f800dd5fdfe42284ef19389638e513d Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:59:15 +0900 Subject: [PATCH 09/13] =?UTF-8?q?[feat]=20#50=20enum=20null=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/service/PostManageService.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/ussum/homepage/application/post/service/PostManageService.java b/src/main/java/ussum/homepage/application/post/service/PostManageService.java index f9eb262c..b5dfe98e 100644 --- a/src/main/java/ussum/homepage/application/post/service/PostManageService.java +++ b/src/main/java/ussum/homepage/application/post/service/PostManageService.java @@ -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; @@ -76,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) ); @@ -104,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 postList = boardImpl.getPostList(postReader, GroupCode.getEnumGroupCodeFromStringGroupCode(groupCode), MemberCode.getEnumMemberCodeFromStringMemberCode(memberCode), pageable); + GroupCode groupCodeEnum = StringUtils.hasText(groupCode) ? GroupCode.getEnumGroupCodeFromStringGroupCode(groupCode) : null; + MemberCode memberCodeEnum = StringUtils.hasText(memberCode) ? MemberCode.getEnumMemberCodeFromStringMemberCode(memberCode) : null; + + Page postList = boardImpl.getPostList(postReader, groupCodeEnum, memberCodeEnum, pageable); PageInfo pageInfo = PageInfo.of(postList); @@ -140,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 postList = postReader.getPostListByGroupCodeAndMemberCodeAndSubCategory(GroupCode.getEnumGroupCodeFromStringGroupCode(majorCategory), MemberCode.getEnumMemberCodeFromStringMemberCode(middleCategory), subCategory, pageable); + + GroupCode groupCodeEnum = StringUtils.hasText(majorCategory) ? GroupCode.getEnumGroupCodeFromStringGroupCode(majorCategory) : null; + MemberCode memberCodeEnum = StringUtils.hasText(middleCategory) ? MemberCode.getEnumMemberCodeFromStringMemberCode(middleCategory) : null; + + Page postList = postReader.getPostListByGroupCodeAndMemberCodeAndSubCategory(groupCodeEnum, memberCodeEnum, subCategory, pageable); PageInfo pageInfo = PageInfo.of(postList); - TriFunction responseFunction = postResponseMap.get("자료집"); + TriFunction responseFunction = postResponseMap.get("자료집게시판"); List responseList = postList.getContent().stream().map(post -> responseFunction.apply(post, null, null)).toList(); return PostListRes.of(responseList, pageInfo); } @@ -188,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()); From 71cfb2408b05008ed750d7cae188787a962344ba Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 22:59:39 +0900 Subject: [PATCH 10/13] =?UTF-8?q?[refactor]=20#50=20querydsl=20=EB=A7=A4?= =?UTF-8?q?=EA=B0=9C=EB=B3=80=EC=88=98=20null=EC=9D=BC=EB=95=8C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/jpa/post/PostRepositoryImpl.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/ussum/homepage/infra/jpa/post/PostRepositoryImpl.java b/src/main/java/ussum/homepage/infra/jpa/post/PostRepositoryImpl.java index 4715e041..1a397f09 100644 --- a/src/main/java/ussum/homepage/infra/jpa/post/PostRepositoryImpl.java +++ b/src/main/java/ussum/homepage/infra/jpa/post/PostRepositoryImpl.java @@ -76,7 +76,7 @@ public Optional findByBoardIdAndIdForEditAndDelete(Long boardId, Long post @Override public Page findAllByGroupCodeAndMemberCodeAndSubCategory(GroupCode groupCode, MemberCode memberCode, String subCategory, Pageable pageable) { - BooleanBuilder whereClause = new BooleanBuilder(); + BooleanBuilder whereClause = new BooleanBuilder(postEntity.boardEntity.id.eq(6L)); if (subCategory != null && !subCategory.isEmpty()) { whereClause.and(postFileEntity.subCategory.eq(subCategory)); @@ -88,9 +88,9 @@ public Page findAllByGroupCodeAndMemberCodeAndSubCategory(GroupCode groupC whereClause.and(groupEntity.groupCode.eq(groupCode)); } - if (whereClause.getValue() == null) { - throw new IllegalArgumentException("At least one of subCategory, memberCode, or groupCode must be provided"); - } +// if (whereClause.getValue() == null) { +// throw new IllegalArgumentException("At least one of subCategory, memberCode, or groupCode must be provided"); +// } JPAQuery query = queryFactory .selectFrom(postEntity) @@ -124,7 +124,7 @@ public Page findAllByGroupCodeAndMemberCodeAndSubCategory(GroupCode groupC @Override public Page findAllByBoardIdAndGroupCodeAndMemberCode(Long boardId, GroupCode groupCode, MemberCode memberCode, Pageable pageable) { - BooleanBuilder whereClause = new BooleanBuilder(); + BooleanBuilder whereClause = new BooleanBuilder(postEntity.boardEntity.id.eq(boardId)); if (memberCode != null) { whereClause.and(memberEntity.memberCode.eq(memberCode)); @@ -133,9 +133,9 @@ public Page findAllByBoardIdAndGroupCodeAndMemberCode(Long boardId, GroupC whereClause.and(groupEntity.groupCode.eq(groupCode)); } - if (whereClause.getValue() == null) { - throw new IllegalArgumentException("At least one of memberCode, or groupCode must be provided"); - } +// if (whereClause.getValue() == null) { +// throw new IllegalArgumentException("At least one of memberCode, or groupCode must be provided"); +// } JPAQuery query = queryFactory .selectFrom(postEntity) From af2fb605c910dc92e24477833b82737b3ba165d6 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 23:00:01 +0900 Subject: [PATCH 11/13] =?UTF-8?q?[chore]=20#50=20security=20whiteList=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 --- src/main/java/ussum/homepage/global/config/SecurityConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ussum/homepage/global/config/SecurityConfig.java b/src/main/java/ussum/homepage/global/config/SecurityConfig.java index cd7b7d72..d45795bf 100644 --- a/src/main/java/ussum/homepage/global/config/SecurityConfig.java +++ b/src/main/java/ussum/homepage/global/config/SecurityConfig.java @@ -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 = { From be93156cb9c82988582964ab9e61abd4fe6be555 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Tue, 20 Aug 2024 23:00:28 +0900 Subject: [PATCH 12/13] =?UTF-8?q?[chore]=20#50=20isEmergency=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80=20=EC=88=98=EC=A0=95=20=ED=95=B4?= =?UTF-8?q?=EC=95=BC=EB=90=A8!(=EC=9D=BC=EB=8B=A8=20api=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0=EC=9A=A9=EC=9C=BC=EB=A1=9C=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/postList/NoticePostResponse.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/ussum/homepage/application/post/service/dto/response/postList/NoticePostResponse.java b/src/main/java/ussum/homepage/application/post/service/dto/response/postList/NoticePostResponse.java index b1efa7db..fbc93535 100644 --- a/src/main/java/ussum/homepage/application/post/service/dto/response/postList/NoticePostResponse.java +++ b/src/main/java/ussum/homepage/application/post/service/dto/response/postList/NoticePostResponse.java @@ -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(); } } From 7eb4fcc53d4c4cf8f65b642429a6e9e69cb49793 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Wed, 21 Aug 2024 15:16:57 +0900 Subject: [PATCH 13/13] =?UTF-8?q?[chore]=20#50=20cors=20=EC=84=A4=EC=A0=95?= =?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 --- src/main/java/ussum/homepage/global/config/CorsConfig.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/ussum/homepage/global/config/CorsConfig.java b/src/main/java/ussum/homepage/global/config/CorsConfig.java index 2c787562..141c178f 100644 --- a/src/main/java/ussum/homepage/global/config/CorsConfig.java +++ b/src/main/java/ussum/homepage/global/config/CorsConfig.java @@ -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 @@ -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); }