Skip to content

Commit

Permalink
feat(#125) : 메인 리스트뷰 로그인시 api 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
yeon015 committed Aug 20, 2023
1 parent 744f414 commit 3baea3c
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.ArrayList;
import java.util.List;

import static trothly.trothcam.exception.base.ErrorCode.MEMBER_NOT_FOUND;
import static trothly.trothcam.exception.base.ErrorCode.REQUEST_ERROR;

@Slf4j
Expand Down Expand Up @@ -83,7 +84,7 @@ public BaseResponse<List<ProductRankResDto>> findRanking(@PathVariable String ty
return BaseResponse.onSuccess(result);
}

/* 메인 화면 페이징 처리 */
/* 메인 화면 페이징 처리 - 로그인x */
@GetMapping("/product-ranking/{type}/{page}")
public BaseResponse<ProductsPagingListResDto> getProducts(@PathVariable String type, @PathVariable int page) {
if(type.equals("top") && page >= 0) {
Expand All @@ -96,6 +97,22 @@ public BaseResponse<ProductsPagingListResDto> getProducts(@PathVariable String t

}

/* 메인 화면 페이징 처리 - 로그인0 */
@GetMapping("/{webId}/product-ranking/{type}/{page}")
public BaseResponse<ProductsPagingLikedResDto> getProducts(@PathVariable String webId, @PathVariable String type, @PathVariable int page, @AuthenticationPrincipal Member member) {
if(!member.getWebId().equals(webId)) {
throw new BaseException(MEMBER_NOT_FOUND);
}

if(type.equals("top") && page >= 0) {
return BaseResponse.onSuccess(productService.getProductsLikedTop(page, member));
} else if (type.equals("latest") && page >= 0) {
return BaseResponse.onSuccess(productService.getProductsLikedLatest(page, member));
} else {
throw new BaseException(REQUEST_ERROR);
}
}

/* view all */
@GetMapping("/view-all/{type}")
public BaseResponse<List<ProductRankResDto>> findViewAll(@PathVariable String type) {
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/trothly/trothcam/dto/web/ProductPagingResDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package trothly.trothcam.dto.web;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class ProductPagingResDto {
private Long historyId;
private Long productId;
private String ownerToken;
private String ownerName;
private String authorshipToken;
private String title;
private int tags;
private String imageUrl;
private Long price;
private LocalDateTime soldAt;
private boolean liked;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package trothly.trothcam.dto.web;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class ProductsPagingLikedResDto {
private List<ProductPagingResDto> getProductPagingResDto;
private int totalPages;
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public enum ErrorCode { // BaseResponseStatus와 같은 역할
SAME_MEMBER(2017, "상품의 소유자와 현재 구매하려고 하는 사용자가 같습니다.", BAD_REQUEST),
PRODUCT_IS_NOT_FOUND(2018, "존재하지 않는 상품입니다.", BAD_REQUEST),
IMAGE_NOT_FOUND(2019, "존재하지 않는 이미지입니다.", BAD_REQUEST),
LIKED_NOT_FOUND(2020, "좋아요 정보를 찾을 수 없습니다.", BAD_REQUEST),

/**
* 3000 : Response 오류
Expand Down
68 changes: 63 additions & 5 deletions src/main/java/trothly/trothcam/service/web/ProductService.java
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ public List<ProductRankResDto> findProductRankLatest() {
return latestResDtos;
}

/* 메인 페이징 처리 - top */
/* 메인 페이징 처리 로그인x - top */
@Transactional
public ProductsPagingListResDto getProductsTop(int page) {
try {
Expand All @@ -239,13 +239,13 @@ public ProductsPagingListResDto getProductsTop(int page) {
}
}

/* 메인 페이징 처리 - top */
/* 메인 페이징 처리 로그인x - latest */
@Transactional
public ProductsPagingListResDto getProductsLatest(int page) {
try {
PageRequest pageRequest = PageRequest.of(page, 8);
Page<ProductRepository.ProductTop> productLatests = productRepository.findLatestPagingDto(pageRequest);
List<ProductRankResDto> latestPagingDto = productLatests.stream()
Page<ProductRepository.ProductTop> productLatest = productRepository.findLatestPagingDto(pageRequest);
List<ProductRankResDto> latestPagingDto = productLatest.stream()
.map(t -> {
Optional<Member> owner = memberRepository.findById(t.getBuyerId());
Optional<Image> image = imageRepository.findById(t.getImageId());
Expand All @@ -254,7 +254,65 @@ public ProductsPagingListResDto getProductsLatest(int page) {
image.get().getMember().getWebToken(), t.getTitle(), t.getTags(), image.get().getImageUrl(),
t.getPrice(), t.getSoldAt());
}).collect(Collectors.toList());
return new ProductsPagingListResDto(latestPagingDto, productLatests.getTotalPages());
return new ProductsPagingListResDto(latestPagingDto, productLatest.getTotalPages());
} catch (Exception e) {
throw new BaseException(ErrorCode.DATABASE_ERROR);
}
}

/* 메인 페이징 처리 로그인0 - top */
@Transactional
public ProductsPagingLikedResDto getProductsLikedTop(int page, Member member) {
try {
PageRequest pageRequest = PageRequest.of(page, 8);
Page<ProductRepository.ProductTop> productTops = productRepository.findRankPagingDto(pageRequest);
List<ProductPagingResDto> topPagingLikedDto = productTops.stream()
.map(t -> {
Member owner = memberRepository.findById(t.getBuyerId()).orElseThrow(() -> new BaseException(MEMBER_NOT_FOUND));
Image image = imageRepository.findById(t.getImageId()).orElseThrow(() -> new BaseException(IMAGE_NOT_FOUND));
Optional<LikeProduct> like = likeProductRepository.findByProductIdAndMemberId(t.getProductId(), member.getId());

boolean liked = false;
if(like.isPresent()) {
liked = true;
} else {
liked = false;
}

return new ProductPagingResDto(t.getHistoryId(), t.getProductId(), owner.getWebToken(), owner.getName(),
image.getMember().getWebToken(), t.getTitle(), t.getTags(), image.getImageUrl(),
t.getPrice(), t.getSoldAt(), liked);
}).collect(Collectors.toList());
return new ProductsPagingLikedResDto(topPagingLikedDto, productTops.getTotalPages());
} catch (Exception e) {
throw new BaseException(ErrorCode.DATABASE_ERROR);
}
}

/* 메인 페이징 처리 로그인0 - latest */
@Transactional
public ProductsPagingLikedResDto getProductsLikedLatest(int page, Member member) {
try {
PageRequest pageRequest = PageRequest.of(page, 8);
Page<ProductRepository.ProductTop> productLatest = productRepository.findLatestPagingDto(pageRequest);
List<ProductPagingResDto> latestPagingLikedDto = productLatest.stream()
.map(t -> {
Optional<Member> owner = memberRepository.findById(t.getBuyerId());
Optional<Image> image = imageRepository.findById(t.getImageId());
Optional<LikeProduct> like = likeProductRepository.findByProductIdAndMemberId(t.getProductId(), member.getId());

boolean liked = false;
if(like.isPresent()) {
liked = true;
} else {
liked = false;
}

return new ProductPagingResDto(t.getHistoryId(), t.getProductId(), owner.get().getWebToken(), owner.get().getName(),
image.get().getMember().getWebToken(), t.getTitle(), t.getTags(), image.get().getImageUrl(),
t.getPrice(), t.getSoldAt(), liked);
}).collect(Collectors.toList());
return new ProductsPagingLikedResDto(latestPagingLikedDto, productLatest.getTotalPages());
} catch (Exception e) {
throw new BaseException(ErrorCode.DATABASE_ERROR);
}
Expand Down

0 comments on commit 3baea3c

Please sign in to comment.