Assembler v0.6.6
What's Changed (from Git Commit messages)
- Adding
BatchRuleBuilder
andBatchRule
for easier integration with Spring GraphQL
import io.github.pellse.reactive.assembler.Rule.BatchRule;
import static io.github.pellse.reactive.assembler.Rule.batchRule;
import static io.github.pellse.reactive.assembler.RuleMapper.oneToMany;
import static io.github.pellse.reactive.assembler.RuleMapper.oneToOne;
import static io.github.pellse.reactive.assembler.caching.AutoCacheFactory.autoCache;
import static io.github.pellse.reactive.assembler.caching.CacheFactory.cached;
@Controller
public class PatientObservationGraphQLController {
private final PatientService patientService;
private final BatchRule<Patient, BodyMeasurement> bodyMeasurementBatchRule;
private final BatchRule<Patient, List<SpO2>> spO2BatchRule;
PatientObservationGraphQLController(PatientService ps, BodyMeasurementService bms, SpO2StreamingService spO2ss) {
this.patientService = ps;
this.bodyMeasurementBatchRule = batchRule(BodyMeasurement::patientId, oneToOne(cached(bms::retrieveBodyMeasurements)))
.withIdExtractor(Patient::id);
this.spO2BatchRule = batchRule(SpO2::patientId, oneToMany(SpO2::id, cached(autoCache(spO2ss::spO2Flux))))
.withIdExtractor(Patient::id);
}
@QueryMapping
Flux<Patient> patients() {
return patientService.findAllPatients();
}
@BatchMapping
Mono<Map<Patient, BodyMeasurement>> bodyMeasurement(List<Patient> patients) {
return bodyMeasurementBatchRule.executeToMono(patients);
}
@BatchMapping
Flux<List<SpO2>> spO2(List<Patient> patients) {
return spO2BatchRule.executeToFlux(patients);
}
}
Full Changelog: v0.6.5...v0.6.6