From 5030363fde92ff6e08cacab022586e972498fa69 Mon Sep 17 00:00:00 2001 From: ainhprzz Date: Sat, 17 Jan 2026 23:31:27 +0100 Subject: [PATCH 1/3] feat: new entity created, related with basket and product --- .../eps/softarch/demo/domain/BasketItem.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/cat/udl/eps/softarch/demo/domain/BasketItem.java diff --git a/src/main/java/cat/udl/eps/softarch/demo/domain/BasketItem.java b/src/main/java/cat/udl/eps/softarch/demo/domain/BasketItem.java new file mode 100644 index 0000000..90769bb --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/demo/domain/BasketItem.java @@ -0,0 +1,33 @@ +package cat.udl.eps.softarch.demo.domain; + +import com.fasterxml.jackson.annotation.JsonIdentityReference; +import jakarta.persistence.*; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Entity +@Data +@EqualsAndHashCode(callSuper = true) +public class BasketItem extends UriEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull + @ManyToOne + @JsonIdentityReference(alwaysAsId = true) + private Basket basket; + + @NotNull + @ManyToOne + @JsonIdentityReference(alwaysAsId = true) + private Product product; + + @NotNull + @Min(1) + private Integer quantity = 1; +} + From 53d2686d4649e9aae8e4ac45c4ce009cb931a0e9 Mon Sep 17 00:00:00 2001 From: ainhprzz Date: Sat, 17 Jan 2026 23:33:09 +0100 Subject: [PATCH 2/3] feat: created the handler corresponding to the new created entity --- .../demo/handler/BasketItemEventHandler.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/cat/udl/eps/softarch/demo/handler/BasketItemEventHandler.java diff --git a/src/main/java/cat/udl/eps/softarch/demo/handler/BasketItemEventHandler.java b/src/main/java/cat/udl/eps/softarch/demo/handler/BasketItemEventHandler.java new file mode 100644 index 0000000..08d7694 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/demo/handler/BasketItemEventHandler.java @@ -0,0 +1,32 @@ +package cat.udl.eps.softarch.demo.handler; + +import cat.udl.eps.softarch.demo.domain.BasketItem; +import cat.udl.eps.softarch.demo.repository.BasketRepository; +import org.springframework.data.rest.core.annotation.*; +import org.springframework.stereotype.Component; + +@Component +@RepositoryEventHandler +public class BasketItemEventHandler { + + private final BasketRepository basketRepository; + + public BasketItemEventHandler(BasketRepository basketRepository) { + this.basketRepository = basketRepository; + } + + @HandleBeforeCreate + @HandleBeforeSave + public void handleBasketItemSave(BasketItem item) { + if (item.getBasket() != null) { + basketRepository.save(item.getBasket()); // Updates basket updatedAt + } + } + + @HandleBeforeDelete + public void handleBasketItemDelete(BasketItem item) { + if (item.getBasket() != null) { + basketRepository.save(item.getBasket()); + } + } +} From f0d46c02c2c2d4e2b12211360c262b3cf3bc53cf Mon Sep 17 00:00:00 2001 From: ainhprzz Date: Sat, 17 Jan 2026 23:33:57 +0100 Subject: [PATCH 3/3] fix: basket entity modified, in order to connected with basketList --- .DS_Store | Bin 0 -> 6148 bytes src/.DS_Store | Bin 0 -> 6148 bytes .../udl/eps/softarch/demo/domain/Basket.java | 8 +++++++- .../demo/repository/BasketItemRepository.java | 16 ++++++++++++++++ src/test/.DS_Store | Bin 0 -> 6148 bytes src/test/resources/.DS_Store | Bin 0 -> 6148 bytes 6 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .DS_Store create mode 100644 src/.DS_Store create mode 100644 src/main/java/cat/udl/eps/softarch/demo/repository/BasketItemRepository.java create mode 100644 src/test/.DS_Store create mode 100644 src/test/resources/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..89ef737d1a22cda1fea8e64a578cda816e5d0a34 GIT binary patch literal 6148 zcmeHKPm9w)9Q{pOx9KiI4+?t`0$xjPm!gQ5Znp&&R*{Y9L8T^bcMY3nN|Rcp6mr(@ z;8*bKC-J*@()XL0m2I+KwaENn=FOk?(wUdeOooU=Z!vBY)rrVKVyx^UyC%4wQz1&G zg>^zbV?uK}qmUw+6xg=GI$#~xHV1g^?oyv5jpzca_V@Zdj^rqaWPpC&91fA1KUJW_ z8^Re@`A2F}3hk7l9RF*MU!})1pc8rq#gxXIY;mW+KA~eeg5oK8G{~_(7uYj3h9-R| zjzs*(v1@dS=N@9tPk`5qrgWZDlqrEPqs>t$N4{Kf#IS;8GBdt?3uaN6q^;I>Q7Tt% z>{Okqv**0=-pQqx`spI+`SVv?doE=ZT$cUdML1aw>$i?%ocdurnJYm!o`CZDWf+g; zvL_euI8jzZ@>?!8B+!;5Gd%TJge zLSWBUans->u)k(D@4a~($(S8s_72{*4=>K~Pf2rr@EgDC2dXx<+5z+aoxQCdr5&7g zz&h|R9N_)IMPlq4%rvU41DU!404r!#fiizCu*NmmHJE8c4?<`uP)mimVhAlqyK8t| zgPBGxCt)rh!u+x@Hx!|M9nW_aokUlo&8-90flUX>x?1P+fAHt~|E9>+tOM48|H=VT z>3jVirex06!sPg@b&=j8aWF5_s3geDajXh_6z?OcK%dJ6VAo)#5iJP&A)suqnRVc= GI`9i81FV$* literal 0 HcmV?d00001 diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fb931e872519025a90462c37a9c836720bf0dfe6 GIT binary patch literal 6148 zcmeHK!AiqG5S^`2Q$)x?!DGN{(WVqdyu_*puSWEsQWIM=7_-u(=1>Yb>&JNYOZ*+3 z+1(b}>b0oM!0g+do!Mkx!p;r=h*rPj0XP6)qY_rC*nA^2PdXzNW3dngt#Ojb+bEF{ zj%h)b-_HPjI}08mgc#DP?{|Q6Tc1kQMl8so3mN27es4edMMd^x{)hMIDT%YZUjGo4 z1#59>*TwTOz zM;0yFPdk~44fKRvwX1DsV=(Z%M$Pq_yTh70*lW~lZgZzO99Hf1&F%fu_CxZR$``dW z5cvNpSv5FYE(xDHmU?bq-&%S?5nFkqDuxu-(aZ`Ehs{VBI;0KN(^Bt2cg4p-Z%cGMjZ}9 zJsH { @JsonIdentityReference(alwaysAsId = true) private Customer customer; + @OneToMany(mappedBy = "basket", cascade = CascadeType.ALL, orphanRemoval = true) + private List items = new ArrayList<>(); + @Column(nullable = false, updatable = false) private ZonedDateTime createdAt; @@ -39,4 +44,5 @@ protected void onCreate() { protected void onUpdate() { this.updatedAt = ZonedDateTime.now(); } -} \ No newline at end of file +} + diff --git a/src/main/java/cat/udl/eps/softarch/demo/repository/BasketItemRepository.java b/src/main/java/cat/udl/eps/softarch/demo/repository/BasketItemRepository.java new file mode 100644 index 0000000..056fb9e --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/demo/repository/BasketItemRepository.java @@ -0,0 +1,16 @@ +package cat.udl.eps.softarch.demo.repository; + +import cat.udl.eps.softarch.demo.domain.Basket; +import cat.udl.eps.softarch.demo.domain.BasketItem; +import cat.udl.eps.softarch.demo.domain.Product; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; + +import java.util.List; +import java.util.Optional; + +public interface BasketItemRepository extends CrudRepository, PagingAndSortingRepository { + + List findByBasket(Basket basket); + Optional findByBasketAndProduct(Basket basket, Product product); +} diff --git a/src/test/.DS_Store b/src/test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..922f7e120c8d9f02eee9eb8bb859d19986312fd5 GIT binary patch literal 6148 zcmeHKOH0E*5T0$TO(;SS3OxqA7HvyW#7nI8;MIs8RBF-|jmE4reH=<5XZU?Bm;Hzl7Z#01%BqrwUL601KTkV`H(zsGoenGNvVmC}@t;NVbDW z23V&F*;Zcx`gS>Z03U|n&walm?A!TNrWRsD54wD?Oe(zn8to^5q3wd;^wi8`+gXAdx{Wt zx;W(eGK@QN)R2R?lPIpIJ1pC>TgB3NT&>p1PPM*2DLdnXTBYpN_v(|0ZEbDu9-g%x zqo-KDsMUhNe_Gjw!703AutbZY*NY<=-(l~RIb|@i0;~Wluv!Y3UCJt~)@$+GumY^W z3MfGPgM&`!8ca2+tpf{{0wB^gQW?hT>W}D91EOm%)rc)P(>LAV;ZWCd7(Sp~AXTBP&;Yx15FMw1I;xOz0IA$8aSbJ@A`s%TgmUPWMQ{KVc1a2g+jX?NA%`f^p5e!E z?Jw!yDQ|2CrAoQd3e8C4Hy+Q}*=NTeM5IRZ$$+R!L>kK2>Y%tnxSe%NTEWu>D%Z!H zN}5u2oZC-Z(c-v?4Dj4(I>D?ZRMW=%rMXSf#tY*)^x(n?tSjQvMKufYXXz}@s=D7l zSFN4)t=qeLSMTW$@fW*@>!hAnqojPtwb$0>>Do@xH`#PC?%sW2i#o}QY3UNO$rK^) z-)6J<8S$C zVSl(^P73SP$(?{}_z7c+hwpJ&2yik-I9sL^@ zPAc*!r7$22TxMX$SG#=vzx@0A|8kPlgaKjTzhXeOkK&^dJ}I27TOY?~t$}`ovT$7E l@lOg2cN8O*kK%o(6Zj1qz$jqj5gv$K1RM=g2m}9=f#1S9Zdw2U literal 0 HcmV?d00001