Sangwon Coding
Spring Boot - 주문내역 API CRUD 본문
OrderDetail.java
package com.example.study.model.entity;
import lombok.*;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@ToString(exclude = {"orderGroup","item"})
@EntityListeners(AuditingEntityListener.class)
@Builder
public class OrderDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String status;
private LocalDateTime arrivalDate;
private Integer quantity;
private BigDecimal totalPrice;
@CreatedDate
private LocalDateTime createdAt;
@CreatedBy
private String createdBy;
@LastModifiedDate
private LocalDateTime updatedAt;
@LastModifiedBy
private String updatedBy;
// OrderDetail N : 1 Item
@ManyToOne
private Item item;
// OrderDetail N : 1 OrderGroup
@ManyToOne
private OrderGroup orderGroup;
}
OrderGroup.java
package com.example.study.model.entity;
import com.example.study.model.enumclass.OrderType;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@ToString(exclude = {"user","orderDetailList"})
@EntityListeners(AuditingEntityListener.class)
@Builder
@Accessors(chain = true)
public class OrderGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String status;
@Enumerated(EnumType.STRING)
private OrderType orderType; // 주문의 형태 - 일괄 / 개별
private String revAddress;
private String revName;
private String paymentType; // 카드 / 현금
private BigDecimal totalPrice;
private Integer totalQuantity;
private LocalDateTime orderAt;
private LocalDateTime arrivalDate;
@CreatedDate
private LocalDateTime createdAt;
@CreatedBy
private String createdBy;
@LastModifiedDate
private LocalDateTime updatedAt;
@LastModifiedBy
private String updatedBy;
// OrderGroup N : 1 User
@ManyToOne
private User user;
// OrderGroup 1 : N OrderDetail
@OneToMany(fetch = FetchType.LAZY, mappedBy = "orderGroup")
private List<OrderDetail> orderDetailList;
}
OrderGroupApiRequest.java
package com.example.study.model.network.request;
import com.example.study.model.enumclass.OrderType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OrderGroupApiRequest {
private Long id;
private String status;
private OrderType orderType;
private String revAddress;
private String revName;
private String paymentType;
private BigDecimal totalPrice;
private Integer totalQuantity;
private LocalDateTime orderAt;
private LocalDateTime arrivalDate;
private Long userId;
}
OrderGroupApiResponse.java
package com.example.study.model.network.response;
import com.example.study.model.enumclass.OrderType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OrderGroupApiResponse {
private Long id;
private String status;
private OrderType orderType;
private String revAddress;
private String revName;
private String paymentType;
private BigDecimal totalPrice;
private Integer totalQuantity;
private LocalDateTime orderAt;
private LocalDateTime arrivalDate;
private Long userId;
private List<ItemApiResponse> itemApiResponseList;
}
UserOrderInfoApiResponse.java
package com.example.study.model.network.response;
import com.example.study.model.entity.OrderGroup;
import com.example.study.model.entity.User;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserOrderInfoApiResponse {
private UserApiResponse userApiResponse;
}
OrderGroupApiLogicService.java
package com.example.study.service;
import com.example.study.ifs.CrudInterface;
import com.example.study.model.entity.OrderGroup;
import com.example.study.model.network.Header;
import com.example.study.model.network.request.OrderGroupApiRequest;
import com.example.study.model.network.response.OrderGroupApiResponse;
import com.example.study.repository.OrderGroupRepository;
import com.example.study.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Optional;
@Service
public class OrderGroupApiLogicService extends BaseService<OrderGroupApiRequest, OrderGroupApiResponse,OrderGroup> {
@Autowired
private UserRepository userRepository;
@Override
public Header<OrderGroupApiResponse> create(Header<OrderGroupApiRequest> request) {
return Optional.ofNullable(request.getData())
.map(body ->{
OrderGroup orderGroup = OrderGroup.builder()
.status(body.getStatus())
.orderType(body.getOrderType())
.revAddress(body.getRevAddress())
.revName(body.getRevName())
.paymentType(body.getPaymentType())
.totalPrice(body.getTotalPrice())
.totalQuantity(body.getTotalQuantity())
.orderAt(LocalDateTime.now())
.user(userRepository.getOne(body.getUserId()))
.build();
return orderGroup;
})
.map(newOrderGroup -> baseRepository.save(newOrderGroup))
.map(newOrderGroup -> response(newOrderGroup))
.orElseGet(()->Header.ERROR("데이터 없음"));
}
@Override
public Header<OrderGroupApiResponse> read(Long id) {
return baseRepository.findById(id)
.map(this::response)
.orElseGet(()->Header.ERROR("데이터 없음"));
}
@Override
public Header<OrderGroupApiResponse> update(Header<OrderGroupApiRequest> request) {
return Optional.ofNullable(request.getData())
.map(body ->{
return baseRepository.findById(body.getId())
.map(orderGroup -> {
orderGroup
.setStatus(body.getStatus())
.setOrderType(body.getOrderType())
.setRevAddress(body.getRevAddress())
.setRevName(body.getRevName())
.setPaymentType(body.getPaymentType())
.setTotalPrice(body.getTotalPrice())
.setTotalQuantity(body.getTotalQuantity())
.setOrderAt(body.getOrderAt())
.setArrivalDate(body.getArrivalDate())
.setUser(userRepository.getOne(body.getUserId()))
;
return orderGroup;
})
.map(changeOrderGroup -> baseRepository.save(changeOrderGroup))
.map(this::response)
.orElseGet(()->Header.ERROR("데이터 없음"));
})
.orElseGet(()->Header.ERROR("데이터 없음"));
}
@Override
public Header delete(Long id) {
return baseRepository.findById(id)
.map(orderGroup -> {
baseRepository.delete(orderGroup);
return Header.OK();
})
.orElseGet(()->Header.ERROR("데이터 없음"));
}
public Header<OrderGroupApiResponse> response(OrderGroup orderGroup){
OrderGroupApiResponse body = OrderGroupApiResponse.builder()
.id(orderGroup.getId())
.status(orderGroup.getStatus())
.orderType(orderGroup.getOrderType())
.revAddress(orderGroup.getRevAddress())
.revName(orderGroup.getRevName())
.paymentType(orderGroup.getPaymentType())
.totalPrice(orderGroup.getTotalPrice())
.totalQuantity(orderGroup.getTotalQuantity())
.orderAt(orderGroup.getOrderAt())
.arrivalDate(orderGroup.getArrivalDate())
.userId(orderGroup.getUser().getId())
.build();
return Header.OK(body);
}
}
사용자 및 상품 API CRUD와 동일한 방식입니다.
'Spring > Spring Boot (어드민 페이지)' 카테고리의 다른 글
Spring Boot - 추상화 코드 적용 (0) | 2020.01.01 |
---|---|
Spring Boot - JPA Enum 형태의 값 관리 (0) | 2020.01.01 |
Spring Boot - 상품 API CRUD (0) | 2020.01.01 |
Spring Boot - 사용자 API CRUD (0) | 2019.12.26 |
Spring Boot - CRUD 인터페이스 정의와 ResponseBody 공통부 작성 (0) | 2019.12.23 |
Comments