Skip to content

Commit

Permalink
Merge pull request #84 from IRECIPE/feat/65
Browse files Browse the repository at this point in the history
✨ [FEAT] 사용자 작성, 관심 글 보기
  • Loading branch information
longrunBiin authored Feb 9, 2024
2 parents b4cfca1 + 1f4e2fc commit b6e44a4
Show file tree
Hide file tree
Showing 9 changed files with 222 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
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;
Expand All @@ -12,6 +12,8 @@
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;
Expand Down Expand Up @@ -97,10 +99,37 @@ public ApiResponse<MemberResponse.updateNicknameResultDto> checkNickName(
return ApiResponse.onSuccess(MemberConverter.updateNicknameResult());
}

@Description("로그인")
@PostMapping(value = "/login")
public ApiResponse<MemberResponse.JoinResultDto> 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<List<MemberResponse.getPostsDto>> showWrittenPosts(
@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.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.postsLikedListDto(memberService.getLikedPostList(userId, page)));
}
}
51 changes: 51 additions & 0 deletions src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -83,4 +88,50 @@ 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 List<MemberResponse.getPostsDto> postsListDto(Page<Post> postPage){
return postPage.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());
}

public static List<MemberResponse.getPostsDto> postsLikedListDto(List<Post> 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());
}

}
32 changes: 27 additions & 5 deletions src/main/java/umc/IRECIPE_Server/dto/MemberResponse.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package umc.IRECIPE_Server.dto;

import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import java.time.LocalDateTime;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
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 {
Expand Down Expand Up @@ -48,10 +52,28 @@ 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 getPostsDto{
String title;
String subhead;
String content;
Integer likes;
String imageUrl;
String fileName;
Category category;
Level level;
Float score;
}


}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -10,4 +12,6 @@
public interface MemberLikesRepository extends JpaRepository<MemberLikes, Long> {

Optional<MemberLikes> findByMemberAndPost(Member member, Post post);

Page<MemberLikes> findByMember(Member member, Pageable pageable);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,17 @@

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.List;
import java.util.Optional;
import umc.IRECIPE_Server.entity.Post;

public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByPersonalId(String personalId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import java.time.LocalDateTime;
import java.util.List;
import umc.IRECIPE_Server.entity.Review;

public interface PostRepository extends JpaRepository<Post, Long> {

Expand All @@ -31,6 +32,8 @@ public interface PostRepository extends JpaRepository<Post, Long> {

Page<Post> findByMemberAndStatus(Pageable pageable, Member member, Status status);

Post findByStatusAndId(Status status, Long id);

List<Post> findAllByMember(Member member);

@Query("select p from Post p where p.status = 'POST' " +
Expand All @@ -41,4 +44,3 @@ public interface PostRepository extends JpaRepository<Post, Long> {
"order by p.scoreInOneMonth desc, p.likes desc")
Page<Post> findCategoryRankedPost(PageRequest pageRequest, @Param("category") Category category);
}

Loading

0 comments on commit b6e44a4

Please sign in to comment.