package Ġcom . example . uploader Ċ Ċ import Ġorg . springframework . stereotype . Repository Ċ import Ġreactor . core . publisher . Mono Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . atomic . Atomic Long Ċ Ċ /** Ċ Ġ* ĠDummy Ġinterface Ġfor Ġreactive Ġkey - value Ġrepository Ġwith Ġauto - generated Ġlong Ġkeys Ċ Ġ*/ Ċ interface ĠReactive Repository < T > Ġ{ ĊĠĠĠ Ġfun Ġ< S Ġ: ĠT > Ġadd ( value Gen : Ġ( key : ĠLong ) Ġ-> ĠS ): ĠMono < S > ĊĠĠĠ Ġfun Ġget ( key : ĠLong ): ĠMono < T > Ċ } Ċ Ċ // ĠTODO : Ġswitch Ġto Ġ( reactive ) Ġspring - data ? Ċ @ Repository Ċ class ĠIn Memory Repository < T > Ġ: ĠReactive Repository < T > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinc Ġ= ĠAtomic Long ( 1 ) ĊĠĠĠ Ġprotected Ġval Ġstorage Ġ= ĠConcurrent HashMap < Long , ĠT >() ĊĊĠĠĠ Ġoverride Ġfun Ġ< S Ġ: ĠT > Ġadd ( value Gen : Ġ( key : ĠLong ) Ġ-> ĠS ): ĠMono < S > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġinc . get And Increment () ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue Gen ( key ) ĊĠĠĠĠĠĠĠ Ġstorage [ key ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn ĠMono . just ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( key : ĠLong ): ĠMono < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġstorage [ key ] ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( value Ġ== Ġnull ) ĠMono . empty () Ġelse ĠMono . just ( value ) ĊĠĠĠ Ġ} Ċ }