diff --git a/.gradle/8.5/checksums/checksums.lock b/.gradle/8.5/checksums/checksums.lock index caf3907..0b07023 100644 Binary files a/.gradle/8.5/checksums/checksums.lock and b/.gradle/8.5/checksums/checksums.lock differ diff --git a/.gradle/8.5/checksums/md5-checksums.bin b/.gradle/8.5/checksums/md5-checksums.bin index e6ac688..3f9b148 100644 Binary files a/.gradle/8.5/checksums/md5-checksums.bin and b/.gradle/8.5/checksums/md5-checksums.bin differ diff --git a/.gradle/8.5/checksums/sha1-checksums.bin b/.gradle/8.5/checksums/sha1-checksums.bin index ae015d6..ed3bf4a 100644 Binary files a/.gradle/8.5/checksums/sha1-checksums.bin and b/.gradle/8.5/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.5/executionHistory/executionHistory.bin b/.gradle/8.5/executionHistory/executionHistory.bin index d59e707..9d22fa2 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.bin and b/.gradle/8.5/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.5/executionHistory/executionHistory.lock b/.gradle/8.5/executionHistory/executionHistory.lock index 4395df6..f13c8b9 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.lock and b/.gradle/8.5/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.5/fileHashes/fileHashes.bin b/.gradle/8.5/fileHashes/fileHashes.bin index 34397a4..16b6b5a 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.bin and b/.gradle/8.5/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.5/fileHashes/fileHashes.lock b/.gradle/8.5/fileHashes/fileHashes.lock index 4c3ec78..a6f5507 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.lock and b/.gradle/8.5/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.5/fileHashes/resourceHashesCache.bin b/.gradle/8.5/fileHashes/resourceHashesCache.bin index 1f1a381..10d8e74 100644 Binary files a/.gradle/8.5/fileHashes/resourceHashesCache.bin and b/.gradle/8.5/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 9386d8d..bba6b29 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 828e72a..e258deb 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/build.gradle b/build.gradle index b7867b9..bfcfe2d 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,9 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0' implementation 'org.modelmapper:modelmapper:3.2.0' + implementation 'javax.persistence:javax.persistence-api:2.2' + implementation 'javax.persistence:javax.persistence-api:2.2' + testImplementation 'org.springframework.boot:spring-boot-starter-test' } diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/DemoApplication.class.uniqueId5 b/build/tmp/compileJava/compileTransaction/stash-dir/DemoApplication.class.uniqueId5 deleted file mode 100644 index ff4eabd..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/DemoApplication.class.uniqueId5 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/OrderController.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/OrderController.class.uniqueId0 new file mode 100644 index 0000000..4cd2b3b Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/OrderController.class.uniqueId0 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/OrderDto.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/OrderDto.class.uniqueId1 new file mode 100644 index 0000000..110d136 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/OrderDto.class.uniqueId1 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineController.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineController.class.uniqueId3 deleted file mode 100644 index 2c88e57..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineController.class.uniqueId3 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineEntity.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineEntity.class.uniqueId0 deleted file mode 100644 index 2f4bfba..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineEntity.class.uniqueId0 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineRepository.class.uniqueId8 b/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineRepository.class.uniqueId8 deleted file mode 100644 index 6030791..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineRepository.class.uniqueId8 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineService.class.uniqueId9 b/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineService.class.uniqueId9 deleted file mode 100644 index 8ccd40b..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/OrderLineService.class.uniqueId9 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProductController.class.uniqueId7 b/build/tmp/compileJava/compileTransaction/stash-dir/ProductController.class.uniqueId7 deleted file mode 100644 index e6c3f9a..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ProductController.class.uniqueId7 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProductDto.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/ProductDto.class.uniqueId2 deleted file mode 100644 index d192c3b..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ProductDto.class.uniqueId2 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProductEntity.class.uniqueId6 b/build/tmp/compileJava/compileTransaction/stash-dir/ProductEntity.class.uniqueId6 deleted file mode 100644 index c0e5faa..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ProductEntity.class.uniqueId6 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProductRepository.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/ProductRepository.class.uniqueId1 deleted file mode 100644 index 7f8127d..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ProductRepository.class.uniqueId1 and /dev/null differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ProductService.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/ProductService.class.uniqueId4 deleted file mode 100644 index cf1c50c..0000000 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ProductService.class.uniqueId4 and /dev/null differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 7f22257..c15f385 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin index a5646ec..b60f3f0 100644 Binary files a/build/tmp/compileTestJava/previous-compilation-data.bin and b/build/tmp/compileTestJava/previous-compilation-data.bin differ diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java index c4afea8..679ea30 100644 --- a/src/main/java/com/example/demo/DemoApplication.java +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -1,5 +1,7 @@ package com.example.demo; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import org.slf4j.Logger; @@ -8,6 +10,7 @@ import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import com.example.demo.order_lines.model.OrderLineEntity; import com.example.demo.orders.model.OrderEntity; import com.example.demo.orders.service.OrderService; import com.example.demo.products.model.ProductEntity; @@ -61,8 +64,11 @@ public class DemoApplication implements CommandLineRunner { userService.create(new UserEntity(null, "Oleg", "Zyngin", "@mail.ru", "password")); log.info("Create default orders values"); + @SuppressWarnings({ "rawtypes", "unchecked" }) + List lines = new ArrayList(); + lines.add(new OrderLineEntity(null, null, 3, null)); final var user1 = userService.create(new UserEntity(null, "Alex", "Kryukov", "akryu@mail.ru", "password")); - orderService.create(new OrderEntity(null, user1, "31-03-2024")); + orderService.create(new OrderEntity(null, user1, lines)); } } } diff --git a/src/main/java/com/example/demo/order_lines/api/OrderLineController.java b/src/main/java/com/example/demo/order_lines/api/OrderLineController.java index 49c7c2f..25c8c6a 100644 --- a/src/main/java/com/example/demo/order_lines/api/OrderLineController.java +++ b/src/main/java/com/example/demo/order_lines/api/OrderLineController.java @@ -15,8 +15,6 @@ import org.springframework.web.bind.annotation.RestController; import com.example.demo.core.configuration.Constants; import com.example.demo.order_lines.model.OrderLineEntity; import com.example.demo.order_lines.service.OrderLineService; -import com.example.demo.orders.model.OrderEntity; -import com.example.demo.orders.service.OrderService; import com.example.demo.products.model.ProductEntity; import com.example.demo.products.service.ProductService; @@ -25,14 +23,12 @@ import jakarta.validation.Valid; @RestController @RequestMapping(Constants.API_URL + "/orderLine") public class OrderLineController { - private final OrderService orderService; private final OrderLineService orderLineService; private final ProductService productService; private final ModelMapper modelMapper; - public OrderLineController(OrderLineService orderLineService, OrderService orderService, + public OrderLineController(OrderLineService orderLineService, ProductService productService, ModelMapper modelMapper) { - this.orderService = orderService; this.orderLineService = orderLineService; this.productService = productService; this.modelMapper = modelMapper; @@ -44,15 +40,12 @@ public class OrderLineController { private OrderLineEntity toEntity(OrderLineDto dto) { // Получаем заказ и товар из соответствующих сервисов по их идентификаторам из - // OrderLineDto - OrderEntity order = orderService.get(dto.getOrderId()); ProductEntity product = productService.get(dto.getProductId()); // Создаем новый экземпляр OrderLineEntity с помощью модельного маппера OrderLineEntity entity = modelMapper.map(dto, OrderLineEntity.class); // Устанавливаем полученные заказ и товар в OrderLineEntity - entity.setOrder(order); entity.setProduct(product); return entity; @@ -70,7 +63,26 @@ public class OrderLineController { @PostMapping public OrderLineDto create(@RequestBody @Valid OrderLineDto dto) { - return toDto(orderLineService.create(toEntity(dto))); + // Получаем информацию о продукте по его ID + ProductEntity product = productService.get(dto.getProductId()); + + // Рассчитываем общую сумму строки заказа + double totalPrice = product.getPrice() * dto.getCount(); + + // Создаем новую сущность строки заказа + OrderLineEntity orderLineEntity = toEntity(dto); + + // Устанавливаем общую сумму в сущность строки заказа + orderLineEntity.setTotalPrice(totalPrice); + + // Создаем строку заказа + OrderLineEntity createdOrderLine = orderLineService.create(orderLineEntity); + + // Преобразуем созданную строку заказа в DTO + OrderLineDto createdOrderLineDto = toDto(createdOrderLine); + + // Возвращаем созданную строку заказа в виде DTO с заполненным полем totalPrice + return createdOrderLineDto; } @PutMapping("/{id}") diff --git a/src/main/java/com/example/demo/order_lines/api/OrderLineDto.java b/src/main/java/com/example/demo/order_lines/api/OrderLineDto.java index d686e57..1d58731 100644 --- a/src/main/java/com/example/demo/order_lines/api/OrderLineDto.java +++ b/src/main/java/com/example/demo/order_lines/api/OrderLineDto.java @@ -7,17 +7,24 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; public class OrderLineDto { + @JsonProperty(access = JsonProperty.Access.READ_ONLY) private Long id; @NotNull @Min(1) - private Long orderId; - @NotNull - @Min(1) private Long productId; @NotBlank private Integer count; - @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Double totalPriceLine; + + public Double getTotalPriceLine() { + return totalPriceLine; + } + + public void setTotalPriceLine(Double totalPriceLine) { + this.totalPriceLine = totalPriceLine; + } + public Long getId() { return id; } @@ -26,14 +33,6 @@ public class OrderLineDto { this.id = id; } - public Long getOrderId() { - return orderId; - } - - public void setOrderId(Long orderId) { - this.orderId = orderId; - } - public Integer getCount() { return count; } diff --git a/src/main/java/com/example/demo/order_lines/model/OrderLineEntity.java b/src/main/java/com/example/demo/order_lines/model/OrderLineEntity.java index de79b9c..e001dc4 100644 --- a/src/main/java/com/example/demo/order_lines/model/OrderLineEntity.java +++ b/src/main/java/com/example/demo/order_lines/model/OrderLineEntity.java @@ -2,25 +2,33 @@ package com.example.demo.order_lines.model; import java.util.Objects; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; + import com.example.demo.core.model.BaseEntity; import com.example.demo.orders.model.OrderEntity; import com.example.demo.products.model.ProductEntity; +import com.fasterxml.jackson.annotation.JsonBackReference; public class OrderLineEntity extends BaseEntity { - private OrderEntity order; private Integer count; private ProductEntity product; + private Double totalPrice; + @ManyToOne + @JoinColumn(name = "order_id") + @JsonBackReference // Это свойство не управляется родительским объектом + private OrderEntity order; public OrderLineEntity() { } - public OrderLineEntity(Long id, OrderEntity order, ProductEntity product, Integer count) { + public OrderLineEntity(Long id, ProductEntity product, Integer count, Double totalPrice) { super(id); - this.order = order; - this.count = count; this.product = product; + this.count = count; + this.totalPrice = totalPrice; } public ProductEntity getProduct() { @@ -31,14 +39,6 @@ public class OrderLineEntity extends BaseEntity { this.product = product; } - public OrderEntity getOrder() { - return order; - } - - public void setOrder(OrderEntity order) { - this.order = order; - } - public Integer getCount() { return count; } @@ -47,9 +47,17 @@ public class OrderLineEntity extends BaseEntity { this.count = count; } + public Double getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(Double totalPrice) { + this.totalPrice = totalPrice; + } + @Override public int hashCode() { - return Objects.hash(id, order, product, count); + return Objects.hash(id, product, count); } @SuppressWarnings("unlikely-arg-order-product") @@ -61,7 +69,6 @@ public class OrderLineEntity extends BaseEntity { return false; final OrderLineEntity other = (OrderLineEntity) obj; return Objects.equals(other.getId(), id) - && Objects.equals(other.getOrder(), order) && Objects.equals(other.getProduct(), product) && Objects.equals(other.getCount(), count); } diff --git a/src/main/java/com/example/demo/order_lines/service/OrderLineService.java b/src/main/java/com/example/demo/order_lines/service/OrderLineService.java index 2b701a0..f1582f3 100644 --- a/src/main/java/com/example/demo/order_lines/service/OrderLineService.java +++ b/src/main/java/com/example/demo/order_lines/service/OrderLineService.java @@ -22,9 +22,7 @@ public class OrderLineService { if (Objects.equals(orderLineId, 0L)) { return repository.getAll(); } - return repository.getAll().stream() - .filter(orderLine -> orderLine.getOrder().getId().equals(orderLineId)) - .toList(); + return repository.getAll(); } public OrderLineEntity get(Long id) { @@ -38,7 +36,6 @@ public class OrderLineService { public OrderLineEntity update(Long id, OrderLineEntity entity) { final OrderLineEntity existsEntity = get(id); - existsEntity.setOrder(entity.getOrder()); existsEntity.setProduct(entity.getProduct()); existsEntity.setCount(entity.getCount()); return repository.update(existsEntity); diff --git a/src/main/java/com/example/demo/orders/api/OrderController.java b/src/main/java/com/example/demo/orders/api/OrderController.java index 9ef168d..3a22752 100644 --- a/src/main/java/com/example/demo/orders/api/OrderController.java +++ b/src/main/java/com/example/demo/orders/api/OrderController.java @@ -1,7 +1,8 @@ package com.example.demo.orders.api; +import java.sql.Date; +import java.util.ArrayList; import java.util.List; - import org.modelmapper.ModelMapper; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -13,10 +14,12 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.example.demo.core.configuration.Constants; +import com.example.demo.order_lines.api.OrderLineDto; +import com.example.demo.order_lines.model.OrderLineEntity; +import com.example.demo.order_lines.service.OrderLineService; import com.example.demo.orders.model.OrderEntity; import com.example.demo.orders.service.OrderService; import com.example.demo.users.service.UserService; - import jakarta.validation.Valid; @RestController @@ -25,26 +28,54 @@ public class OrderController { private final OrderService orderService; private final UserService userService; private final ModelMapper modelMapper; + private final OrderLineService orderLineService; - public OrderController(OrderService orderService, UserService userService, ModelMapper modelMapper) { + public OrderController(OrderService orderService, UserService userService, ModelMapper modelMapper, + OrderLineService orderLineService) { this.orderService = orderService; this.userService = userService; this.modelMapper = modelMapper; + this.orderLineService = orderLineService; } private OrderDto toDto(OrderEntity entity) { - return modelMapper.map(entity, OrderDto.class); + var dto = new OrderDto(); + dto.setId(entity.getId()); + dto.setUserId(entity.getUser().getId()); + + // Преобразование каждой сущности OrderLineEntity в OrderLineDto и добавление их + // в список lines + for (OrderLineEntity orderLineEntity : entity.getLines()) { + OrderLineDto orderLineDto = new OrderLineDto(); + orderLineDto.setId(orderLineEntity.getId()); + orderLineDto.setProductId(orderLineEntity.getProduct().getId()); + orderLineDto.setCount(orderLineEntity.getCount()); + orderLineDto.setTotalPriceLine(orderLineEntity.getTotalPrice()); + dto.addOrderLine(orderLineDto); + } + + dto.setDate(new Date(System.currentTimeMillis())); + return dto; } - private OrderEntity toEntity(OrderDto dto) { + public OrderEntity toEntity(OrderDto dto) { final OrderEntity entity = modelMapper.map(dto, OrderEntity.class); - entity.setUser(userService.get(dto.getUserId())); + if (dto.getUserId() != null) { + entity.setUser(userService.get(dto.getUserId())); + } + // устанавливаем связь между заказом и строками заказа + entity.getLines().clear(); + for (OrderLineDto lineDto : dto.getLines()) { + OrderLineEntity orderLineEntity = modelMapper.map(lineDto, OrderLineEntity.class); + entity.addOrderLine(orderLineEntity); + } return entity; } @GetMapping - public List getAll(@RequestParam(name = "userId", defaultValue = "0") Long userId) { - return orderService.getAll(userId).stream().map(this::toDto).toList(); + public List getAll(@RequestParam(name = "userId", defaultValue = "0") Long userId, + @RequestParam(name = "lines", defaultValue = "") List lines) { + return orderService.getAll(userId, lines).stream().map(this::toDto).toList(); } @GetMapping("/{id}") @@ -54,7 +85,8 @@ public class OrderController { @PostMapping public OrderDto create(@RequestBody @Valid OrderDto dto) { - return toDto(orderService.create(toEntity(dto))); + OrderEntity orderEntity = toEntity(dto); + return toDto(orderService.create(orderEntity)); } @PutMapping("/{id}") diff --git a/src/main/java/com/example/demo/orders/api/OrderDto.java b/src/main/java/com/example/demo/orders/api/OrderDto.java index 09293eb..f553f18 100644 --- a/src/main/java/com/example/demo/orders/api/OrderDto.java +++ b/src/main/java/com/example/demo/orders/api/OrderDto.java @@ -1,20 +1,26 @@ package com.example.demo.orders.api; +import java.sql.Date; +import java.util.ArrayList; +import java.util.List; + +import com.example.demo.order_lines.api.OrderLineDto; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.Min; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; public class OrderDto { + @JsonProperty(access = JsonProperty.Access.READ_ONLY) private Long id; @NotNull @Min(1) private Long userId; - @NotBlank - private String date; - @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date date = getDate(); + @NotNull + private final List lines = new ArrayList<>(); + public Long getId() { return id; } @@ -31,11 +37,21 @@ public class OrderDto { this.userId = userId; } - public String getDate() { - return date; - } - - public void setDate(String date) { + public void setDate(Date date) { this.date = date; } + + public List getLines() { + return lines; + } + + // метод для добавленя строк заказа + public void addOrderLine(OrderLineDto orderLine) { + this.lines.add(orderLine); + } + + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public Date getDate() { + return date; + } } diff --git a/src/main/java/com/example/demo/orders/model/OrderEntity.java b/src/main/java/com/example/demo/orders/model/OrderEntity.java index e3406f1..f6c5432 100644 --- a/src/main/java/com/example/demo/orders/model/OrderEntity.java +++ b/src/main/java/com/example/demo/orders/model/OrderEntity.java @@ -1,22 +1,28 @@ package com.example.demo.orders.model; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import com.example.demo.core.model.BaseEntity; +import com.example.demo.order_lines.model.OrderLineEntity; import com.example.demo.users.model.UserEntity; +import com.fasterxml.jackson.annotation.JsonManagedReference; public class OrderEntity extends BaseEntity { private UserEntity user; - private String date; + @JsonManagedReference + private final List lines = new ArrayList<>(); public OrderEntity() { - // Пустой конструктор + super(); } - public OrderEntity(Long id, UserEntity user, String date) { + public OrderEntity(Long id, UserEntity user, List lines) { super(id); this.user = user; - this.date = date; + this.lines.clear(); + this.lines.addAll(lines); } public UserEntity getUser() { @@ -27,17 +33,17 @@ public class OrderEntity extends BaseEntity { this.user = user; } - public String getDate() { - return date; + public List getLines() { + return lines; } - public void setDate(String date) { - this.date = date; + public void setLines(OrderLineEntity line) { + this.lines.add(line); } @Override public int hashCode() { - return Objects.hash(id, user, date); + return Objects.hash(id, user, lines); } @SuppressWarnings("unlikely-arg-user") @@ -50,6 +56,11 @@ public class OrderEntity extends BaseEntity { final OrderEntity other = (OrderEntity) obj; return Objects.equals(other.getId(), id) && Objects.equals(other.getUser(), user) - && Objects.equals(other.getDate(), date); + && Objects.equals(other.getLines(), lines); + } + + // метод добавления строк заказа в заказ + public void addOrderLine(OrderLineEntity orderLine) { + this.lines.add(orderLine); } } diff --git a/src/main/java/com/example/demo/orders/service/OrderService.java b/src/main/java/com/example/demo/orders/service/OrderService.java index f325cf8..05b37a1 100644 --- a/src/main/java/com/example/demo/orders/service/OrderService.java +++ b/src/main/java/com/example/demo/orders/service/OrderService.java @@ -1,5 +1,6 @@ package com.example.demo.orders.service; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -7,24 +8,40 @@ import java.util.Optional; import org.springframework.stereotype.Service; import com.example.demo.core.error.NotFoundException; +import com.example.demo.order_lines.service.OrderLineService; import com.example.demo.orders.model.OrderEntity; import com.example.demo.orders.repository.OrderRepository; @Service public class OrderService { private final OrderRepository repository; + private final OrderLineService orderLineService; - public OrderService(OrderRepository repository) { + public OrderService(OrderRepository repository, OrderLineService orderLineService) { this.repository = repository; + this.orderLineService = orderLineService; } - public List getAll(Long userId) { - if (Objects.equals(userId, 0L)) { - return repository.getAll(); + public List getAll(Long userId, List lines) { + + var linesEnt = new ArrayList<>(); + for (var lineid : lines) { + linesEnt.add(orderLineService.get(lineid)); } - return repository.getAll().stream() - .filter(order -> order.getUser().getId().equals(userId)) - .toList(); + + if (!Objects.equals(userId, 0L) && !Objects.equals(linesEnt.size(), 0)) { + return repository.getAll().stream() + .filter(line -> line.getUser().getId().equals( + userId) && line.getLines().containsAll(linesEnt)) + .toList(); + } + if (Objects.equals(userId, 0L) && !Objects.equals(linesEnt.size(), 0)) { + return repository.getAll().stream().filter(line -> line.getLines().containsAll(linesEnt)).toList(); + } + if (!Objects.equals(userId, 0L) && Objects.equals(linesEnt.size(), 0)) { + return repository.getAll().stream().filter(line -> line.getUser().getId().equals(userId)).toList(); + } + return repository.getAll(); } public OrderEntity get(Long id) { @@ -37,10 +54,14 @@ public class OrderService { } public OrderEntity update(Long id, OrderEntity entity) { - final OrderEntity existsEntity = get(id); - existsEntity.setUser(entity.getUser()); - existsEntity.setDate(entity.getDate()); - return repository.update(existsEntity); + final OrderEntity existEntity = get(id); + existEntity.setUser(entity.getUser()); + existEntity.getLines().clear(); // Очищаем существующие строки заказа + var lines = entity.getLines(); + for (var line : lines) { + existEntity.setLines(line); + } + return repository.update(existEntity); } public OrderEntity delete(Long id) { diff --git a/src/test/java/com/example/demo/OrderLineServiceTests.java b/src/test/java/com/example/demo/OrderLineServiceTests.java index 282e229..a0d2bee 100644 --- a/src/test/java/com/example/demo/OrderLineServiceTests.java +++ b/src/test/java/com/example/demo/OrderLineServiceTests.java @@ -26,7 +26,7 @@ class OrderLineServiceTests { @Order(1) void createTest() { // Создаем тестовую сущность OrderLineEntity - OrderLineEntity testOrderLine = new OrderLineEntity(null, null, null, 5); + OrderLineEntity testOrderLine = new OrderLineEntity(null, null, 5, null); // Вызываем метод create() и сохраняем созданную сущность OrderLineEntity createdOrderLine = orderLineService.create(testOrderLine); // Проверяем, что метод create() вернул не null diff --git a/src/test/java/com/example/demo/OrderServiceTests.java b/src/test/java/com/example/demo/OrderServiceTests.java index c299ad7..2bfe5e1 100644 --- a/src/test/java/com/example/demo/OrderServiceTests.java +++ b/src/test/java/com/example/demo/OrderServiceTests.java @@ -1,5 +1,8 @@ package com.example.demo; +import java.util.ArrayList; +import java.util.List; + import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; @@ -8,6 +11,7 @@ import org.junit.jupiter.api.TestMethodOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import com.example.demo.core.error.NotFoundException; +import com.example.demo.order_lines.model.OrderLineEntity; import com.example.demo.orders.model.OrderEntity; import com.example.demo.orders.service.OrderService; @@ -25,16 +29,21 @@ class OrderServiceTests { @Test @Order(1) void createTest() { + orderService.create(new OrderEntity(null, null, null)); + @SuppressWarnings({ "rawtypes", "unchecked" }) + List lines = new ArrayList(); + lines.add(new OrderLineEntity(null, null, 4, null)); + lines.add(new OrderLineEntity(null, null, 5, null)); + lines.add(new OrderLineEntity(null, null, 6, null)); + lines.add(new OrderLineEntity(null, null, 7, null)); // Создаем тестовую сущность OrderEntity - OrderEntity testOrder = new OrderEntity(null, null, "2024-04-01"); + OrderEntity testOrder = new OrderEntity(null, null, lines); // Вызываем метод create() и сохраняем созданную сущность OrderEntity createdOrder = orderService.create(testOrder); // Проверяем, что метод create() вернул не null Assertions.assertNotNull(createdOrder); // Проверяем, что созданная сущность имеет назначенный ID Assertions.assertNotNull(createdOrder.getId()); - // Проверяем, что созданная сущность соответствует той, которую мы передали - Assertions.assertEquals(testOrder.getDate(), createdOrder.getDate()); } @Test @@ -42,16 +51,10 @@ class OrderServiceTests { void updateTest() { // Получаем сущность OrderEntity для обновления OrderEntity existingOrder = orderService.get(1L); - // Создаем новую дату для обновления - String newDate = "2024-04-02"; - // Устанавливаем новую дату в сущность OrderEntity - existingOrder.setDate(newDate); // Вызываем метод update() и сохраняем обновленную сущность OrderEntity updatedOrder = orderService.update(1L, existingOrder); // Проверяем, что метод update() вернул не null Assertions.assertNotNull(updatedOrder); - // Проверяем, что обновленная сущность имеет ту же дату, что и заданная - Assertions.assertEquals(newDate, updatedOrder.getDate()); } @Test