package Ġme . j ason 5 lee . k tp ost . getPost Ċ Ċ import Ġio . vertx . kotlin . coroutines . await Ċ import Ġio . vertx . mysql client . MySQL Pool Ċ import Ġio . vertx . sql client . Tuple Ċ import Ġme . j ason 5 lee . k tp ost . common .* Ċ import Ġme . j ason 5 lee . res uk t . Result Ċ Ċ class ĠImplementation ( val Ġmysql : ĠMySQL Pool ) Ġ: ĠGet Post Ġ{ ĊĠ Ġoverride Ġsuspend Ġfun Ġinvoke ( input : ĠQuery ): ĠResult < Post Info For Page , ĠFailure > Ġ{ ĊĠĠĠ Ġval Ġpost Row Ġ= Ġmysql . prepared Query (" SELECT Ġ* ĠFROM Ġposts ĠWHERE Ġpost _ id =? ") ĊĠĠĠĠĠ Ġ. execute ( Tuple . of ( input . value )) ĊĠĠĠĠĠ Ġ. await () ĊĠĠĠĠĠ Ġ. first OrNull () Ġ?: Ġreturn ĠResult . failure ( Failure . Post NotFound ) ĊĊĠĠĠ Ġval Ġcreator Id Ġ= ĠUserId ( post Row . get NonNull Long (" creator ")) ĊĠĠĠ Ġval Ġcreation Time Ġ= ĠTime ( post Row . get NonNull Long (" creation _ time ")) ĊĠĠĠ Ġval Ġlast Modified Ġ= Ġpost Row . getLong (" last _ modified ") ?. let Ġ{ ĠTime ( it ) Ġ} ĊĠĠĠ Ġval Ġtitle Ġ= Ġpost Row . getString Model (" title ") Ġ{ ĠPost Title . new ( it ) Ġ} ĊĠĠĠ Ġval Ġpost Content Ġ= ĊĠĠĠĠĠ Ġpost Row . getString (" post ") ?. let Ġ{ ĠPost Content . Post ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġpost Row . getString Model (" url ") Ġ{ ĠPost Content . Url . create ( it ) Ġ} ĊĊĠĠĠ Ġval Ġuser Row Ġ= Ġmysql . prepared Query (" SELECT Ġuser _ name ĠFROM Ġusers ĠWHERE Ġuser _ id =? ") ĊĠĠĠĠĠ Ġ. execute ( Tuple . of ( creator Id . value )) ĊĠĠĠĠĠ Ġ. await () ĊĠĠĠĠĠ Ġ. first OrNull () Ġ?: Ġthrow ĠException (" creator Ġof Ġthe Ġpost Ġ`${ input . value }` Ġnot Ġfound Ġin Ġusers ") ĊĠĠĠ Ġval Ġcreator Name Ġ= Ġuser Row . getString Model (" user _ name ") Ġ{ ĠUser Name . new ( it ) Ġ} ĊĊĠĠĠ Ġreturn ĠResult . success ( ĊĠĠĠĠĠ ĠPost Info For Page ( ĊĠĠĠĠĠĠĠ Ġcreator Ġ= ĠCreator Info ( name Ġ= Ġcreator Name , Ġid Ġ= Ġcreator Id ), ĊĠĠĠĠĠĠĠ Ġcreation Ġ= Ġcreation Time , ĊĠĠĠĠĠĠĠ Ġlast Modified Ġ= Ġlast Modified , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġpost Content , ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ