package Ġco . nil in . op ex . bc gateway . ports . postgres . impl Ċ Ċ import Ġco . nil in . op ex . bc gateway . core . model . Address Type Ċ import Ġco . nil in . op ex . bc gateway . core . model . Assigned Address Ċ import Ġco . nil in . op ex . bc gateway . core . spi . Assigned Address Handler Ċ import Ġco . nil in . op ex . bc gateway . core . spi . Chain Loader Ċ import Ġco . nil in . op ex . bc gateway . ports . postgres . dao . Address Type Repository Ċ import Ġco . nil in . op ex . bc gateway . ports . postgres . dao . Assigned Address Chain Repository Ċ import Ġco . nil in . op ex . bc gateway . ports . postgres . dao . Assigned Address Repository Ċ import Ġco . nil in . op ex . bc gateway . ports . postgres . model . Assigned Address Model Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . toList Ċ import Ġkotlinx . coroutines . reactive . await First Ċ import Ġkotlinx . coroutines . reactive . await First OrNull Ċ import Ġorg . springframework . stereotype . Service Ċ Ċ @ Service Ċ class ĠAssigned Address Handler Impl ( ĊĠĠĠ Ġval Ġassigned Address Repository : ĠAssigned Address Repository , ĊĠĠĠ Ġval Ġaddress Type Repository : ĠAddress Type Repository , ĊĠĠĠ Ġval Ġassigned Address Chain Repository : ĠAssigned Address Chain Repository , ĊĠĠĠ Ġval Ġchain Loader : ĠChain Loader Ċ ) Ġ: ĠAssigned Address Handler Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Assigned Addresses ( user : ĠString , Ġaddress Types : ĠList < Address Type >): ĠList < Assigned Address > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( address Types . isEmpty ()) Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġreturn Ġassigned Address Repository . findBy Uuid And Address Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , Ġaddress Types . map ( Address Type :: id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssigned Address ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . uuid , Ġmodel . address , Ġmodel . memo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Type Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findById ( model . address TypeId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġa am Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAddress Type ( a am . id !! , Ġa am . type , Ġa am . address Regex , Ġa am . memo Regex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await First (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassigned Address Chain Repository . findBy Assigned Address ( model . id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġcm Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain Loader . fetch Chain Info ( cm . chain ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġpersist ( assigned Address : ĠAssigned Address ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassigned Address Repository . save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssigned Address Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassigned Address . uuid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassigned Address . address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassigned Address . memo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassigned Address . type . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). await First () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfind Uuid ( address : ĠString , Ġmemo : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġassigned Address Repository . findBy Address And Memo ( address , Ġmemo ). await First OrNull ()?. uuid ĊĠĠĠ Ġ} Ċ }