Skip to content

Assembler v0.7.10

Latest

Choose a tag to compare

@pellse pellse released this 09 Apr 19:11
· 42 commits to main since this release

This is a minor release to facilitate chaining of Assembler instances. Below is an example from demo project illustrating Assembler chaining:

@RestController
public class VitalsMonitoringStreamController {

    private final Assembler<HR, Vitals> vitalsAssembler;
    private final Assembler<Vitals, AugmentedVitals> augmentedVitalsAssembler;

    private final HeartRateStreamingService heartRateStreamingService;

    VitalsMonitoringStreamController(
            HeartRateStreamingService heartRateStreamingService,
            DiagnosisAIService diagnosisAIService) {

        vitalsAssembler = assemblerOf(Vitals.class)
                .withCorrelationIdResolver(HR::patientId)
                .withRules(
                        rule(Patient::id, oneToOne(cached(this::getPatients, caffeineCache()))),
                        rule(BP::patientId, oneToMany(BP::id, cachedMany(this::getBPs, caffeineCache()))),
                        Vitals::new)
                .build();

        augmentedVitalsAssembler = assemblerOf(AugmentedVitals.class)
                .withCorrelationIdResolver(Vitals::patient, Patient::id)
                .withRules(
                        rule(Diagnosis::patientId, oneToOne(diagnosisAIService::getDiagnosesFromLLM)),
                        AugmentedVitals::new)
                .build();

        this.heartRateStreamingService = heartRateStreamingService;
    }

    @SubscriptionMapping
    @GetMapping(value = "/vitals/stream", produces = TEXT_EVENT_STREAM_VALUE)
    Flux<AugmentedVitals> vitals() {
        return heartRateStreamingService.stream()
                .window(3)
                .flatMap(vitalsAssembler::assembleStream)
                .flatMap(augmentedVitalsAssembler::assemble);
    }
}

What's Changed

  • Added overloaded correlationIdResolver() methods to resolve ID using indirections
  • Adding assembleStream() method to Assembler interface, to return Flux<Stream<R>> instead of Flux<R> and avoid unnecessary transformations when chaining multiple Assembler instances