package Ġcom . github . d agger ok . app Ċ Ċ import Ġio . r 2 dbc . postgresql . Postgres ql Connection Configuration Ċ import Ġio . r 2 dbc . postgresql . Postgres ql ConnectionFactory Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . data . annotation . Id Ċ import Ġorg . springframework . data . r 2 dbc . repository . query . Query Ċ import Ġorg . springframework . data . repository . reactive . Reactive Crud Repository Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġreactor . core . publisher . Flux Ċ import Ġreactor . core . publisher . Mono Ċ Ċ data Ġclass ĠEmployee ( ĊĠĠĠ Ġvar Ġname : ĠString , ĊĠĠĠ Ġvar Ġsalary : ĠInt , ĊĠĠĠ Ġvar Ġorganization Id : ĠLong , ĊĠĠĠ Ġ@ Id Ġvar Ġid : ĠInt ? Ġ= Ġnull Ċ ) Ċ Ċ interface ĠEmployee Repository Ġ: ĠReactive Crud Repository < Employee , ĠLong > Ġ{ ĊĠ Ġ@ Query (" select Ġid , Ġname , Ġsalary , Ġorganization _ id Ġfrom Ġemployee Ġe Ġwhere Ġe . organization _ id Ġ= Ġ$ 1 ") ĊĠ Ġfun ĠfindBy Organization Id ( organization Id : ĠInt ): ĠFlux < Employee > Ċ } Ċ Ċ data Ġclass ĠOrganization ( ĊĠĠĠ Ġvar Ġname : ĠString , ĊĠĠĠ Ġ@ Id Ġvar Ġid : ĠInt ? Ġ= Ġnull Ċ ) Ċ Ċ interface ĠOrganization Repository Ġ: ĠReactive Crud Repository < Organization , ĠInt > Ċ Ċ data Ġclass ĠOrganization DTO ( var Ġid : ĠLong ?, Ġvar Ġname : ĠString ) Ġ{ ĊĠ Ġvar Ġemployees : ĠMutable List < Any > Ġ= ĠArrayList () ĊĊĠ Ġconstructor ( employees : ĠMutable List < Any >) Ġ: Ġthis ( null , Ġ"") Ġ{ ĊĠĠĠ Ġthis . employees Ġ= Ġemployees ĊĠ Ġ} Ċ } Ċ Ċ @ Configuration Ċ class ĠEmployee Configuration Ġ{ ĊĠ Ġ/* ĊĠĠĠ Ġ@ Bean Ġ// Ġoptional : Ġ 1 ĊĠĠĠ Ġfun Ġfactory ( client : ĠDatabase Client , Ġstrategy : ĠReactive DataAccess Strategy ): ĠR 2 dbc Repository Factory Ġ{ ĊĠĠĠĠĠ Ġ// val Ġcontext Ġ= ĠRel ational Mapping Context () ĊĠĠĠĠĠ Ġ// context . after Properties Set () ĊĠĠĠĠĠ Ġ// val Ġstrategy Ġ= ĠDefault Reactive DataAccess Strategy ( Postgres Dialect . INSTANCE ) ĊĠĠĠĠĠ Ġreturn ĠR 2 dbc Repository Factory ( client , Ġstrategy ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Bean Ġ// Ġoptional : Ġ 2 ĊĠĠĠ Ġfun Ġdatabase Client ( factory : ĠConnection Factory ): ĠDatabase Client Ġ{ ĊĠĠĠĠĠ Ġreturn ĠDatabase Client . builder (). connection Factory ( factory ). build () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Bean Ġ// Ġoptional : Ġ 3 ĊĠĠĠ Ġfun Ġrepository ( factory : ĠR 2 dbc Repository Factory ): ĠEmployee Repository Ġ= ĊĠĠĠĠĠ Ġfactory . getRepository ( Employee Repository :: class . java ) ĊĠĠĠĠĠ Ġ// factory . getRepository < Employee Repository >( Employee Repository :: class . java ) ĊĠ Ġ*/ ĊĠ Ġ@ Bean ĊĠ Ġfun Ġconnection Factory () Ġ= ĠPostgres ql ConnectionFactory ( ĊĠĠĠĠĠ ĠPostgres ql Connection Configuration ĊĠĠĠĠĠĠĠĠĠ Ġ. builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. host (" 1 2 7 . 0 . 0 . 1 ") ĊĠĠĠĠĠĠĠĠĠ Ġ. port ( 5 4 3 2 ) ĊĠĠĠĠĠĠĠĠĠ Ġ. database (" postgres ") ĊĠĠĠĠĠĠĠĠĠ Ġ. username (" postgres ") ĊĠĠĠĠĠĠĠĠĠ Ġ. password (" postgres ") ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠ Ġ) Ċ } Ċ Ċ @ RestController Ċ @ RequestMapping ("/ employees ") Ċ class ĠEmployee Controller ( private Ġval Ġrepository : ĠEmployee Repository ) Ġ{ ĊĊĠ Ġ@ GetMapping ĊĠ Ġfun ĠfindAll (): ĠFlux < Employee > Ġ= Ġrepository . findAll () ĊĊĠ Ġ@ GetMapping ("/ { id }") ĊĠ Ġfun Ġfind ById (@ PathVariable Ġid : ĠLong ): ĠMono < Employee > Ġ= Ġrepository . findById ( id ) ĊĊĠ Ġ@ GetMapping ("/ organization /{ organization Id }") ĊĠ Ġfun ĠfindBy Organization Id (@ PathVariable Ġorganization Id : ĠInt ): ĠFlux < Employee > Ġ= Ġrepository . findBy Organization Id ( organization Id ) ĊĊĠ Ġ@ PostMapping ĊĠ Ġfun Ġadd (@ RequestBody Ġemployee : ĠEmployee ): ĠMono < Employee > Ġ= Ġrepository . save ( employee ) Ċ } Ċ