diff --git a/src/main/java/team1/hackerton/controller/ItemController.java b/src/main/java/team1/hackerton/controller/ItemController.java index 566f284..09ad74d 100644 --- a/src/main/java/team1/hackerton/controller/ItemController.java +++ b/src/main/java/team1/hackerton/controller/ItemController.java @@ -1,14 +1,12 @@ package team1.hackerton.controller; import io.swagger.v3.oas.annotations.Operation; -import jakarta.persistence.PreUpdate; -import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -import team1.hackerton.domain.Member; import team1.hackerton.dto.request.CreateCategoryRequestDto; +import team1.hackerton.dto.request.CreateGradientRequestDto; import team1.hackerton.dto.request.CreateItemRequestDto; import team1.hackerton.dto.request.LikeItemRequestDto; import team1.hackerton.dto.response.ItemDetailResponseDto; @@ -40,14 +38,20 @@ public ResponseEntity addItem( return itemDetailService.addItem(dto); } + @PostMapping("/addGredient") + @Operation(summary = "성분 생성", description = "성분 생성") + public ResponseEntity addGradient( + @RequestBody CreateGradientRequestDto dto + ){ + return itemDetailService.addGradient(dto); + } -// @Operation(summary = "상품디테일") -// @GetMapping("/detail/{itemId}") -// public ResponseEntity readItemDetail(@AuthenticationPrincipal CustomUserDetails userDetails, @PathVariable(name="itemId") Long itemId){ -// -// return itemDetailService.readItemDetail(userDetails, itemId); -// -// } + + @Operation(summary = "상품 상세 목록") + @GetMapping("/detail/{itemId}") + public ResponseEntity readItemDetail(@AuthenticationPrincipal CustomUserDetails userDetails, @PathVariable(name="itemId") Long itemId){ + return itemDetailService.readItemDetail(userDetails, itemId); + } @PostMapping("/detail") @Operation(summary = "상품 좋아요") diff --git a/src/main/java/team1/hackerton/converter/ItemDetailConverter.java b/src/main/java/team1/hackerton/converter/ItemDetailConverter.java deleted file mode 100644 index 3bc2b1a..0000000 --- a/src/main/java/team1/hackerton/converter/ItemDetailConverter.java +++ /dev/null @@ -1,54 +0,0 @@ -//package team1.hackerton.converter; -// -//import org.springframework.beans.factory.annotation.Value; -//import team1.hackerton.domain.Gradient; -//import team1.hackerton.domain.Item; -//import team1.hackerton.dto.response.ItemDetailResponseDto; -// -//import java.util.List; -//import java.util.stream.Collectors; -// -//public class ItemDetailConverter { -// -// @Value("${cloud.aws.s3.uploadPath}") -// private static String defaultUrl; -// -// -// -// public static ItemDetailResponseDto.ItemDetailDto toDto(Item item, List gradientList, boolean like){ -// List gradientDto = toDtoList(gradientList); -// -// return ItemDetailResponseDto.ItemDetailDto.builder() -// .itemId(item.getItemId()) -// .zeroSugar(item.isZeroSugar()) -// .zeroKcal(item.isZeroKcal()) -// .itemUrl(defaultUrl + "/"+item.getUrl()) -// .company(item.getCompany()) -// .store(item.getStore()) -// .createdAt(item.getCreatedAt()) -// .updatedAt(item.getUpdatedAt()) -// .name(item.getName()) -// .price(item.getPrice()) -// .nutritionUrl(defaultUrl + "/"+item.getNutritionUrl()) -// .gradientCnt(item.getGradientList().size()) -// .infoUrl(defaultUrl + "/"+item.getInfoUrl()) -// .like(like) -// .gradientDto(gradientDto) -// .build(); -// } -// -// private static List toDtoList(List gradientList) { -// -// return gradientList.stream() -// .map(gradient -> ItemDetailResponseDto.GradientDto.builder() -// .gradientId(gradient.getGradientId()) -// .itemId(gradient.getItem().getItemId()) -// .name(gradient.getName()) -// .description(gradient.getDescription()) -// .type(gradient.getType()) -// .build()) -// .collect(Collectors.toList()); -// } -// -//} -// diff --git a/src/main/java/team1/hackerton/domain/Gradient.java b/src/main/java/team1/hackerton/domain/Gradient.java index 21c0f18..d661944 100644 --- a/src/main/java/team1/hackerton/domain/Gradient.java +++ b/src/main/java/team1/hackerton/domain/Gradient.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.*; import team1.hackerton.domain.common.BaseEntity; +import team1.hackerton.domain.enums.Type; @Entity @@ -25,5 +26,12 @@ public class Gradient extends BaseEntity { private String description; - private int type; + private Type type; + + public Gradient(Item item, String name, String description, Type type) { + this.item = item; + this.name = name; + this.description = description; + this.type = type; + } } diff --git a/src/main/java/team1/hackerton/domain/enums/Type.java b/src/main/java/team1/hackerton/domain/enums/Type.java new file mode 100644 index 0000000..3598738 --- /dev/null +++ b/src/main/java/team1/hackerton/domain/enums/Type.java @@ -0,0 +1,5 @@ +package team1.hackerton.domain.enums; + +public enum Type { + HEALTHY, CAREFUL, LEAK +} diff --git a/src/main/java/team1/hackerton/dto/process/ItemDetailProcessDto.java b/src/main/java/team1/hackerton/dto/process/ItemDetailProcessDto.java new file mode 100644 index 0000000..43bcf75 --- /dev/null +++ b/src/main/java/team1/hackerton/dto/process/ItemDetailProcessDto.java @@ -0,0 +1,38 @@ +package team1.hackerton.dto.process; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor + +public class ItemDetailProcessDto { + + private Long itemId; + private int zeroSugar; + private int zeroKcal; + private String itemUrl; + private String company; + private String store; + private String name; + private int price; + private String nutritionUrl; + private int like; + private String infoUrl; + + @Builder + public ItemDetailProcessDto(Long itemId, int zeroSugar, int zeroKcal, String itemUrl, String company, String store, String name, int price, String nutritionUrl, int like, String infoUrl) { + this.itemId = itemId; + this.zeroSugar = zeroSugar; + this.zeroKcal = zeroKcal; + this.itemUrl = itemUrl; + this.company = company; + this.store = store; + this.name = name; + this.price = price; + this.nutritionUrl = nutritionUrl; + this.like = like; + this.infoUrl = infoUrl; + } +} diff --git a/src/main/java/team1/hackerton/dto/request/CreateGradientRequestDto.java b/src/main/java/team1/hackerton/dto/request/CreateGradientRequestDto.java new file mode 100644 index 0000000..623a4a7 --- /dev/null +++ b/src/main/java/team1/hackerton/dto/request/CreateGradientRequestDto.java @@ -0,0 +1,24 @@ +package team1.hackerton.dto.request; + + +import lombok.Getter; +import lombok.NoArgsConstructor; +import team1.hackerton.domain.enums.Rate; +import team1.hackerton.domain.enums.Type; + +@Getter +@NoArgsConstructor +public class CreateGradientRequestDto { + + private Type type ; + private String name; + private String description; + private Long itemId; + + public CreateGradientRequestDto(Type type, String name, String description, Long itemId) { + this.type = type; + this.name = name; + this.description = description; + this.itemId = itemId; + } +} diff --git a/src/main/java/team1/hackerton/dto/response/ItemDetailResponseDto.java b/src/main/java/team1/hackerton/dto/response/ItemDetailResponseDto.java index bffa697..f019dbd 100644 --- a/src/main/java/team1/hackerton/dto/response/ItemDetailResponseDto.java +++ b/src/main/java/team1/hackerton/dto/response/ItemDetailResponseDto.java @@ -1,60 +1,22 @@ package team1.hackerton.dto.response; -import lombok.Builder; + +import lombok.Getter; +import lombok.NoArgsConstructor; import team1.hackerton.domain.Gradient; +import team1.hackerton.dto.process.ItemDetailProcessDto; -import java.time.LocalDateTime; import java.util.List; +@Getter +@NoArgsConstructor public class ItemDetailResponseDto { - @Builder - public static class ItemDetailDto{ - - private Long itemId; - - private boolean zeroSugar; - - private boolean zeroKcal; - - private String itemUrl; - - private String company; - - private String store; - - private String name; - - private int price; - - private String nutritionUrl; - - private int gradientCnt; - - private boolean like; - - - private String infoUrl; - - private LocalDateTime createdAt; - - private LocalDateTime updatedAt; - - private List gradientDto; - } - - @Builder - public static class GradientDto{ - private Long gradientId; - - private Long itemId; - - private String name; - - private String description; - - private int type; + private ItemDetailProcessDto detail; + private List gradientList; + public ItemDetailResponseDto(ItemDetailProcessDto detail, List gradientList) { + this.detail = detail; + this.gradientList = gradientList; } - } diff --git a/src/main/java/team1/hackerton/service/ItemDetailService.java b/src/main/java/team1/hackerton/service/ItemDetailService.java index 0e249a3..d920119 100644 --- a/src/main/java/team1/hackerton/service/ItemDetailService.java +++ b/src/main/java/team1/hackerton/service/ItemDetailService.java @@ -8,8 +8,10 @@ import team1.hackerton.domain.*; import team1.hackerton.dto.process.TotListProcessDto; import team1.hackerton.dto.request.CreateCategoryRequestDto; +import team1.hackerton.dto.request.CreateGradientRequestDto; import team1.hackerton.dto.request.CreateItemRequestDto; import team1.hackerton.dto.request.LikeItemRequestDto; +import team1.hackerton.dto.process.ItemDetailProcessDto; import team1.hackerton.dto.response.ItemDetailResponseDto; import team1.hackerton.dto.response.TotListResponseDto; import team1.hackerton.repository.*; @@ -17,7 +19,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Optional; @Service @RequiredArgsConstructor @@ -36,23 +37,25 @@ public class ItemDetailService { @Value("${cloud.aws.s3.uploadPath}") private String defaultUrl; -// public ResponseEntity readItemDetail(CustomUserDetails userDetails, Long itemId) { -// Long memberId = userDetails.getMemberId(); -// Member member = memberRepository.findById(memberId).orElseThrow(() -> new EntityNotFoundException("에러")); -// Item item = itemRepository.findById(itemId).orElseThrow(() -> new EntityNotFoundException("에러")); -// -// List gradientList = gradientRepository.findByItem(item); -// -// -// MemberItem memberItem = memberItemRepository.findByMemberAndItem(member, item); -// if (memberItem.getItem() == null) { -// ItemDetailResponseDto.ItemDetailDto dto = ItemDetailConverter.toDto(item, gradientList, false); -// return ResponseEntity.ok(dto); -// } -// -// ItemDetailResponseDto.ItemDetailDto dto = ItemDetailConverter.toDto(item, gradientList, true); -// return ResponseEntity.ok(dto); -// } + public ResponseEntity readItemDetail(CustomUserDetails userDetails, Long itemId) { + + Item item = itemRepository.findById(itemId).orElseThrow(() -> new EntityNotFoundException("에러")); + ItemDetailProcessDto processDto = ItemDetailProcessDto.builder() + .itemId(item.getItemId()) + .zeroKcal(item.getZeroKcal()) + .zeroSugar(item.getZeroSugar()) + .itemUrl(item.getUrl()) + .company(item.getCompany()) + .store(item.getStore()) + .name(item.getName()) + .price(item.getPrice()) + .nutritionUrl(item.getNutritionUrl()) + .like(item.getLikeCnt()) + .infoUrl(item.getInfoUrl()).build(); + + List gradientList = item.getGradientList(); + return ResponseEntity.ok(new ItemDetailResponseDto(processDto, gradientList)); + } public ResponseEntity likeItem(CustomUserDetails userDetails, LikeItemRequestDto dto){ Long memberId = userDetails.getMemberId(); @@ -103,4 +106,11 @@ public ResponseEntity addItem(CreateItemRequestDto dto){ return ResponseEntity.ok("ok"); } + public ResponseEntity addGradient(CreateGradientRequestDto dto){ + Item item = itemRepository.findById(dto.getItemId()).orElseThrow(() -> new EntityNotFoundException("에러")); + Gradient gradient = new Gradient(item, dto.getName(), dto.getDescription(), dto.getType()); + gradientRepository.save(gradient); + return ResponseEntity.ok("ok"); + } + }