From 82d6a3439a7f378fdeb74d16e4c2185d874682f3 Mon Sep 17 00:00:00 2001 From: arturgso Date: Thu, 26 Feb 2026 18:13:58 -0300 Subject: [PATCH] feat: Implement order items entity and database migration - Introduce OrderItems entity with persistence capabilities. - Establish a one-to-many relationship between Orders and OrderItems. - Update Orders entity to reflect the relationship change. - Create a Flyway migration script to create the order_items table and drop the jsonb items column from the orders table. --- .../vegamarket/orderservice/dtos/OrderItems.java | 13 +++++++++++++ .../com/vegamarket/orderservice/model/Orders.java | 7 +++++-- .../migration/V2__CREATE-ORDERS-ITEMS-TABLE.sql | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/db/migration/V2__CREATE-ORDERS-ITEMS-TABLE.sql diff --git a/src/main/java/com/vegamarket/orderservice/dtos/OrderItems.java b/src/main/java/com/vegamarket/orderservice/dtos/OrderItems.java index 8db3b40..50d2689 100644 --- a/src/main/java/com/vegamarket/orderservice/dtos/OrderItems.java +++ b/src/main/java/com/vegamarket/orderservice/dtos/OrderItems.java @@ -1,9 +1,13 @@ package com.vegamarket.orderservice.dtos; +import com.vegamarket.orderservice.model.Orders; +import jakarta.persistence.*; import lombok.*; import java.math.BigDecimal; +@Entity +@Table(name = "order_items") @Getter @Setter @AllArgsConstructor @@ -11,6 +15,15 @@ import java.math.BigDecimal; @Builder public class OrderItems { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long orderItemId; + private Long productId; + private Long quantity; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "order_id", nullable = false) + private Orders order; private String name; private BigDecimal price; } diff --git a/src/main/java/com/vegamarket/orderservice/model/Orders.java b/src/main/java/com/vegamarket/orderservice/model/Orders.java index 414a55b..0b07562 100644 --- a/src/main/java/com/vegamarket/orderservice/model/Orders.java +++ b/src/main/java/com/vegamarket/orderservice/model/Orders.java @@ -34,8 +34,11 @@ public class Orders { private BigDecimal totalAmount; private String traceId; - @Column(columnDefinition = "jsonb", nullable = false) - @JdbcTypeCode(SqlTypes.JSON) + @OneToMany( + mappedBy = "order", + cascade = CascadeType.ALL, + orphanRemoval = true + ) private List items; @CreationTimestamp diff --git a/src/main/resources/db/migration/V2__CREATE-ORDERS-ITEMS-TABLE.sql b/src/main/resources/db/migration/V2__CREATE-ORDERS-ITEMS-TABLE.sql new file mode 100644 index 0000000..5153366 --- /dev/null +++ b/src/main/resources/db/migration/V2__CREATE-ORDERS-ITEMS-TABLE.sql @@ -0,0 +1,15 @@ +alter table orders +drop column items; + +create table order_items ( + order_item_id bigint generated always as identity primary key, + productId bigint not null, + quantity int not null, + order_id bigint not null, + name varchar(255) not null, + price numeric(19,2) not null, + constraint fk_order_item_order + foreign key (order_id) + references orders(order_id) + on delete cascade +); \ No newline at end of file