package Ġnet . am ars z ale k . reactive kotlin Ċ Ċ import Ġorg . springframework . data . annotation . Id Ċ import Ġorg . springframework . data . mongodb . core . mapping . Document Ċ import Ġorg . springframework . data . repository . reactive . Reactive Crud Repository Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . stereotype . Repository Ċ import Ġorg . springframework . web . reactive . function . server .* Ċ import Ġorg . springframework . web . reactive . function . server . Server Response . ok Ċ import Ġreactor . core . publisher . Flux Ċ import Ġreactor . core . publisher . Mono Ċ import Ġreactor . core . publisher . to Mono Ċ import Ġjava . time . Duration ĊĊ Ċ @ Document Ċ data Ġclass ĠBook (@ Id Ġval Ġid : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor : ĠString ) Ċ Ċ @ Component Ċ class ĠBooks Handler ( private Ġval Ġrepository : ĠBook Repository ) Ġ{ ĊĊĠĠĠ Ġfun ĠgetAll ( request : ĠServer Request ): ĠMono < Server Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= ĠFlux . interval ( Duration . of Seconds ( 1 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= Ġrepository . findAll () ĊĠĠĠĠĠĠĠ Ġreturn Ġok (). body ToServer Sent Events ( Flux . zip ( interval , Ġbooks ). map ({ Ġit . t 2 Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Book ( request : ĠServer Request ): ĠMono < Server Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġrequest . path Variable (" title ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġok (). body ( repository . findBy Title ( title )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Book ( request : ĠServer Request ): ĠMono < Server Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbook Ġ= Ġrequest . body To Mono < Book >() ĊĊĠĠĠĠĠĠĠ Ġreturn Ġok (). body ( repository . save All ( book ). to Mono ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Repository Ċ interface ĠBook Repository Ġ: ĠReactive Crud Repository < Book , ĠString > Ġ{ ĊĠĠĠ Ġfun ĠfindBy Title ( name : ĠString ): ĠMono < Book > Ċ }