From b029af1e1c53f9cd35a8c3780fc36733bd98af33 Mon Sep 17 00:00:00 2001 From: jun23314 Date: Wed, 7 Feb 2024 15:29:35 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B0=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=95=9C=20=EA=B8=80=20=EB=B3=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRECIPE_Server/entity/QDislikedFood.java | 61 +++++++++++++++++++ .../IRECIPE_Server/entity/QIngredient.java | 6 +- .../umc/IRECIPE_Server/entity/QMember.java | 2 + .../umc/IRECIPE_Server/entity/QReview.java | 2 + .../exception/handler/PostHandler.java | 10 +++ .../controller/MemberController.java | 20 ++++++ .../converter/MemberConverter.java | 32 ++++++++++ .../IRECIPE_Server/dto/MemberResponse.java | 45 ++++++++++++-- .../repository/MemberRepository.java | 5 ++ .../repository/PostRepository.java | 3 + .../IRECIPE_Server/service/MemberService.java | 52 ++++++++++++---- src/main/resources/application.yml | 2 +- 12 files changed, 222 insertions(+), 18 deletions(-) create mode 100644 src/main/generated/umc/IRECIPE_Server/entity/QDislikedFood.java create mode 100644 src/main/java/umc/IRECIPE_Server/apiPayLoad/exception/handler/PostHandler.java diff --git a/src/main/generated/umc/IRECIPE_Server/entity/QDislikedFood.java b/src/main/generated/umc/IRECIPE_Server/entity/QDislikedFood.java new file mode 100644 index 0000000..686fd3b --- /dev/null +++ b/src/main/generated/umc/IRECIPE_Server/entity/QDislikedFood.java @@ -0,0 +1,61 @@ +package umc.IRECIPE_Server.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QDislikedFood is a Querydsl query type for DislikedFood + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QDislikedFood extends EntityPathBase { + + private static final long serialVersionUID = -951686072L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QDislikedFood dislikedFood = new QDislikedFood("dislikedFood"); + + public final umc.IRECIPE_Server.common.QBaseEntity _super = new umc.IRECIPE_Server.common.QBaseEntity(this); + + //inherited + public final DateTimePath createdAt = _super.createdAt; + + public final NumberPath id = createNumber("id", Long.class); + + public final QMember member; + + public final StringPath name = createString("name"); + + //inherited + public final DateTimePath updatedAt = _super.updatedAt; + + public QDislikedFood(String variable) { + this(DislikedFood.class, forVariable(variable), INITS); + } + + public QDislikedFood(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QDislikedFood(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QDislikedFood(PathMetadata metadata, PathInits inits) { + this(DislikedFood.class, metadata, inits); + } + + public QDislikedFood(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.member = inits.isInitialized("member") ? new QMember(forProperty("member")) : null; + } + +} + diff --git a/src/main/generated/umc/IRECIPE_Server/entity/QIngredient.java b/src/main/generated/umc/IRECIPE_Server/entity/QIngredient.java index 6760378..da14122 100644 --- a/src/main/generated/umc/IRECIPE_Server/entity/QIngredient.java +++ b/src/main/generated/umc/IRECIPE_Server/entity/QIngredient.java @@ -24,13 +24,15 @@ public class QIngredient extends EntityPathBase { public final umc.IRECIPE_Server.common.QBaseEntity _super = new umc.IRECIPE_Server.common.QBaseEntity(this); - public final StringPath category = createString("category"); + public final EnumPath category = createEnum("category", umc.IRECIPE_Server.common.enums.IngredientCategory.class); //inherited public final DateTimePath createdAt = _super.createdAt; public final DatePath expiry_date = createDate("expiry_date", java.time.LocalDate.class); + public final StringPath imageUrl = createString("imageUrl"); + public final NumberPath ingredientId = createNumber("ingredientId", Long.class); public final QMember member; @@ -39,6 +41,8 @@ public class QIngredient extends EntityPathBase { public final StringPath name = createString("name"); + public final NumberPath remainingDays = createNumber("remainingDays", Integer.class); + public final EnumPath type = createEnum("type", umc.IRECIPE_Server.common.enums.Type.class); //inherited diff --git a/src/main/generated/umc/IRECIPE_Server/entity/QMember.java b/src/main/generated/umc/IRECIPE_Server/entity/QMember.java index 81fd4e6..a35afb9 100644 --- a/src/main/generated/umc/IRECIPE_Server/entity/QMember.java +++ b/src/main/generated/umc/IRECIPE_Server/entity/QMember.java @@ -29,6 +29,8 @@ public class QMember extends EntityPathBase { //inherited public final DateTimePath createdAt = _super.createdAt; + public final ListPath dislikedFoodList = this.createList("dislikedFoodList", DislikedFood.class, QDislikedFood.class, PathInits.DIRECT2); + public final BooleanPath event = createBoolean("event"); public final EnumPath gender = createEnum("gender", umc.IRECIPE_Server.common.enums.Gender.class); diff --git a/src/main/generated/umc/IRECIPE_Server/entity/QReview.java b/src/main/generated/umc/IRECIPE_Server/entity/QReview.java index 7b45df0..2045d45 100644 --- a/src/main/generated/umc/IRECIPE_Server/entity/QReview.java +++ b/src/main/generated/umc/IRECIPE_Server/entity/QReview.java @@ -29,6 +29,8 @@ public class QReview extends EntityPathBase { //inherited public final DateTimePath createdAt = _super.createdAt; + public final StringPath fileName = createString("fileName"); + public final NumberPath id = createNumber("id", Long.class); public final StringPath imageUrl = createString("imageUrl"); diff --git a/src/main/java/umc/IRECIPE_Server/apiPayLoad/exception/handler/PostHandler.java b/src/main/java/umc/IRECIPE_Server/apiPayLoad/exception/handler/PostHandler.java new file mode 100644 index 0000000..487107e --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/apiPayLoad/exception/handler/PostHandler.java @@ -0,0 +1,10 @@ +package umc.IRECIPE_Server.apiPayLoad.exception.handler; + +import umc.IRECIPE_Server.apiPayLoad.code.BaseErrorCode; +import umc.IRECIPE_Server.apiPayLoad.exception.GeneralException; + +public class PostHandler extends GeneralException { + public PostHandler(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java index 54481fb..d3e8d03 100644 --- a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java +++ b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java @@ -3,9 +3,13 @@ import io.jsonwebtoken.io.IOException; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; +import java.util.List; import jdk.jfr.Description; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; import org.springframework.http.MediaType; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -18,6 +22,7 @@ import umc.IRECIPE_Server.dto.MemberResponse; import umc.IRECIPE_Server.dto.MemberLoginRequestDto; import umc.IRECIPE_Server.entity.Member; +import umc.IRECIPE_Server.entity.Post; import umc.IRECIPE_Server.jwt.JwtProvider; import umc.IRECIPE_Server.service.MemberService; @@ -97,10 +102,25 @@ public ApiResponse checkNickName( return ApiResponse.onSuccess(MemberConverter.updateNicknameResult()); } + @Description("로그인") @PostMapping(value = "/login") public ApiResponse joinLogin( @RequestBody @Valid MemberLoginRequestDto.JoinLoginDto request){ Member response = memberService.login(request); return ApiResponse.onSuccess(MemberConverter.toJoinResult(response, jwtProvider)); } + + @Description("사용자가 작성한 글 보기 api") + @GetMapping(value = "/written") + public ApiResponse showPosts( + @RequestParam(name = "page") Integer page + ){ + //사용자 id 찾기 + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String userId = authentication.getName();//personal id + + memberService.getPostList(userId, page); + return null; + + } } \ No newline at end of file diff --git a/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java b/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java index 69e2189..3de53fd 100644 --- a/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java +++ b/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java @@ -1,13 +1,18 @@ package umc.IRECIPE_Server.converter; import java.util.List; +import java.util.stream.Collectors; +import org.springframework.data.domain.Page; import umc.IRECIPE_Server.common.enums.Age; import umc.IRECIPE_Server.common.enums.Gender; import umc.IRECIPE_Server.common.enums.Role; import umc.IRECIPE_Server.dto.MemberRequest; import umc.IRECIPE_Server.dto.MemberResponse; +import umc.IRECIPE_Server.dto.MemberResponse.getPostsDto; import umc.IRECIPE_Server.entity.Member; import umc.IRECIPE_Server.entity.MemberAllergy; +import umc.IRECIPE_Server.entity.Post; +import umc.IRECIPE_Server.entity.Review; import umc.IRECIPE_Server.jwt.JwtProvider; import umc.IRECIPE_Server.repository.TokenRepository; @@ -83,4 +88,31 @@ public static MemberResponse.updateNicknameResultDto updateNicknameResult(){ .str("사용 가능한 닉네임 입니다.") .build(); } + + public static MemberResponse.getPostsDto postsDto(Post post){ + return MemberResponse.getPostsDto.builder() + .title(post.getTitle()) + .subhead(post.getSubhead()) + .level(post.getLevel()) + .likes(post.getLikes()) + .fileName(post.getFileName()) + .content(post.getContent()) + .category(post.getCategory()) + .imageUrl(post.getImageUrl()) + .build(); + } + + public static MemberResponse.getPostsListDto postsListDto(Page postList){ + List postsDtoList = postList.stream() + .map(MemberConverter::postsDto).collect(Collectors.toList()); + + return MemberResponse.getPostsListDto.builder() + .isFirst(postList.isFirst()) + .isLast(postList.isLast()) + .totalPage(postList.getTotalPages()) + .totalElements(postList.getTotalElements()) + .listSize(postsDtoList.size()) + .build(); + } + } diff --git a/src/main/java/umc/IRECIPE_Server/dto/MemberResponse.java b/src/main/java/umc/IRECIPE_Server/dto/MemberResponse.java index f79e35b..0f044e3 100644 --- a/src/main/java/umc/IRECIPE_Server/dto/MemberResponse.java +++ b/src/main/java/umc/IRECIPE_Server/dto/MemberResponse.java @@ -1,5 +1,7 @@ package umc.IRECIPE_Server.dto; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import java.time.LocalDateTime; import java.util.List; import lombok.AllArgsConstructor; @@ -7,7 +9,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; import umc.IRECIPE_Server.common.enums.Age; +import umc.IRECIPE_Server.common.enums.Category; import umc.IRECIPE_Server.common.enums.Gender; +import umc.IRECIPE_Server.common.enums.Level; import umc.IRECIPE_Server.entity.MemberAllergy; public class MemberResponse { @@ -48,10 +52,41 @@ public static class updateNicknameResultDto{ @Getter @AllArgsConstructor public static class JoinResultDto{ - private final Long memberId; - private final String grantType; - private final String accessToken; - private final String refreshToken; - private final Long accessTokenExpiresIn; + Long memberId; + String grantType; + String accessToken; + String refreshToken; + Long accessTokenExpiresIn; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class getPostsListDto { + List posts; + Integer listSize; + Integer totalPage; + Long totalElements; + Boolean isFirst; + Boolean isLast; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class getPostsDto{ + String title; + String subhead; + String content; + Integer likes; + String imageUrl; + String fileName; + Category category; + Level level; + Float score; } + + } diff --git a/src/main/java/umc/IRECIPE_Server/repository/MemberRepository.java b/src/main/java/umc/IRECIPE_Server/repository/MemberRepository.java index 807f898..d0b8e35 100644 --- a/src/main/java/umc/IRECIPE_Server/repository/MemberRepository.java +++ b/src/main/java/umc/IRECIPE_Server/repository/MemberRepository.java @@ -2,11 +2,16 @@ import javax.swing.text.html.Option; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import umc.IRECIPE_Server.dto.MemberResponse; import umc.IRECIPE_Server.entity.Member; import java.util.Optional; +import umc.IRECIPE_Server.entity.Post; public interface MemberRepository extends JpaRepository { Optional findByPersonalId(String personalId); diff --git a/src/main/java/umc/IRECIPE_Server/repository/PostRepository.java b/src/main/java/umc/IRECIPE_Server/repository/PostRepository.java index 7d137af..f55ac40 100644 --- a/src/main/java/umc/IRECIPE_Server/repository/PostRepository.java +++ b/src/main/java/umc/IRECIPE_Server/repository/PostRepository.java @@ -8,6 +8,7 @@ import umc.IRECIPE_Server.entity.Post; import java.util.List; +import umc.IRECIPE_Server.entity.Review; public interface PostRepository extends JpaRepository { @@ -16,4 +17,6 @@ public interface PostRepository extends JpaRepository { @Query("select p from Post p order by p.score desc, p.likes desc") Page findRankedPost(PageRequest pageRequest); + Page findAllByMember(Member member, PageRequest pageRequest); + } \ No newline at end of file diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index a96446e..87da98f 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -1,15 +1,19 @@ package umc.IRECIPE_Server.service; import java.io.IOException; +import java.util.ArrayList; import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import umc.IRECIPE_Server.apiPayLoad.code.status.ErrorStatus; import umc.IRECIPE_Server.apiPayLoad.exception.handler.AllergyHandler; import umc.IRECIPE_Server.apiPayLoad.exception.handler.MemberHandler; +import umc.IRECIPE_Server.apiPayLoad.exception.handler.PostHandler; import umc.IRECIPE_Server.common.S3.S3Service; import umc.IRECIPE_Server.converter.MemberAllergyConverter; import umc.IRECIPE_Server.converter.MemberConverter; @@ -19,11 +23,14 @@ import umc.IRECIPE_Server.entity.Allergy; import umc.IRECIPE_Server.entity.Member; import umc.IRECIPE_Server.entity.MemberAllergy; +import umc.IRECIPE_Server.entity.Post; import umc.IRECIPE_Server.entity.RefreshToken; +import umc.IRECIPE_Server.entity.Review; import umc.IRECIPE_Server.jwt.JwtProvider; import umc.IRECIPE_Server.repository.AllergyRepository; import umc.IRECIPE_Server.repository.MemberAllergyRepository; import umc.IRECIPE_Server.repository.MemberRepository; +import umc.IRECIPE_Server.repository.PostRepository; import umc.IRECIPE_Server.repository.TokenRepository; import java.util.List; import java.util.stream.Collectors; @@ -37,6 +44,7 @@ public class MemberService { private final AllergyRepository allergyRepository; private final MemberAllergyRepository memberAllergyRepository; private final TokenRepository tokenRepository; + private final PostRepository postRepository; private final JwtProvider jwtProvider; private final S3Service s3Service; @@ -59,20 +67,9 @@ public void checkNickname(String nickname) { throw new MemberHandler(ErrorStatus.NICKNAME_ALREADY_EXIST); } - public Member findMemberId(String personalId){ - Member member = memberRepository.findByPersonalId(personalId) - .orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND)); - if(member == null){ - throw new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND); - } - return member; - } - public MemberAllergy findMemberAllergy(Long memberId, Long allergyId){ return memberAllergyRepository .findByAllergy_IdAndMember_Id(memberId, allergyId); - - } @Transactional @@ -170,4 +167,37 @@ public Member login(MemberLoginRequestDto.JoinLoginDto request){ return member; } + @Transactional + public List viewStoredPost(String personalId){ + //누가 쓴거 볼건데 + Member member = memberRepository.findByPersonalId(personalId) + .orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND)); + + List postList = postRepository.findAllByMember(member); + List posts = new ArrayList<>(); + for(Post post: postList){ + if(post.getMember().equals(member)){ + posts.add(post); + } + } + + //사용자가 작성한 글이 없는 경우 + if(posts.isEmpty()) + throw new PostHandler(ErrorStatus.POST_NOT_FOUND); + + return posts; + + } + + public Page getPostList(String personalId, Integer page) { + Optional member = memberRepository.findByPersonalId(personalId); + if(member.isEmpty()){ + throw new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND); + } + Member mem = member.get(); + + Page postPage = postRepository.findAllByMember(mem, PageRequest.of(page, 10)); + return postPage; + } + } \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1c91217..c433c94 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: include: dev, local - active: dev \ No newline at end of file + active: local \ No newline at end of file From 37c684a0355ee250c55a6c57612b08d994c6c061 Mon Sep 17 00:00:00 2001 From: jun23314 Date: Wed, 7 Feb 2024 16:53:57 +0900 Subject: [PATCH 2/6] =?UTF-8?q?validation=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiPayLoad/code/status/ErrorStatus.java | 7 ++++++- .../IRECIPE_Server/controller/MemberController.java | 10 +++------- .../java/umc/IRECIPE_Server/service/MemberService.java | 7 +++++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/apiPayLoad/code/status/ErrorStatus.java b/src/main/java/umc/IRECIPE_Server/apiPayLoad/code/status/ErrorStatus.java index aac409f..67dd1c5 100644 --- a/src/main/java/umc/IRECIPE_Server/apiPayLoad/code/status/ErrorStatus.java +++ b/src/main/java/umc/IRECIPE_Server/apiPayLoad/code/status/ErrorStatus.java @@ -57,7 +57,12 @@ public enum ErrorStatus implements BaseErrorCode { //알러지 관련 에러 - ALLERGY_NOT_FOUND(HttpStatus.BAD_REQUEST, "ALLERGY4001", "알러지를 찾을 수 없습니다."); + ALLERGY_NOT_FOUND(HttpStatus.BAD_REQUEST, "ALLERGY4001", "알러지를 찾을 수 없습니다."), + + //페이지 관련 에러 + MEMBER_DONT_HAVE_POSTS(HttpStatus.BAD_REQUEST, "PAGE4003", "게시물이 존재하지 않습니다."), + NO_MORE_PAGE(HttpStatus.BAD_REQUEST, "PAGE4002", "더이상 페이지가 존재하지 않습니다."), + INVALID_PAGE(HttpStatus.BAD_REQUEST, "PAGE4001", "유효하지 않은 페이지입니다."); private final HttpStatus httpStatus; private final String code; diff --git a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java index bc290ae..3dbcfc2 100644 --- a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java +++ b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java @@ -1,30 +1,25 @@ package umc.IRECIPE_Server.controller; import io.jsonwebtoken.io.IOException; -import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import java.util.List; import jdk.jfr.Description; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; import org.springframework.http.MediaType; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import umc.IRECIPE_Server.apiPayLoad.ApiResponse; +import umc.IRECIPE_Server.apiPayLoad.code.status.ErrorStatus; +import umc.IRECIPE_Server.apiPayLoad.exception.handler.PostHandler; import umc.IRECIPE_Server.common.S3.S3Service; import umc.IRECIPE_Server.converter.MemberConverter; import umc.IRECIPE_Server.dto.MemberRequest; import umc.IRECIPE_Server.dto.MemberResponse; import umc.IRECIPE_Server.dto.MemberLoginRequestDto; import umc.IRECIPE_Server.entity.Member; -import umc.IRECIPE_Server.entity.Post; import umc.IRECIPE_Server.jwt.JwtProvider; import umc.IRECIPE_Server.service.MemberService; @@ -117,6 +112,7 @@ public ApiResponse joinLogin( public ApiResponse> showPosts( @RequestParam(name = "page") Integer page ){ + if(page < 0) throw new PostHandler(ErrorStatus.INVALID_PAGE); //사용자 id 찾기 Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String userId = authentication.getName();//personal id diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index b9d432d..29466a3 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -202,8 +202,11 @@ public Page getPostList(String personalId, Integer page) { Member mem = member.get(); log.info(mem.getName()); - postPage = postRepository.findByMemberAndStatus(pageable, mem, Status.TEMP); - if(postPage.isEmpty()) throw new PostHandler(ErrorStatus.POST_NOT_FOUND); + postPage = postRepository.findByMemberAndStatus(pageable, mem, Status.POST); + if(postPage.isEmpty()) { + if(page > 0) throw new PostHandler(ErrorStatus.NO_MORE_PAGE); + else if(page == 0) throw new PostHandler(ErrorStatus.MEMBER_DONT_HAVE_POSTS); + } return postPage; } From c593f0093f068d72635f56d6a8d949e22c0178f6 Mon Sep 17 00:00:00 2001 From: jun23314 Date: Thu, 8 Feb 2024 17:29:10 +0900 Subject: [PATCH 3/6] temp --- .../controller/MemberController.java | 16 +++++++++-- .../repository/MemberLikesRepository.java | 2 ++ .../IRECIPE_Server/service/MemberService.java | 27 ++++++++++++++++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java index 3dbcfc2..3601fcc 100644 --- a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java +++ b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java @@ -109,7 +109,7 @@ public ApiResponse joinLogin( @Description("사용자가 작성한 글 보기 api") @GetMapping(value = "/written") - public ApiResponse> showPosts( + public ApiResponse> showWrittenPosts( @RequestParam(name = "page") Integer page ){ if(page < 0) throw new PostHandler(ErrorStatus.INVALID_PAGE); @@ -117,7 +117,19 @@ public ApiResponse> showPosts( Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String userId = authentication.getName();//personal id - return ApiResponse.onSuccess(MemberConverter.postsListDto(memberService.getPostList(userId, page))); + return ApiResponse.onSuccess(MemberConverter.postsListDto(memberService.getWrittenPostList(userId, page))); + } + + @Description("사용자가 좋아요 누른 글 보기") + @GetMapping(value = "/liked") + public ApiResponse showLikedPosts( + @RequestParam(name = "page") Integer page + ){ + if(page < 0) throw new PostHandler(ErrorStatus.INVALID_PAGE); + //사용자 id 찾기 + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String userId = authentication.getName();//personal id + return ApiResponse.onSuccess(MemberConverter.postsListDto(memberService.getLikedPostList(userId, page))); } } \ No newline at end of file diff --git a/src/main/java/umc/IRECIPE_Server/repository/MemberLikesRepository.java b/src/main/java/umc/IRECIPE_Server/repository/MemberLikesRepository.java index 411b127..1b0b6c4 100644 --- a/src/main/java/umc/IRECIPE_Server/repository/MemberLikesRepository.java +++ b/src/main/java/umc/IRECIPE_Server/repository/MemberLikesRepository.java @@ -10,4 +10,6 @@ public interface MemberLikesRepository extends JpaRepository { Optional findByMemberAndPost(Member member, Post post); + + Optional findByMember(Member member); } diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index 29466a3..8f07eff 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -25,12 +25,14 @@ import umc.IRECIPE_Server.entity.Allergy; import umc.IRECIPE_Server.entity.Member; import umc.IRECIPE_Server.entity.MemberAllergy; +import umc.IRECIPE_Server.entity.MemberLikes; import umc.IRECIPE_Server.entity.Post; import umc.IRECIPE_Server.entity.RefreshToken; import umc.IRECIPE_Server.entity.Review; import umc.IRECIPE_Server.jwt.JwtProvider; import umc.IRECIPE_Server.repository.AllergyRepository; import umc.IRECIPE_Server.repository.MemberAllergyRepository; +import umc.IRECIPE_Server.repository.MemberLikesRepository; import umc.IRECIPE_Server.repository.MemberRepository; import umc.IRECIPE_Server.repository.PostRepository; import umc.IRECIPE_Server.repository.TokenRepository; @@ -47,6 +49,7 @@ public class MemberService { private final MemberAllergyRepository memberAllergyRepository; private final TokenRepository tokenRepository; private final PostRepository postRepository; + private final MemberLikesRepository memberLikesRepository; private final JwtProvider jwtProvider; private final S3Service s3Service; @@ -191,7 +194,7 @@ public List viewStoredPost(String personalId){ } - public Page getPostList(String personalId, Integer page) { + public Page getWrittenPostList(String personalId, Integer page) { Page postPage; Pageable pageable = PageRequest.of(page, 10); @@ -211,4 +214,26 @@ public Page getPostList(String personalId, Integer page) { return postPage; } + public Page getLikedPostList(String personalId, Integer page) { + Page postPage; + Pageable pageable = PageRequest.of(page, 10); + + Optional member = memberRepository.findByPersonalId(personalId); + if(member.isEmpty()){ + throw new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND); + } + Member mem = member.get(); + log.info(mem.getName()); + + Optional memberLikes = memberLikesRepository.findByMember(mem); + + postPage = postRepository.findByMemberAndStatus(pageable, mem, Status.POST); + if(postPage.isEmpty()) { + if(page > 0) throw new PostHandler(ErrorStatus.NO_MORE_PAGE); + else if(page == 0) throw new PostHandler(ErrorStatus.MEMBER_DONT_HAVE_POSTS); + } + + return postPage; + } + } \ No newline at end of file From b159242f52b99f97a1e6b4f29f9fb03c66e74b86 Mon Sep 17 00:00:00 2001 From: jun23314 Date: Fri, 9 Feb 2024 14:37:05 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EA=B4=80?= =?UTF-8?q?=EC=8B=AC=20=EA=B8=80=20=EB=B3=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController.java | 2 +- .../converter/MemberConverter.java | 16 ++++++++++++++ .../repository/MemberLikesRepository.java | 4 +++- .../repository/PostRepository.java | 2 ++ .../IRECIPE_Server/service/MemberService.java | 21 ++++++++++++------- 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java index 3601fcc..b585b1a 100644 --- a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java +++ b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java @@ -130,6 +130,6 @@ public ApiResponse showLikedPosts( Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String userId = authentication.getName();//personal id - return ApiResponse.onSuccess(MemberConverter.postsListDto(memberService.getLikedPostList(userId, page))); + return ApiResponse.onSuccess(MemberConverter.postsLikedListDto(memberService.getLikedPostList(userId, page))); } } \ No newline at end of file diff --git a/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java b/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java index ee1edfd..82840fa 100644 --- a/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java +++ b/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java @@ -118,4 +118,20 @@ public static List postsListDto(Page postPage) .collect(Collectors.toList()); } + public static List postsLikedListDto(List postList){ + return postList.stream() + .map(val -> MemberResponse.getPostsDto.builder() + .title(val.getTitle()) + .subhead(val.getSubhead()) + .level(val.getLevel()) + .score(val.getScore()) + .content(val.getContent()) + .likes(val.getLikes()) + .imageUrl(val.getImageUrl()) + .category(val.getCategory()) + .fileName(val.getFileName()) + .build()) + .collect(Collectors.toList()); + } + } diff --git a/src/main/java/umc/IRECIPE_Server/repository/MemberLikesRepository.java b/src/main/java/umc/IRECIPE_Server/repository/MemberLikesRepository.java index 1b0b6c4..42651ba 100644 --- a/src/main/java/umc/IRECIPE_Server/repository/MemberLikesRepository.java +++ b/src/main/java/umc/IRECIPE_Server/repository/MemberLikesRepository.java @@ -1,5 +1,7 @@ package umc.IRECIPE_Server.repository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import umc.IRECIPE_Server.entity.Member; import umc.IRECIPE_Server.entity.MemberLikes; @@ -11,5 +13,5 @@ public interface MemberLikesRepository extends JpaRepository Optional findByMemberAndPost(Member member, Post post); - Optional findByMember(Member member); + Page findByMember(Member member, Pageable pageable); } diff --git a/src/main/java/umc/IRECIPE_Server/repository/PostRepository.java b/src/main/java/umc/IRECIPE_Server/repository/PostRepository.java index 0dd9d99..df548e7 100644 --- a/src/main/java/umc/IRECIPE_Server/repository/PostRepository.java +++ b/src/main/java/umc/IRECIPE_Server/repository/PostRepository.java @@ -29,6 +29,8 @@ public interface PostRepository extends JpaRepository { Page findByMemberAndStatus(Pageable pageable, Member member, Status status); + Post findByStatusAndId(Status status, Long id); + List findAllByMember(Member member); @Query("select p from Post p order by p.score desc, p.likes desc") diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index 8f07eff..f9c1e87 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -214,8 +214,8 @@ public Page getWrittenPostList(String personalId, Integer page) { return postPage; } - public Page getLikedPostList(String personalId, Integer page) { - Page postPage; + public List getLikedPostList(String personalId, Integer page) { + Page postIdPage; Pageable pageable = PageRequest.of(page, 10); Optional member = memberRepository.findByPersonalId(personalId); @@ -225,15 +225,20 @@ public Page getLikedPostList(String personalId, Integer page) { Member mem = member.get(); log.info(mem.getName()); - Optional memberLikes = memberLikesRepository.findByMember(mem); - - postPage = postRepository.findByMemberAndStatus(pageable, mem, Status.POST); - if(postPage.isEmpty()) { + postIdPage = memberLikesRepository.findByMember(mem, pageable); + if(postIdPage.isEmpty()){ if(page > 0) throw new PostHandler(ErrorStatus.NO_MORE_PAGE); - else if(page == 0) throw new PostHandler(ErrorStatus.MEMBER_DONT_HAVE_POSTS); + if(page == 0) throw new PostHandler(ErrorStatus.MEMBER_DONT_HAVE_POSTS); } - return postPage; + List postList = new ArrayList<>(); + for(MemberLikes memberLikes : postIdPage.toList()){ + Long id = memberLikes.getId(); + Post tmp = postRepository.findByStatusAndId(Status.POST, id); + postList.add(tmp); + } + + return postList; } } \ No newline at end of file From 9c7154d31a4463b6e5119a02177061449999b51a Mon Sep 17 00:00:00 2001 From: jun23314 Date: Fri, 9 Feb 2024 14:38:56 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/umc/IRECIPE_Server/service/MemberService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index f9c1e87..edc9695 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -238,6 +238,10 @@ public List getLikedPostList(String personalId, Integer page) { postList.add(tmp); } + if(postList.isEmpty()){ + throw new MemberHandler(ErrorStatus.POST_NOT_FOUND); + } + return postList; } From 1f4e2fc138642c5b4b7c9d6d05e3b0b2f0d4fff3 Mon Sep 17 00:00:00 2001 From: jun23314 Date: Fri, 9 Feb 2024 15:14:35 +0900 Subject: [PATCH 6/6] =?UTF-8?q?yml=20=ED=8C=8C=EC=9D=BC=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 --- src/main/resources/application.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index c433c94..1c91217 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: include: dev, local - active: local \ No newline at end of file + active: dev \ No newline at end of file