package Ġat . cp ick l . g ads u . t reatment Ċ Ċ import Ġat . cp ick l . g ads u . global . G ads u Exception Ċ import Ġat . cp ick l . g ads u . client . Client Ċ import Ġat . cp ick l . g ads u . persistence . Jdbc x Ċ import Ġat . cp ick l . g ads u . persistence . ensure Not Pers isted Ċ import Ġat . cp ick l . g ads u . persistence . ensure Pers isted Ċ import Ġat . cp ick l . g ads u . persistence . to Sql Timestamp Ċ import Ġat . cp ick l . g ads u . report . multi protocol . Multi Protocol Jdbc Repository Ċ import Ġat . cp ick l . g ads u . service . Id Generator Ċ import Ġat . cp ick l . g ads u . service . minutes Ċ import Ġat . cp ick l . g ads u . service . to Minutes Ċ import Ġat . cp ick l . g ads u . t cm . Mer id ian Row Mapper Ċ import Ġat . cp ick l . g ads u . t cm . model . Mer id ian Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . jdbc . core . Row Mapper Ċ import Ġjavax . inject . Inject ĊĊ Ċ interface ĠT reatment Repository Ġ{ ĊĊĠĠĠ Ġ// Ġordered Ġby Ġnumber ĠDESC ĊĠĠĠ Ġfun ĠfindAll For ( client : ĠClient ): ĠList < T reatment > ĊĊĠĠĠ Ġfun ĠfindAll For Raw ( clientId : ĠString ): ĠList < T reatment > ĊĠĠĠ Ġfun Ġfind First For ( clientId : ĠString ): ĠT reatment ? ĊĠĠĠ Ġfun Ġfind Last For ( clientId : ĠString ): ĠT reatment ? ĊĊĠĠĠ Ġfun Ġinsert ( t reatment : ĠT reatment ): ĠT reatment ĊĠĠĠ Ġfun Ġupdate ( t reatment : ĠT reatment ) ĊĊĠĠĠ Ġfun Ġdelete ( t reatment : ĠT reatment ) ĊĠĠĠ Ġfun Ġcount All For ( client : ĠClient ): ĠInt ĊĊĠĠĠ Ġfun Ġcalculate Max Number Used ( client : ĠClient ): ĠInt ? ĊĊĠĠĠ Ġ// Ġused Ġfor Ġthe Ġtreatment Ġprogress Ġbar ĊĠĠĠ Ġ// Ġ!!! Ġin Ġfuture Ġexclude Ġthose Ġalready Ġused Ġin Ġprotocol Ġ!!! ĊĠĠĠ Ġfun Ġcount All Non Proto co li zed (): ĠInt Ċ Ċ } Ċ Ċ class ĠT reatment Jdbc Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġjdbc x : ĠJdbc x , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġid Generator : ĠId Generator Ċ ) Ġ: ĠT reatment Repository Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTABLE Ġ= Ġ" t reatment " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll For ( client : ĠClient ): ĠList < T reatment > Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . ensure Pers isted () ĊĠĠĠĠĠĠĠ Ġreturn ĠfindAll For Raw ( client . id !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll For Raw ( clientId : ĠString ): ĠList < T reatment > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġbecause Ġof ĠORDER Ġclause , Ġnot Ġneeded : Ġtreat ments . sort () ĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc x . query (" SELECT Ġ* ĠFROM Ġ$ TABLE ĠWHERE Ġid _ client Ġ= Ġ? ĠORDER ĠBY Ġnumber ĠDESC ", ĠarrayOf ( clientId ), ĠT reatment . ROW _ MAP PER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind First For ( clientId : ĠString ): ĠT reatment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc x . query Maybe Single ( T reatment . ROW _ MAP PER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT ĠTOP Ġ 1 Ġ* ĠFROM Ġ$ TABLE ĠWHERE Ġid _ client Ġ= Ġ? ĠORDER ĠBY Ġdate ĠASC ", ĠarrayOf ( clientId )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Last For ( clientId : ĠString ): ĠT reatment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc x . query Maybe Single ( T reatment . ROW _ MAP PER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT ĠTOP Ġ 1 Ġ* ĠFROM Ġ$ TABLE ĠWHERE Ġid _ client Ġ= Ġ? ĠORDER ĠBY Ġdate ĠDESC ", ĠarrayOf ( clientId )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( t reatment : ĠT reatment ): ĠT reatment Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" insert ( t reatment ={ })", Ġtreatment ) ĊĊĠĠĠĠĠĠĠ Ġtreatment . ensure Not Pers isted () ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Id Ġ= Ġid Generator . generate () ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" S ENSE LESS _ COMP AR IS ON ") Ġ// Ġyes , Ġit Ġcan Ġindeed Ġbe Ġthat Ġway ! ĊĠĠĠĠĠĠĠ Ġif Ġ( new Id Ġ=== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠG ads u Exception (" Id Generator Ġdid Ġreturn Ġnull , Ġalthough Ġcompile Ġfor bids . ĠAre Ġyou Ġtesting Ġand Ġh av ent Ġsetup Ġa Ġproper Ġmock Ġmaybe ?! Ġ( id Generator =$ id Generator )") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġjdbc x . update (" INSERT ĠINTO Ġ$ TABLE Ġ(" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id , Ġid _ client , Ġcreated , Ġnumber , Ġdate , Ġduration In Min , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" about Dis com fort , Ġabout Di agnosis , Ġabout Content , Ġabout Feedback , Ġabout Home work , Ġabout Up coming , Ġnote ) ĠVALUES Ġ(" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ?, Ġ?, Ġ?, Ġ?, Ġ?, Ġ?, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ?, Ġ?, Ġ?, Ġ?, Ġ?, Ġ?, Ġ? )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Id , Ġtreatment . clientId , Ġtreatment . created . to Sql Timestamp (), Ġtreatment . number , Ġtreatment . date . to Sql Timestamp (), Ġtreatment . duration . to Minutes (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtreatment . about Dis com fort , Ġtreatment . about Di agnosis , Ġtreatment . about Content , Ġtreatment . about Feedback , Ġtreatment . about Home work , Ġtreatment . about Up coming , Ġtreatment . note ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtreatment . copy ( id Ġ= Ġnew Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( t reatment : ĠT reatment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" update ( t reatment ={ })", Ġtreatment ) ĊĠĠĠĠĠĠĠ Ġtreatment . ensure Pers isted () ĊĊĠĠĠĠĠĠĠ Ġjdbc x . update Single (" UPDATE Ġ$ TABLE ĠSET Ġnumber Ġ= Ġ?, Ġdate Ġ= Ġ?, Ġduration In Min Ġ= Ġ?, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" about Dis com fort Ġ= Ġ?, Ġabout Di agnosis Ġ= Ġ?, Ġabout Content Ġ= Ġ?, Ġabout Feedback Ġ= Ġ?, Ġabout Home work Ġ= Ġ?, Ġabout Up coming Ġ= Ġ?, Ġnote Ġ= Ġ? ĠWHERE Ġid Ġ= Ġ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtreatment . number , Ġtreatment . date . to Sql Timestamp (), Ġtreatment . duration . to Minutes (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtreatment . about Dis com fort , Ġtreatment . about Di agnosis , Ġtreatment . about Content , Ġtreatment . about Feedback , Ġtreatment . about Home work , Ġtreatment . about Up coming , Ġtreatment . note , Ġtreatment . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( t reatment : ĠT reatment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" delete ( t reatment ={ })", Ġtreatment ) ĊĠĠĠĠĠĠĠ Ġtreatment . ensure Pers isted () ĊĊĠĠĠĠĠĠĠ Ġjdbc x . delete Single (" DELETE ĠFROM Ġ$ TABLE ĠWHERE Ġid Ġ= Ġ?", Ġtreatment . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcount All For ( client : ĠClient ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" count All For ( client ={ })", Ġclient ) ĊĠĠĠĠĠĠĠ Ġclient . ensure Pers isted () ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġjdbc x . count ( TABLE , ĠarrayOf ( client . id ), Ġ" WHERE Ġid _ client Ġ= Ġ? ") ĊĠĠĠĠĠĠĠ Ġlog . trace (" count Ġresult : Ġ{}", Ġcount ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcount All Non Proto co li zed (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" count All Non Proto co li zed () ") Ċ // ĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= Ġjdbc x . count ( TABLE ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġproto co li zed Ġ= Ġjdbc x . query For Object < Int >(" SELECT ĠCOUNT (*) ĠFROM Ġ$ TABLE ĠJOIN Ġ${ Multi Protocol Jdbc Repository . TABLE _ KEYS } ĠON Ġ($ TABLE . id Ġ= Ġ${ Multi Protocol Jdbc Repository . TABLE _ KEYS }. id _ t reatment )", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Array (), ĠRow Mapper Ġ{ Ġrs , Ġi Ġ-> Ġrs . getInt ( 1 ) Ġ}) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġtotal Ġ- Ġproto co li zed ĊĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc x . query For Object < Int >(" SELECT ĠCOUNT (*) ĠFROM Ġ$ TABLE ĠWHERE Ġid ĠNOT ĠIN Ġ( SELECT ĠDISTINCT ( id _ t reatment ) ĠFROM Ġ${ Multi Protocol Jdbc Repository . TABLE _ KEYS })", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Array (), ĠRow Mapper Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . getInt ( 1 ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Max Number Used ( client : ĠClient ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" calculate Max Number Used ( client )") ĊĊĠĠĠĠĠĠĠ Ġclient . ensure Pers isted () ĊĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġjdbc x . query Maybe Single ( T reatment . ROW _ MAP PER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġ* ĠFROM Ġ$ TABLE ĠWHERE Ġid _ client Ġ= Ġ? ĠORDER ĠBY Ġnumber ĠDESC ĠLIMIT Ġ 1 ", ĠarrayOf ( client . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġfound . number ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Suppress (" UNUSED ") Ċ val ĠT reatment . Companion . ROW _ MAP PER : ĠRow Mapper < T reatment > ĊĠĠĠ Ġget () Ġ= ĠRow Mapper Ġ{ Ġrs , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠT reatment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" id _ client "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime ( rs . getTimestamp (" created ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getInt (" number "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime ( rs . getTimestamp (" date ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminutes ( rs . getInt (" duration In Min ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" about Dis com fort "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" about Di agnosis "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" about Content "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" about Feedback "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" about Home work "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" about Up coming "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" note "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), Ġ// Ġthe Ġ` dyn Tre ats ` Ġare Ġloaded Ġlater Ġon Ġseparately ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () Ġ// Ġso Ġare Ġthe Ġ` tre ated Mer idi ans ` ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊ Ċ interface ĠT reatment Mer idi ans Repository Ġ{ ĊĠĠĠ Ġfun Ġfind ( t reatment Id : ĠString ): ĠList < Mer id ian > ĊĠĠĠ Ġfun Ġinsert ( t reatment Id : ĠString , Ġtreated Mer idi ans : ĠList < Mer id ian >) ĊĠĠĠ Ġfun Ġdelete ( t reatment Id : ĠString ) Ċ } Ċ Ċ class ĠT reatment Mer idi ans Jdbc Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġjdbc x : ĠJdbc x Ċ ) Ġ: ĠT reatment Mer idi ans Repository Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTABLE Ġ= Ġ" t reatment _ mer id ian " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind ( t reatment Id : ĠString ): ĠList < Mer id ian > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc x . query (" SELECT Ġmer id ian ĠFROM Ġ$ TABLE ĠWHERE Ġid _ t reatment Ġ= Ġ?", ĠarrayOf ( t reatment Id ), ĠMer id ian Row Mapper ()). sorted () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( t reatment Id : ĠString , Ġtreated Mer idi ans : ĠList < Mer id ian >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtreated Mer idi ans . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc x . update (" INSERT ĠINTO Ġ$ TABLE Ġ( id _ t reatment , Ġmer id ian ) ĠVALUES Ġ( ?, Ġ? )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtreatment Id , Ġit . sql Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( t reatment Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjdbc x . update (" DELETE ĠFROM Ġ$ TABLE ĠWHERE Ġid _ t reatment Ġ= Ġ?", Ġtreatment Id ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ