From 2e1c4e4b702bcb95976bdff3d77a15ea4068fcfe Mon Sep 17 00:00:00 2001 From: esmailian Date: Tue, 29 Apr 2025 17:08:22 +0330 Subject: [PATCH] add order service and view for list liquibase view not add --- .../testapp/command/CreateOrderCommand.java | 1 + .../testapp/command/OrderCommandHandler.java | 22 ++++++----- .../testapp/controller/OrderController.java | 38 +++++++++++++++++++ .../mmad/testapp/entity/OrderEntity.java | 4 +- .../mmad/testapp/entity/OrderQueryEntity.java | 25 ++++++++++++ .../mmad/testapp/entity/PersonEntity.java | 2 +- .../mmad/testapp/entity/view/ViewOrder.java | 24 ++++++++++++ .../mmad/testapp/event/OrderCreatedEvent.java | 9 ++++- .../mmad/testapp/query/UserQueryHandler.java | 12 ++++++ ...pository.java => OrderReadRepository.java} | 3 +- ...erRepository.java => OrderRepository.java} | 2 +- .../repository/ViewOrderRepository.java | 10 +++++ .../testapp/service/ViewOrderService.java | 25 ++++++++++++ .../oracleLiquibases/liquibase-1.2.xml | 8 ++++ 14 files changed, 170 insertions(+), 15 deletions(-) create mode 100755 src/main/java/com/example/mmad/testapp/controller/OrderController.java create mode 100755 src/main/java/com/example/mmad/testapp/entity/OrderQueryEntity.java create mode 100755 src/main/java/com/example/mmad/testapp/entity/view/ViewOrder.java rename src/main/java/com/example/mmad/testapp/repository/{UserReadRepository.java => OrderReadRepository.java} (61%) rename src/main/java/com/example/mmad/testapp/repository/{UserRepository.java => OrderRepository.java} (74%) create mode 100644 src/main/java/com/example/mmad/testapp/repository/ViewOrderRepository.java create mode 100755 src/main/java/com/example/mmad/testapp/service/ViewOrderService.java diff --git a/src/main/java/com/example/mmad/testapp/command/CreateOrderCommand.java b/src/main/java/com/example/mmad/testapp/command/CreateOrderCommand.java index 0ebacf5..662ae47 100644 --- a/src/main/java/com/example/mmad/testapp/command/CreateOrderCommand.java +++ b/src/main/java/com/example/mmad/testapp/command/CreateOrderCommand.java @@ -10,4 +10,5 @@ public class CreateOrderCommand { private Long orderId; private String orderName; private String description; + private Long userId; } diff --git a/src/main/java/com/example/mmad/testapp/command/OrderCommandHandler.java b/src/main/java/com/example/mmad/testapp/command/OrderCommandHandler.java index cefa400..c528795 100644 --- a/src/main/java/com/example/mmad/testapp/command/OrderCommandHandler.java +++ b/src/main/java/com/example/mmad/testapp/command/OrderCommandHandler.java @@ -2,7 +2,7 @@ package com.example.mmad.testapp.command; import com.example.mmad.testapp.entity.OrderEntity; import com.example.mmad.testapp.event.OrderCreatedEvent; -import com.example.mmad.testapp.repository.UserRepository; +import com.example.mmad.testapp.repository.OrderRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; @@ -11,22 +11,24 @@ import org.springframework.stereotype.Service; public class OrderCommandHandler { @Autowired private ApplicationEventPublisher applicationEventPublisher; - private final UserRepository userRepository; + private final OrderRepository orderRepository; - public OrderCommandHandler(UserRepository userRepository) { - this.userRepository = userRepository; + public OrderCommandHandler(OrderRepository orderRepository) { + this.orderRepository = orderRepository; } - public void createUser(CreateOrderCommand createUserCommand) { + public void createUser(CreateOrderCommand createOrderCommand) { OrderEntity orderEntity = new OrderEntity(); - orderEntity.setId(createUserCommand.getOrderId()); - orderEntity.setOrderName(createUserCommand.getOrderName()); - orderEntity.setDescription(createUserCommand.getDescription()); -// userRepository.save(orderEntity); + orderEntity.setId(createOrderCommand.getOrderId()); + orderEntity.setOrderName(createOrderCommand.getOrderName()); + orderEntity.setDescription(createOrderCommand.getDescription()); + orderEntity.setUserId(createOrderCommand.getUserId()); + orderRepository.save(orderEntity); OrderCreatedEvent event = new OrderCreatedEvent( orderEntity.getId(), orderEntity.getOrderName(), - orderEntity.getDescription() + orderEntity.getDescription(), + orderEntity.getUserId() ); applicationEventPublisher.publishEvent(event); } diff --git a/src/main/java/com/example/mmad/testapp/controller/OrderController.java b/src/main/java/com/example/mmad/testapp/controller/OrderController.java new file mode 100755 index 0000000..e573419 --- /dev/null +++ b/src/main/java/com/example/mmad/testapp/controller/OrderController.java @@ -0,0 +1,38 @@ +package com.example.mmad.testapp.controller; + +import com.example.mmad.testapp.command.CreateOrderCommand; +import com.example.mmad.testapp.command.OrderCommandHandler; +import com.example.mmad.testapp.entity.view.ViewOrder; +import com.example.mmad.testapp.service.ViewOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +@RestController +@RequestMapping("/order") +public class OrderController { + + private OrderCommandHandler orderCommandHandler; + private ViewOrderService viewOrderService; + + @Autowired + public void setPersonService(OrderCommandHandler orderCommandHandler, ViewOrderService viewOrderService) { + this.orderCommandHandler = orderCommandHandler; + this.viewOrderService = viewOrderService; + } + + @PostMapping("/list") + public ResponseEntity> list() { + return ResponseEntity.ok(viewOrderService.listInfo()); + } + + @CrossOrigin(origins = "http://localhost:3001") + @PostMapping("/create") + public ResponseEntity create(@Valid @RequestBody CreateOrderCommand orderCommand) { + orderCommandHandler.createUser(orderCommand); + return ResponseEntity.ok(200); + } +} diff --git a/src/main/java/com/example/mmad/testapp/entity/OrderEntity.java b/src/main/java/com/example/mmad/testapp/entity/OrderEntity.java index c6aefc4..e28859e 100755 --- a/src/main/java/com/example/mmad/testapp/entity/OrderEntity.java +++ b/src/main/java/com/example/mmad/testapp/entity/OrderEntity.java @@ -8,7 +8,7 @@ import static jakarta.persistence.GenerationType.SEQUENCE; @Entity @Getter @Setter -@Table(schema = "testapp", name = "order") +@Table(schema = "TEST2", name = "order") @Builder @AllArgsConstructor @NoArgsConstructor @@ -22,4 +22,6 @@ public class OrderEntity { private String orderName; @Column(name = "description") private String description; + @Column(name="user_id") + private Long userId; } diff --git a/src/main/java/com/example/mmad/testapp/entity/OrderQueryEntity.java b/src/main/java/com/example/mmad/testapp/entity/OrderQueryEntity.java new file mode 100755 index 0000000..e408d54 --- /dev/null +++ b/src/main/java/com/example/mmad/testapp/entity/OrderQueryEntity.java @@ -0,0 +1,25 @@ +package com.example.mmad.testapp.entity; + +import jakarta.persistence.*; +import lombok.*; + +import static jakarta.persistence.GenerationType.SEQUENCE; + +@Entity +@Getter +@Setter +@Table(schema = "TEST2", name = "ORDER_QUERY") +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class OrderQueryEntity { + + @Id + private Long id; + @Column(name = "order_name") + private String orderName; + @Column(name = "description") + private String description; + @Column(name = "user_id") + private Long userId; +} diff --git a/src/main/java/com/example/mmad/testapp/entity/PersonEntity.java b/src/main/java/com/example/mmad/testapp/entity/PersonEntity.java index eb8df66..02ab1fb 100755 --- a/src/main/java/com/example/mmad/testapp/entity/PersonEntity.java +++ b/src/main/java/com/example/mmad/testapp/entity/PersonEntity.java @@ -8,7 +8,7 @@ import static jakarta.persistence.GenerationType.SEQUENCE; @Entity @Getter @Setter -@Table(schema = "testapp", name = "person") +@Table(schema = "TEST2", name = "person") @Builder @AllArgsConstructor @NoArgsConstructor diff --git a/src/main/java/com/example/mmad/testapp/entity/view/ViewOrder.java b/src/main/java/com/example/mmad/testapp/entity/view/ViewOrder.java new file mode 100755 index 0000000..a25da07 --- /dev/null +++ b/src/main/java/com/example/mmad/testapp/entity/view/ViewOrder.java @@ -0,0 +1,24 @@ +package com.example.mmad.testapp.entity.view; + +import jakarta.persistence.*; +import lombok.*; +import org.hibernate.annotations.Immutable; + +import static jakarta.persistence.GenerationType.SEQUENCE; + +@Entity +@Getter +@Setter +@Table(schema = "TEST2", name = "order_view") +@Immutable +public class ViewOrder { + + @Id + private Long id; + @Column(name = "order_name") + private String orderName; + @Column(name = "description") + private String description; + @Column(name="user_id") + private Long userId; +} diff --git a/src/main/java/com/example/mmad/testapp/event/OrderCreatedEvent.java b/src/main/java/com/example/mmad/testapp/event/OrderCreatedEvent.java index f768cef..5de2630 100644 --- a/src/main/java/com/example/mmad/testapp/event/OrderCreatedEvent.java +++ b/src/main/java/com/example/mmad/testapp/event/OrderCreatedEvent.java @@ -4,11 +4,14 @@ public class OrderCreatedEvent { private final Long orderId; private final String orderName; private final String description; + private final Long userId; - public OrderCreatedEvent(Long orderId, String orderName, String description) { + //todo change to annotation getter setter + public OrderCreatedEvent(Long orderId, String orderName, String description, Long userId) { this.orderId = orderId; this.orderName = orderName; this.description = description; + this.userId = userId; } public Long getOrderId() { @@ -22,4 +25,8 @@ public class OrderCreatedEvent { public String getDescription() { return description; } + + public Long getUserId() { + return userId; + } } diff --git a/src/main/java/com/example/mmad/testapp/query/UserQueryHandler.java b/src/main/java/com/example/mmad/testapp/query/UserQueryHandler.java index 6127533..82f35af 100644 --- a/src/main/java/com/example/mmad/testapp/query/UserQueryHandler.java +++ b/src/main/java/com/example/mmad/testapp/query/UserQueryHandler.java @@ -1,15 +1,27 @@ package com.example.mmad.testapp.query; +import com.example.mmad.testapp.entity.OrderQueryEntity; import com.example.mmad.testapp.event.OrderCreatedEvent; +import com.example.mmad.testapp.repository.OrderReadRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @Component public class UserQueryHandler { + @Autowired + private OrderReadRepository orderReadRepository; + @Async("taskExecutor") @EventListener public void handelUserCreated(OrderCreatedEvent event) { + OrderQueryEntity orderQueryEntity = new OrderQueryEntity(); + orderQueryEntity.setId(event.getOrderId()); + orderQueryEntity.setOrderName(event.getOrderName()); + orderQueryEntity.setDescription(event.getDescription()); + orderQueryEntity.setUserId(event.getUserId()); + orderReadRepository.save(orderQueryEntity); System.out.println("Received user created event" + event.getOrderId()); } } diff --git a/src/main/java/com/example/mmad/testapp/repository/UserReadRepository.java b/src/main/java/com/example/mmad/testapp/repository/OrderReadRepository.java similarity index 61% rename from src/main/java/com/example/mmad/testapp/repository/UserReadRepository.java rename to src/main/java/com/example/mmad/testapp/repository/OrderReadRepository.java index 89bf1fb..608627b 100755 --- a/src/main/java/com/example/mmad/testapp/repository/UserReadRepository.java +++ b/src/main/java/com/example/mmad/testapp/repository/OrderReadRepository.java @@ -1,9 +1,10 @@ package com.example.mmad.testapp.repository; +import com.example.mmad.testapp.entity.OrderQueryEntity; import com.example.mmad.testapp.entity.PersonEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface UserReadRepository extends JpaRepository { +public interface OrderReadRepository extends JpaRepository { } diff --git a/src/main/java/com/example/mmad/testapp/repository/UserRepository.java b/src/main/java/com/example/mmad/testapp/repository/OrderRepository.java similarity index 74% rename from src/main/java/com/example/mmad/testapp/repository/UserRepository.java rename to src/main/java/com/example/mmad/testapp/repository/OrderRepository.java index e0a23ae..5ec7028 100755 --- a/src/main/java/com/example/mmad/testapp/repository/UserRepository.java +++ b/src/main/java/com/example/mmad/testapp/repository/OrderRepository.java @@ -5,6 +5,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface UserRepository extends JpaRepository { +public interface OrderRepository extends JpaRepository { } diff --git a/src/main/java/com/example/mmad/testapp/repository/ViewOrderRepository.java b/src/main/java/com/example/mmad/testapp/repository/ViewOrderRepository.java new file mode 100644 index 0000000..10b8355 --- /dev/null +++ b/src/main/java/com/example/mmad/testapp/repository/ViewOrderRepository.java @@ -0,0 +1,10 @@ +package com.example.mmad.testapp.repository; + +import com.example.mmad.testapp.entity.view.ViewOrder; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ViewOrderRepository extends JpaRepository { + List findAll(); +} diff --git a/src/main/java/com/example/mmad/testapp/service/ViewOrderService.java b/src/main/java/com/example/mmad/testapp/service/ViewOrderService.java new file mode 100755 index 0000000..ae9f853 --- /dev/null +++ b/src/main/java/com/example/mmad/testapp/service/ViewOrderService.java @@ -0,0 +1,25 @@ +package com.example.mmad.testapp.service; + +import com.example.mmad.testapp.entity.view.ViewOrder; +import com.example.mmad.testapp.repository.ViewOrderRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class ViewOrderService { + + private final ViewOrderRepository viewOrderRepository; + + public ViewOrderService(ViewOrderRepository viewOrderRepository) { + this.viewOrderRepository = viewOrderRepository; + } + + + @Transactional(readOnly = true) + public List listInfo() { + return viewOrderRepository.findAll(); + } + +} diff --git a/src/main/resources/db/changelog/changes/oracleLiquibases/liquibase-1.2.xml b/src/main/resources/db/changelog/changes/oracleLiquibases/liquibase-1.2.xml index 0dde05b..00fd6c5 100755 --- a/src/main/resources/db/changelog/changes/oracleLiquibases/liquibase-1.2.xml +++ b/src/main/resources/db/changelog/changes/oracleLiquibases/liquibase-1.2.xml @@ -27,4 +27,12 @@ + + + + + + + + \ No newline at end of file