Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] 냉장고 CRUD 기능 구현 #40

Merged
merged 10 commits into from
Jan 29, 2024
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion build/resources/main/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
Empty file modified gradlew
100644 → 100755
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -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", "게시글을 찾을 수 없습니다."),

Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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<IngredientResponse.addResultDTO> addIngredient(@RequestBody @Valid IngredientRequest.addDTO request) {
Ingredient ingredient = ingredientCommandService.addIngredient(request);
return ApiResponse.onSuccess(IngredientConverter.toaddResultDTO(ingredient));
}

@GetMapping("/{ingredientId}")
public ApiResponse<IngredientResponse.findOneResultDTO> findOne(@PathVariable(name = "ingredientId") Long ingredientId) {
Ingredient ingredient = ingredientQueryService.findOne(ingredientId);
return ApiResponse.onSuccess(IngredientConverter.toFindOneResultDTO(ingredient));
}

@DeleteMapping("/{ingredientId}")
public ApiResponse<IngredientResponse.deleteResultDTO> deleteIngredient(@PathVariable(name = "ingredientId") Long ingredientId) {
ingredientQueryService.delete(ingredientId);
return ApiResponse.onSuccess(IngredientConverter.toDeleteResultDTO());
}

@PatchMapping("/{ingredientId}")
public ApiResponse<IngredientResponse.updateResultDTO> 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<IngredientResponse.findAllResultListDTO> findAll(@RequestParam(name = "memberId") Long memberId, @RequestParam(name = "page") Integer page) {
Page<Ingredient> ingredientList = ingredientQueryService.getIngredientList(memberId, page);
ingredientList.forEach(ingredient ->
System.out.println("Controller Ingredient name: " + ingredient.getName()));
return ApiResponse.onSuccess(IngredientConverter.toFindAllResultListDTO(ingredientList));
}
}
Original file line number Diff line number Diff line change
@@ -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<Ingredient> ingredientList) {
List<IngredientResponse.findIngredientResultDTO> 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();
}


}
40 changes: 40 additions & 0 deletions src/main/java/umc/IRECIPE_Server/dto/IngredientRequest.java
Original file line number Diff line number Diff line change
@@ -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;
}


}
79 changes: 79 additions & 0 deletions src/main/java/umc/IRECIPE_Server/dto/IngredientResponse.java
Original file line number Diff line number Diff line change
@@ -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<findIngredientResultDTO> ingredientList;
Integer listSize;
Integer totalPage;
Long totalElements;
Boolean isFirst;
Boolean isLast;
}


}
3 changes: 2 additions & 1 deletion src/main/java/umc/IRECIPE_Server/entity/Allergy.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import lombok.NoArgsConstructor;
import umc.IRECIPE_Server.common.BaseEntity;

import java.time.LocalDate;

@Entity
@Getter
@Builder
Expand All @@ -25,5 +27,4 @@ public class Allergy extends BaseEntity {

// 알러지 이름
private String name;

}
10 changes: 9 additions & 1 deletion src/main/java/umc/IRECIPE_Server/entity/Ingredient.java
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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;
}
}
11 changes: 10 additions & 1 deletion src/main/java/umc/IRECIPE_Server/entity/MemberLikes.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package umc.IRECIPE_Server.entity;

import jakarta.persistence.*;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
Expand Down Expand Up @@ -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;


}
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -17,4 +20,5 @@ public interface IngredientRepository extends JpaRepository<Ingredient, Long> {
@Query("SELECT i.name FROM Ingredient i JOIN i.member m WHERE m.id = :memberId ORDER BY i.expiry_date ASC")
List<String> findIngredientsNameOrderByExpiryDate(@Param("memberId") String memberId);

Page<Ingredient> findAllByMember(Member member, PageRequest pageRequest);
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Loading
Loading