package Ġno . nav . f amil ie . op pd rag . config Ċ Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġno . nav . f amil ie . kon tr ak ter . fel les . object Mapper Ċ import Ġno . nav . f amil ie . kon tr ak ter . fel les . op pd rag . U tb et al ings op pd rag Ċ import Ġno . try g de et aten . sk j ema . op pd rag . M mel Ċ import Ġorg . postgresql . util . PG object Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . core . convert . converter . Converter Ċ import Ġorg . springframework . data . convert . Reading Converter Ċ import Ġorg . springframework . data . convert . Writing Converter Ċ import Ġorg . springframework . data . jdbc . core . convert . Jdbc Custom Conversions Ċ import Ġorg . springframework . data . jdbc . repository . config . Abstract Jdbc Configuration Ċ import Ġorg . springframework . jdbc . core . named param . Named Parameter Jdbc Operations Ċ import Ġorg . springframework . jdbc . core . named param . Named Parameter Jdbc Template Ċ import Ġorg . springframework . jdbc . datasource . DataSource Transaction Manager Ċ import Ġorg . springframework . transaction . Platform Transaction Manager Ċ import Ġjavax . sql . DataSource ĊĊ Ċ @ Configuration Ċ class ĠDatabase Configuration Ġ: ĠAbstract Jdbc Configuration () Ġ{ ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġfun Ġoperations ( dataSource : ĠDataSource ): ĠNamed Parameter Jdbc Template Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNamed Parameter Jdbc Template ( dataSource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġfun Ġtransaction Manager ( dataSource : ĠDataSource ): ĠPlatform Transaction Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDataSource Transaction Manager ( dataSource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġoverride Ġfun Ġjdbc Custom Conversions (): ĠJdbc Custom Conversions Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJdbc Custom Conversions ( listOf ( PG object Til U tb et al ings op pd rag Converter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU tb et al ings op pd rag Til PG object Converter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPG object Til M mel Converter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM mel Til PG object Converter ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Reading Converter ĊĠĠĠ Ġclass ĠPG object Til U tb et al ings op pd rag Converter Ġ: ĠConverter < PG object , ĠU tb et al ings op pd rag > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( p G object : ĠPG object ): ĠU tb et al ings op pd rag ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp G object . value ?. let Ġ{ ĠobjectMapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Writing Converter ĊĠĠĠ Ġclass ĠU tb et al ings op pd rag Til PG object Converter Ġ: ĠConverter < U tb et al ings op pd rag , ĠPG object > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( ut bet al ings op pd rag : ĠU tb et al ings op pd rag ): ĠPG object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPG object (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" json " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠobjectMapper . writeValue AsString ( ut bet al ings op pd rag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Reading Converter ĊĠĠĠ Ġclass ĠPG object Til M mel Converter Ġ: ĠConverter < PG object , ĠM mel > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( p G object : ĠPG object ): ĠM mel ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp G object . value ?. let Ġ{ ĠobjectMapper . readValue ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Writing Converter ĊĠĠĠ Ġclass ĠM mel Til PG object Converter Ġ: ĠConverter < M mel , ĠPG object > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( ut bet al ings op pd rag : ĠM mel ): ĠPG object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPG object (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" json " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠobjectMapper . writeValue AsString ( ut bet al ings op pd rag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ