Как написать сложный код с несколькими, если еще в функциональной реактивной Java, используя Spring WebFlux - PullRequest
1 голос
/ 03 мая 2019

Я новичок в функциональном программировании RXjava.Я пишу конечную точку публикации с несколькими условиями:

  1. Когда конечная точка публикации поражается продуктами
  2. Если корзина для вошедшего в систему пользователя не существует в БД, то создайте новуюcart
  3. Если корзина уже присутствует в базе, извлеките ее, запишите и проверьте JSON продуктов, есть ли данный продукт в JSON продуктов.
  4. Если он недоступен в продуктахJSON должен быть создан новый продукт
  5. Корзина должна быть обновлена ​​с помощью вновь созданного productId
  6. Если он присутствует в продуктах JSON, извлеките запись о продукте и проверьте количество.
  7. Если количество одинаковое, то ничего не делать
  8. В противном случае обновить запись.

Я сталкиваюсь с проблемой при написании этих условий в функциональном программировании.попробовал с switchifEmpty и не смог написать код в этом.

Вот пример кода.

public Mono<Product> createProduct(final Tuple2<String, productdto> tuple2) {
    final Product productdto = tuple2.getT2();
    return Mono.just(tuple2.getT1())
        .map(cartRepository::findById)
        .defaultIfEmpty(cartRepository.save(
            cart.builder()
                .id(tuple2.getT1())
                .build()))
        .flatMap(cartres -> cartres)
        .flatMap(cartres -> {
             final Product product = Product.builder()
                 .id(1234)
                 .productId(productDTO.getProductId())
                 .productName(productDTO.getProductName())
                 .build();
             return productRepository.save(product)
                 .map(saveCart -> cart.builder()
                     .id(cartres.getId()).build())
                 .flatMap(cartRepository::save);
        });
    }).then(Mono.just(productDto));
}
...