diff --git a/build/classes/java/main/umc/IRECIPE_Server/apiPayLoad/code/status/ErrorStatus.class b/build/classes/java/main/umc/IRECIPE_Server/apiPayLoad/code/status/ErrorStatus.class index 0b9ddd0..f1906bc 100644 Binary files a/build/classes/java/main/umc/IRECIPE_Server/apiPayLoad/code/status/ErrorStatus.class and b/build/classes/java/main/umc/IRECIPE_Server/apiPayLoad/code/status/ErrorStatus.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/apiPayLoad/exception/handler/IngredientHandler.class b/build/classes/java/main/umc/IRECIPE_Server/apiPayLoad/exception/handler/IngredientHandler.class new file mode 100644 index 0000000..ac14cce Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/apiPayLoad/exception/handler/IngredientHandler.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/converter/IngredientConverter.class b/build/classes/java/main/umc/IRECIPE_Server/converter/IngredientConverter.class new file mode 100644 index 0000000..4c78ae4 Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/converter/IngredientConverter.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/repository/IngredientRepository.class b/build/classes/java/main/umc/IRECIPE_Server/repository/IngredientRepository.class new file mode 100644 index 0000000..600d0bd Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/repository/IngredientRepository.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientCommandService.class b/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientCommandService.class new file mode 100644 index 0000000..26a75b3 Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientCommandService.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientCommandServiceImpl.class b/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientCommandServiceImpl.class new file mode 100644 index 0000000..ed5e9be Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientCommandServiceImpl.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientQueryService.class b/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientQueryService.class new file mode 100644 index 0000000..6f39e1f Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientQueryService.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientQueryServiceImpl.class b/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientQueryServiceImpl.class new file mode 100644 index 0000000..4d7d90c Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/service/ingredientService/IngredientQueryServiceImpl.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$addResultDTO$addResultDTOBuilder.class b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$addResultDTO$addResultDTOBuilder.class new file mode 100644 index 0000000..cfde056 Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$addResultDTO$addResultDTOBuilder.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$addResultDTO.class b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$addResultDTO.class new file mode 100644 index 0000000..314c962 Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$addResultDTO.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$deleteResultDTO$deleteResultDTOBuilder.class b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$deleteResultDTO$deleteResultDTOBuilder.class new file mode 100644 index 0000000..720f5f7 Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$deleteResultDTO$deleteResultDTOBuilder.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$deleteResultDTO.class b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$deleteResultDTO.class new file mode 100644 index 0000000..ce6ca98 Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$deleteResultDTO.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$findOneResultDTO$findOneResultDTOBuilder.class b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$findOneResultDTO$findOneResultDTOBuilder.class new file mode 100644 index 0000000..bd54724 Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$findOneResultDTO$findOneResultDTOBuilder.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$findOneResultDTO.class b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$findOneResultDTO.class new file mode 100644 index 0000000..af044d6 Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse$findOneResultDTO.class differ diff --git a/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse.class b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse.class new file mode 100644 index 0000000..8484efe Binary files /dev/null and b/build/classes/java/main/umc/IRECIPE_Server/web/dto/IngredientResponse.class differ diff --git a/build/resources/main/application-local.yml b/build/resources/main/application-local.yml index 6a93488..b9c34a9 100644 --- a/build/resources/main/application-local.yml +++ b/build/resources/main/application-local.yml @@ -5,7 +5,7 @@ spring: datasource: url: jdbc:mysql://localhost:3306/irecipe username: root - password: junhee1202 + password: eldnj521! driver-class-name: com.mysql.cj.jdbc.Driver sql: init: diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 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 a2798d8..dcfa410 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 @@ -43,6 +43,10 @@ public enum ErrorStatus implements BaseErrorCode { SUBTITLE_NOT_EXIST(HttpStatus.BAD_REQUEST, "POST4002", "소제목은 필수 입니다."), CONTENT_NOT_EXIST(HttpStatus.BAD_REQUEST, "POST4003", "내용은 필수 입니다."), + //재료 관련 에러 + INGREDIENT_NOT_FOUND(HttpStatus.BAD_REQUEST, "INGREDIENT4001", "재료를 찾을 수 없습니다."), + INGREDIENT_TYPE_NOT_FOUND(HttpStatus.BAD_REQUEST, "INGREDIENT4002", "재료 타입이 맞지 않습니다."), + //커뮤니티 관련 에러 POST_NOT_FOUND(HttpStatus.BAD_REQUEST, "POST4011", "게시글을 찾을 수 없습니다."), diff --git a/src/main/java/umc/IRECIPE_Server/apiPayLoad/exception/handler/IngredientHandler.java b/src/main/java/umc/IRECIPE_Server/apiPayLoad/exception/handler/IngredientHandler.java new file mode 100644 index 0000000..aeaef33 --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/apiPayLoad/exception/handler/IngredientHandler.java @@ -0,0 +1,11 @@ +package umc.IRECIPE_Server.apiPayLoad.exception.handler; + +import umc.IRECIPE_Server.apiPayLoad.code.BaseErrorCode; +import umc.IRECIPE_Server.apiPayLoad.exception.GeneralException; + +public class IngredientHandler extends GeneralException { + + public IngredientHandler(BaseErrorCode code) { + super(code); + } +} diff --git a/src/main/java/umc/IRECIPE_Server/controller/IngredientController.java b/src/main/java/umc/IRECIPE_Server/controller/IngredientController.java new file mode 100644 index 0000000..88e4b1d --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/controller/IngredientController.java @@ -0,0 +1,65 @@ +package umc.IRECIPE_Server.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import umc.IRECIPE_Server.apiPayLoad.ApiResponse; +import umc.IRECIPE_Server.converter.IngredientConverter; +import umc.IRECIPE_Server.dto.IngredientRequest; +import umc.IRECIPE_Server.entity.Ingredient; +import umc.IRECIPE_Server.service.ingredientService.IngredientCommandService; +import umc.IRECIPE_Server.service.ingredientService.IngredientQueryService; +import umc.IRECIPE_Server.web.dto.IngredientResponse; + + +@RestController +@Validated +@RequiredArgsConstructor +@RequestMapping("/ingredient") +public class IngredientController { + + private final IngredientCommandService ingredientCommandService; + private final IngredientQueryService ingredientQueryService; + + @PostMapping("/") + public ApiResponse addIngredient(@RequestBody @Valid IngredientRequest.addDTO request) { + Ingredient ingredient = ingredientCommandService.addIngredient(request); + return ApiResponse.onSuccess(IngredientConverter.toaddResultDTO(ingredient)); + } + + @GetMapping("/{ingredientId}") + public ApiResponse findOne(@PathVariable(name = "ingredientId") Long ingredientId) { + Ingredient ingredient = ingredientQueryService.findOne(ingredientId); + return ApiResponse.onSuccess(IngredientConverter.toFindOneResultDTO(ingredient)); + } + + @DeleteMapping("/{ingredientId}") + public ApiResponse deleteIngredient(@PathVariable(name = "ingredientId") Long ingredientId) { + ingredientQueryService.delete(ingredientId); + return ApiResponse.onSuccess(IngredientConverter.toDeleteResultDTO()); + } + + @PatchMapping("/{ingredientId}") + public ApiResponse updateIngredient( + @RequestBody @Valid IngredientRequest.updateDTO request, + @PathVariable(name = "ingredientId") Long ingredientId) { + Ingredient ingredient = ingredientCommandService.updateById(request, ingredientId); + return ApiResponse.onSuccess(IngredientConverter.toUpdateResultDTO(ingredient)); + } + + @GetMapping("") + public ApiResponse findAll(@RequestParam(name = "memberId") Long memberId, @RequestParam(name = "page") Integer page) { + Page ingredientList = ingredientQueryService.getIngredientList(memberId, page); + ingredientList.forEach(ingredient -> + System.out.println("Controller Ingredient name: " + ingredient.getName())); + return ApiResponse.onSuccess(IngredientConverter.toFindAllResultListDTO(ingredientList)); + } +} diff --git a/src/main/java/umc/IRECIPE_Server/converter/IngredientConverter.java b/src/main/java/umc/IRECIPE_Server/converter/IngredientConverter.java new file mode 100644 index 0000000..52fff0e --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/converter/IngredientConverter.java @@ -0,0 +1,88 @@ +package umc.IRECIPE_Server.converter; + + +import org.springframework.data.domain.Page; +import umc.IRECIPE_Server.dto.IngredientRequest; +import umc.IRECIPE_Server.entity.Ingredient; +import umc.IRECIPE_Server.web.dto.IngredientResponse; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.stream.Collectors; + +public class IngredientConverter { + + public static IngredientResponse.addResultDTO toaddResultDTO(Ingredient ingredient) { + return IngredientResponse.addResultDTO.builder() + .ingredientId(ingredient.getIngredientId()) + .createdAt(LocalDateTime.now()) + .build(); + } + + public static Ingredient toIngredient(IngredientRequest.addDTO request) { + + return Ingredient.builder() + .name(request.getName()) + .memo(request.getMemo()) + .category(request.getCategory()) + .type(request.getType()) + .expiry_date(request.getExpiryDate()) + .build(); + } + + public static IngredientResponse.findOneResultDTO toFindOneResultDTO(Ingredient ingredient) { + + return IngredientResponse.findOneResultDTO.builder() + .name(ingredient.getName()) + .memo(ingredient.getMemo()) + .category(ingredient.getCategory()) + .type(ingredient.getType()) + .expiryDate(ingredient.getExpiry_date()) + .build(); + + } + + public static IngredientResponse.findAllResultListDTO toFindAllResultListDTO(Page ingredientList) { + List ingredientResultDTOList = ingredientList.getContent().stream() + .map(IngredientConverter::toFindIngredientResultDTO) + .collect(Collectors.toList()); + + ingredientResultDTOList.forEach(resultDTO -> + System.out.println("Ingredient name: " + resultDTO.getName())); + + return IngredientResponse.findAllResultListDTO.builder() + .isLast(ingredientList.isLast()) + .isFirst(ingredientList.isFirst()) + .totalPage(ingredientList.getTotalPages()) + .totalElements(ingredientList.getTotalElements()) + .listSize(ingredientResultDTOList.size()) + .ingredientList(ingredientResultDTOList) + .build(); + } + + private static IngredientResponse.findIngredientResultDTO toFindIngredientResultDTO(Ingredient ingredient) { + + return IngredientResponse.findIngredientResultDTO.builder() + .name(ingredient.getName()) + .memo(ingredient.getMemo()) + .category(ingredient.getCategory()) + .type(ingredient.getType()) + .expiryDate(ingredient.getExpiry_date()) + .build(); + } + + public static IngredientResponse.deleteResultDTO toDeleteResultDTO() { + return IngredientResponse.deleteResultDTO.builder() + .message("재료가 삭제되었습니다.") + .build(); + + } + public static IngredientResponse.updateResultDTO toUpdateResultDTO(Ingredient ingredient) { + return IngredientResponse.updateResultDTO.builder() + .ingredientId(ingredient.getIngredientId()) + .updatedAt(LocalDateTime.now()) + .build(); + } + + +} diff --git a/src/main/java/umc/IRECIPE_Server/dto/IngredientRequest.java b/src/main/java/umc/IRECIPE_Server/dto/IngredientRequest.java new file mode 100644 index 0000000..dbd891c --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/dto/IngredientRequest.java @@ -0,0 +1,40 @@ +package umc.IRECIPE_Server.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import umc.IRECIPE_Server.common.enums.Type; + + +import java.time.LocalDate; + + +public class IngredientRequest { + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class addDTO{ + String name; + String category; + String memo; + Type type; + LocalDate expiryDate; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class updateDTO{ + String name; + String category; + String memo; + Type type; + LocalDate expiryDate; + } + + +} diff --git a/src/main/java/umc/IRECIPE_Server/dto/IngredientResponse.java b/src/main/java/umc/IRECIPE_Server/dto/IngredientResponse.java new file mode 100644 index 0000000..e37b401 --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/dto/IngredientResponse.java @@ -0,0 +1,79 @@ +package umc.IRECIPE_Server.web.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import umc.IRECIPE_Server.common.enums.Type; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +public class IngredientResponse { + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class addResultDTO{ + Long ingredientId; + LocalDateTime createdAt; + } + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class findOneResultDTO{ + String name; + String category; + String memo; + Type type; + LocalDate expiryDate; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class updateResultDTO{ + Long ingredientId; + LocalDateTime updatedAt; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class deleteResultDTO{ + String message; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class findIngredientResultDTO{ + String name; + String category; + String memo; + Type type; + LocalDate expiryDate; + } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class findAllResultListDTO{ + List ingredientList; + Integer listSize; + Integer totalPage; + Long totalElements; + Boolean isFirst; + Boolean isLast; + } + + +} diff --git a/src/main/java/umc/IRECIPE_Server/entity/Allergy.java b/src/main/java/umc/IRECIPE_Server/entity/Allergy.java index 181c7b3..8f809fb 100644 --- a/src/main/java/umc/IRECIPE_Server/entity/Allergy.java +++ b/src/main/java/umc/IRECIPE_Server/entity/Allergy.java @@ -12,6 +12,8 @@ import lombok.NoArgsConstructor; import umc.IRECIPE_Server.common.BaseEntity; +import java.time.LocalDate; + @Entity @Getter @Builder @@ -25,5 +27,4 @@ public class Allergy extends BaseEntity { // 알러지 이름 private String name; - } diff --git a/src/main/java/umc/IRECIPE_Server/entity/Ingredient.java b/src/main/java/umc/IRECIPE_Server/entity/Ingredient.java index 76f1b1b..b16a2bf 100644 --- a/src/main/java/umc/IRECIPE_Server/entity/Ingredient.java +++ b/src/main/java/umc/IRECIPE_Server/entity/Ingredient.java @@ -20,7 +20,7 @@ public class Ingredient extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ingredient_id") - private Long id; + private Long ingredientId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") @@ -39,5 +39,13 @@ public class Ingredient extends BaseEntity { // 유통 기한 private LocalDate expiry_date; + private String memo; + public void updateIngredient(String name, String category, Type type, LocalDate expiry_date, String memo) { + this.name = name; + this.category = category; + this.type = type; + this.expiry_date = expiry_date; + this.memo = memo; + } } diff --git a/src/main/java/umc/IRECIPE_Server/entity/MemberLikes.java b/src/main/java/umc/IRECIPE_Server/entity/MemberLikes.java index 3026a5e..19d1e15 100644 --- a/src/main/java/umc/IRECIPE_Server/entity/MemberLikes.java +++ b/src/main/java/umc/IRECIPE_Server/entity/MemberLikes.java @@ -1,5 +1,6 @@ package umc.IRECIPE_Server.entity; +import jakarta.persistence.*; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -29,7 +30,15 @@ public class MemberLikes extends BaseEntity { @JoinColumn(name = "post_id") private Post post; + @Column(length = 254) + private String image; + + @Column(length = 254) + private String memo; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") - private Member member; + private Member member; + + } diff --git a/src/main/java/umc/IRECIPE_Server/repository/IngredientRepository.java b/src/main/java/umc/IRECIPE_Server/repository/IngredientRepository.java index fe34cbe..257b2d2 100644 --- a/src/main/java/umc/IRECIPE_Server/repository/IngredientRepository.java +++ b/src/main/java/umc/IRECIPE_Server/repository/IngredientRepository.java @@ -1,9 +1,12 @@ package umc.IRECIPE_Server.repository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import umc.IRECIPE_Server.entity.Ingredient; +import umc.IRECIPE_Server.entity.Member; import java.util.List; @@ -17,4 +20,5 @@ public interface IngredientRepository extends JpaRepository { @Query("SELECT i.name FROM Ingredient i JOIN i.member m WHERE m.id = :memberId ORDER BY i.expiry_date ASC") List findIngredientsNameOrderByExpiryDate(@Param("memberId") String memberId); + Page findAllByMember(Member member, PageRequest pageRequest); } diff --git a/src/main/java/umc/IRECIPE_Server/repository/MemberRepository.java b/src/main/java/umc/IRECIPE_Server/repository/MemberRepository.java index 8e8d597..8aa676f 100644 --- a/src/main/java/umc/IRECIPE_Server/repository/MemberRepository.java +++ b/src/main/java/umc/IRECIPE_Server/repository/MemberRepository.java @@ -1,5 +1,6 @@ package umc.IRECIPE_Server.repository; +import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaRepository; import umc.IRECIPE_Server.entity.Member; diff --git a/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientCommandService.java b/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientCommandService.java new file mode 100644 index 0000000..48a0689 --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientCommandService.java @@ -0,0 +1,11 @@ +package umc.IRECIPE_Server.service.ingredientService; + + +import umc.IRECIPE_Server.dto.IngredientRequest; +import umc.IRECIPE_Server.entity.Ingredient; + + +public interface IngredientCommandService { + Ingredient addIngredient(IngredientRequest.addDTO request); + Ingredient updateById(IngredientRequest.updateDTO request, Long ingredientId); +} diff --git a/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientCommandServiceImpl.java b/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientCommandServiceImpl.java new file mode 100644 index 0000000..39672fb --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientCommandServiceImpl.java @@ -0,0 +1,36 @@ +package umc.IRECIPE_Server.service.ingredientService; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import umc.IRECIPE_Server.apiPayLoad.code.status.ErrorStatus; +import umc.IRECIPE_Server.apiPayLoad.exception.handler.IngredientHandler; +import umc.IRECIPE_Server.converter.IngredientConverter; + +import umc.IRECIPE_Server.dto.IngredientRequest; +import umc.IRECIPE_Server.entity.Ingredient; +import umc.IRECIPE_Server.repository.IngredientRepository; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class IngredientCommandServiceImpl implements IngredientCommandService { + + private final IngredientRepository ingredientRepository; + @Override + @Transactional + public Ingredient addIngredient(IngredientRequest.addDTO request) { + Ingredient newIngredient = IngredientConverter.toIngredient(request); + return ingredientRepository.save(newIngredient); + } + + @Override + @Transactional + public Ingredient updateById(IngredientRequest.updateDTO request, Long ingredientId) { + Ingredient ingredient = ingredientRepository.findById(ingredientId) + .orElseThrow(() -> new IngredientHandler(ErrorStatus.INGREDIENT_NOT_FOUND)); + + ingredient.updateIngredient(request.getName(), request.getCategory(), request.getType(), request.getExpiryDate(), request.getMemo()); + return ingredientRepository.save(ingredient); + } +} diff --git a/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientQueryService.java b/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientQueryService.java new file mode 100644 index 0000000..725a270 --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientQueryService.java @@ -0,0 +1,15 @@ +package umc.IRECIPE_Server.service.ingredientService; + +import org.springframework.data.domain.Page; +import umc.IRECIPE_Server.entity.Ingredient; + + +import java.util.Optional; + +public interface IngredientQueryService { + Ingredient findOne(Long ingredientId); + + void delete(Long ingredientId); + + Page getIngredientList(Long memberId, Integer page); +} diff --git a/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientQueryServiceImpl.java b/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientQueryServiceImpl.java new file mode 100644 index 0000000..dbce417 --- /dev/null +++ b/src/main/java/umc/IRECIPE_Server/service/ingredientService/IngredientQueryServiceImpl.java @@ -0,0 +1,51 @@ +package umc.IRECIPE_Server.service.ingredientService; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import umc.IRECIPE_Server.apiPayLoad.code.status.ErrorStatus; +import umc.IRECIPE_Server.apiPayLoad.exception.handler.IngredientHandler; +import umc.IRECIPE_Server.entity.Ingredient; +import umc.IRECIPE_Server.entity.Member; +import umc.IRECIPE_Server.repository.IngredientRepository; +import umc.IRECIPE_Server.repository.MemberRepository; + + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class IngredientQueryServiceImpl implements IngredientQueryService { + private final IngredientRepository ingredientRepository; + private final MemberRepository memberRepository; + @Override + public Ingredient findOne(Long ingredientId) { + Ingredient ingredient = ingredientRepository.findById(ingredientId) + .orElseThrow(() -> new IngredientHandler(ErrorStatus.INGREDIENT_NOT_FOUND)); + return ingredient; + } + + @Override + @Transactional + public void delete(Long ingredientId) { + Ingredient ingredient = findOne(ingredientId); + ingredientRepository.delete(ingredient); + } + + @Override + public Page getIngredientList(Long memberId, Integer page) { + Member member = memberRepository.findById(memberId).get(); + System.out.println("Fetching ingredient list for member: " + member.getName() + ", id: " + member.getId()); + + PageRequest pageRequest = PageRequest.of(page, 10); + Page ingredientPage = ingredientRepository.findAllByMember(member, pageRequest); + + // 추가된 로깅 + System.out.println("Fetched " + ingredientPage.getContent().size() + " ingredients for member " + member.getName()); + + return ingredientPage; + } +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 6a93488..b9c34a9 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -5,7 +5,7 @@ spring: datasource: url: jdbc:mysql://localhost:3306/irecipe username: root - password: junhee1202 + password: eldnj521! driver-class-name: com.mysql.cj.jdbc.Driver sql: init: