package Ġcom . box fox . link bit . service . friend Ċ Ċ import Ġcom . box fox . link bit . common . Routing Exception Ċ import Ġcom . box fox . link bit . common . entity . User Model Ċ import Ġcom . google . api . client . http . HttpStatusCode s Ċ import Ġio . one . sys . db . Tables .* Ċ import Ġorg . jooq . DSL Context Ċ import Ġjava . util .* Ċ Ċ class ĠFriend ServiceImpl Ġ: Ġcom . box fox . link bit . service . friend . Friend Use case Ġ{ ĊĊĠĠĠ Ġ@ Throws ( Routing Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġload Friends ( ctx : ĠDSL Context , Ġuid : ĠString ): ĠList < User Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfriends Ġ= ĠArrayList < User Model >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġctx . select From ( FR I END ). where ( FR I END . UID _ 1 . eq ( uid ). or ( FR I END . UID _ 2 . eq ( uid ))). fetch () ĊĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġresult ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġif Ġ( r . uid _ 1 Ġ== Ġuid ) Ġr . uid _ 2 Ġelse Ġr . uid _ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġacc Ġ= Ġctx . select From ( ACCOUNT ). where ( ACCOUNT . UID . eq ( target )). fetch (). stream (). findFirst (). orElse ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( acc Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Friend ( ctx , Ġuid , Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser Model () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . name Ġ= Ġacc . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . email Ġ= Ġacc . email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . profile Url Ġ= Ġacc . profile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . uid Ġ= Ġacc . uid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . link bit Address Ġ= Ġacc . address ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfriends . add ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfriends ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Routing Exception :: class ) ĊĠĠĠ Ġoverride Ġfun ĠgetUser ( ctx : ĠDSL Context , Ġuid : ĠString ): ĠUser Model Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġacc Ġ= Ġctx . select From ( ACCOUNT ). where ( ACCOUNT . UID . eq ( uid )). fetch (). stream (). findFirst (). orElse ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRouting Exception ( HttpStatusCode s . STATUS _ CODE _ NOT _ FOUND , Ġ" User Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser Model () ĊĠĠĠĠĠĠĠ Ġuser . name Ġ= Ġacc . name ĊĠĠĠĠĠĠĠ Ġuser . email Ġ= Ġacc . email ĊĠĠĠĠĠĠĠ Ġuser . profile Url Ġ= Ġacc . profile ĊĠĠĠĠĠĠĠ Ġuser . uid Ġ= Ġacc . uid ĊĠĠĠĠĠĠĠ Ġuser . link bit Address Ġ= Ġacc . address ĊĠĠĠĠĠĠĠ Ġreturn Ġuser ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Routing Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġadd Friend ( ctx : ĠDSL Context , Ġown Uid : ĠString , Ġuid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ctx . select From ( ACCOUNT ). where ( ACCOUNT . UID . eq ( uid )). fetch (). size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRouting Exception ( HttpStatusCode s . STATUS _ CODE _ NOT _ FOUND , Ġ" Target Ġuser Ġcan Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġctx . insert Into ( FR I END , ĠF RI END . UID _ 1 , ĠF RI END . UID _ 2 ). values ( own Uid , Ġuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRouting Exception ( HttpStatusCode s . STATUS _ CODE _ SERVER _ ERROR , Ġ" Update Ġfail ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Routing Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdelete Friend ( ctx : ĠDSL Context , Ġown Uid : ĠString , Ġuid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Record Ġ= Ġctx . select From ( ACCOUNT ). where ( ACCOUNT . UID . eq ( own Uid )). fetch (). stream (). findFirst (). orElse ( null ) ĊĠĠĠĠĠĠĠ Ġif Ġ( account Record Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRouting Exception ( HttpStatusCode s . STATUS _ CODE _ NOT _ FOUND , Ġ" Target Ġuser Ġcan Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġctx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete From ( FR I END ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( FR I END . UID _ 1 . equal ( own Uid ). and ( FR I END . UID _ 2 . equal ( uid ))). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRouting Exception ( HttpStatusCode s . STATUS _ CODE _ SERVER _ ERROR , Ġ" Update Ġfail ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Routing Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġsearch User ( ctx : ĠDSL Context , Ġtext : ĠString ): ĠList < User Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccounts Ġ= ĠArrayList < User Model >() ĊĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġctx . select From ( ACCOUNT . join ( WAL LET ). on ( ACCOUNT . UID . eq ( WAL LET . UID ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAC COUNT . ADDRESS . like ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. or ( WAL LET . ADDRESS . like ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. or ( WAL LET . CROSS ADDRESS . like ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. or ( ACCOUNT . EMAIL . like ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. or ( ACCOUNT . NAME . like ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). fetch () ĊĠĠĠĠĠĠĠ Ġrecords . forEach Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser Model () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . name Ġ= Ġr . getValue ( ACCOUNT . NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . email Ġ= Ġr . getValue ( ACCOUNT . EMAIL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . link bit Address Ġ= Ġr . getValue ( ACCOUNT . ADDRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . uid Ġ= Ġr . getValue ( ACCOUNT . UID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . profile Url Ġ= Ġr . getValue ( ACCOUNT . PROFILE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccounts . add ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaccounts ĊĠĠĠ Ġ} Ċ } Ċ