Cześć, mam takie metody w repozytorium:
Mono<Entity> findById(long id);
Mono<Entity> save(Entity entity);
a pewna z metod encji ma taką sygnaturkę:
Either<Error, Entity> businessMethod();
Chciałbym w serwisie pobrać z repo encję, wykonać metodę biznesową, zapisać i zwrócić id zapisanej encji czyli de facto Mono<Either<AppError, Long>>.
W kodzie imperatywnym jest to proste:
Entity e = findById(id);
e.businessMethod();
repo.save(e).getId();
A z mono i eitherami robi się hardkowoiej. Mam coś takiego w kotlinie:
repo
.loadById(id)
.map {
it.tryBusinessMethod()
}
.flatMap {
it.flatMap {
repo.save(it)
}
.map{ it.id }
}
Ale ni chu nie mogę dojść .. to nie działą