Я ищу хороший способ кодировать это:
MyCloudDTO saveInCloud(MyCloudDTO dto) {
//sync http call :-(
return cloudService.save(dto);
}
MyData saveInDb(MyData data) {
//database call
return repository.save(data);
}
MyDTO save(MyDTO dto) {
MyCloudDTO cloudDTO = mapper.map(dto);
dto.setCloudId(saveInCloud(dto).getId());
MyData data = mapper2.map(dto);
dto.setDbId(saveInDb(data).getId());
return dto;
}
С Spring WebFlux и Monos.
Основная проблема заключается в том, что я хочу сохранить базовый dto во время всехпроцесс, потому что картографы отображают только нужные им свойства и оставляют остальные.
Я нашел способ сделать это, но я не уверен, что это правильный / лучший способ сделать:
Mono<MyCloudDTO> saveInCloud(MyCloudDTO dto) {
return reactiveCloudService.save(dto);
}
Mono<MyData> saveInDb(MyData data) {
return reactiveRepository.save(data);
}
Mono<MyDTO> save(MyDTO dto) {
Mono<MyDTO> baseMono = Mono.just(dto);
Mono<MyCloudDTO> saveCloudMono = Mono.just(dto)
.map(mapper::map)
.flatMap(this::saveInCloud);
Mono<MyDTO> mergeAfterCloudSave = Mono.zip(
baseMono,
saveCloudMono,
(base, cloudDto) -> base.idCloud(cloudDto.getId())); //the setter return this
Mono<MyData> saveDbMono = mergeAfterCloudSave
.map(mapper2::map)
.flatMap(this::saveInCloud);
Mono<MyDTO> mergeAfterDbSave = Mono.zip(
mergeAfterCloudSave,
saveDbMono,
(base, dbData) -> base.idDb(data.getId())); //the setter return this
return mergeAfterDbSave;
}
Большое спасибо!
Saveriu