본문 바로가기

프로젝트_ 커피주문 서비스

OrderDate 삽입

  • JPA Auditing을 활용하여 Order엔티티의 orderDate에 시간값 삽입

 

  • BaseTimeEntity 수정
@MappedSuperclass // JPA Entity 클래스들이 상속받을 경우 필드도 컬럼으로 인식
@EntityListeners(AuditingEntityListener.class) //Auditing 기능 추가
@Getter //Getter 추가, 롬복
public class BaseTimeEntity {

    @CreatedDate //생성 시간
    private LocalDateTime orderDate;

}

 

 

  • Entity/Order
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Entity
@Table(name = "Orders")
public class Order extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "member_id")
    private Member member;

    @CreatedDate
    @Column
    private LocalDateTime orderDate;

    public static Order createOrder(OrderDto dto, Member member) {
        if (dto.getId() != null) {
            throw new IllegalArgumentException("생성 실패, 주문에는 ID가 없어야 함.");
        } if (dto.getMemberId() != member.getId()) {
            throw new IllegalArgumentException("생성 실패, 회원의 ID가 다름");
        }
        return new Order(
                dto.getId(),
                member,
                dto.getOrderDate()
        );
    }
}

 

 

  • Repository/OrderRepository
public interface OrderRepository extends JpaRepository<Order, Long> {
}

 

 

  • DTO/OrderDto
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class OrderDto {
    private Long id;

    @JsonProperty("member_id")
    private Long memberId;

    private LocalDateTime orderDate;

    public static OrderDto createOrderDto(Order order) {
        return new OrderDto(
                order.getId(),
                order.getMember().getId(),
                order.getOrderDate()
        );
    }
}

 

 

  • OrderAPIController _ orderDate 확인을 위해 POST 요청만 구현
@RestController
public class OrderAPIController {

    @Autowired
    private OrderService orderService;

    @PostMapping("/api/members/{memberId}/orders")
    public ResponseEntity<OrderDto> create(@PathVariable Long memberId, @RequestBody OrderDto dto) {
        OrderDto createdDto = orderService.create(memberId, dto);

        return ResponseEntity.status(HttpStatus.OK).body(createdDto);
    }
}

 

 

  • OrderService _ orderDate 확인을 위해 CREATE 만 구현
@Slf4j
@Service
public class OrderService {

    @Autowired
    private OrderRepository orderRepository;

    @Autowired
    private MemberRepository memberRepository;

    @Transactional
    public OrderDto create(Long memberId, OrderDto dto) {
        Member member = memberRepository.findById(memberId)
                .orElseThrow(() -> new IllegalArgumentException("생성 실패, 대상 회원이 없음"));

        Order order = Order.createOrder(dto, member);

        Order created = orderRepository.save(order);

        return OrderDto.createOrderDto(created);
    }
}

 

 

  • data.sql _ 더미데이터 추가
--order 더미데이터
INSERT INTO orders(id, member_id, order_date) VALUES (1, 1, current_timestamp);
INSERT INTO orders(id, member_id, order_date) VALUES (2, 2, current_timestamp);
INSERT INTO orders(id, member_id, order_date) VALUES (3, 3, current_timestamp);

 

 

 

  • TalendAPI 확인

POST 요청
요청 성공 후 반환값
DB에 더미데이터와 POST 요청으로 보낸 데이터 확인

 

 

 

 

GitHub - Pearlmoon997/CoffeeShop: CoffeeShop

CoffeeShop. Contribute to Pearlmoon997/CoffeeShop development by creating an account on GitHub.

github.com