package Ġcom . now ak . demo . database Ċ Ċ import Ġcom . now ak . demo . models . login . User Ċ import Ġjava . sql .* Ċ import Ġjava . time .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠUser Database () Ġ{ ĊĊĠĠĠ Ġprivate Ġfun ĠgetUser From ResultSet ( resultSet : ResultSet ): ĠUser { ĊĠĠĠĠĠĠĠ Ġreturn ĠUser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . getInt (" id "). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . getString (" username "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . getString (" passwd "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . getString (" email "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . getDate (" date _ of _ birth "). to LocalDate (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . getDate (" createdAt "). to LocalDate ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠfindAll Users (): ĠArrayList < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser List Ġ= ĠArrayList < User >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠresultSet Ġ= ĠDatabase Query Utils . createQuery (" SELECT Ġid , username , passwd , Ġemail , date _ of _ birth , ĠcreatedAt ĠFROM Ġusers ", Ġempty Map ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! resultSet . next ()) Ġreturn Ġempty List < User >() Ġas ĠArrayList < User > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser List . add ( getUser From ResultSet ( resultSet )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} while ( resultSet . next ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser List ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind User By Username ( username : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠresultSet : ĠResultSet ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet Ġ= ĠDatabase Query Utils . createQuery (" SELECT Ġid , Ġusername , Ġpasswd , Ġemail , Ġdate _ of _ birth , ĠcreatedAt ĠFROM Ġusers ĠWHERE Ġusername Ġ= Ġ?", Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetUser From ResultSet ( resultSet ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind User ById ( userId : ĠLong ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠresultSet : ĠResultSet ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Names Ġ= Ġmap Of ( 1 Ġto Ġ" id ", Ġ 2 Ġto Ġ" username ", Ġ 3 Ġto Ġ" passwd ", Ġ 4 Ġto Ġ" email ", Ġ 5 Ġto Ġ" date _ of _ birth ", Ġ 6 Ġto Ġ" createdAt ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet Ġ= ĠDatabase Query Utils . createQuery (" SELECT Ġid , Ġusername , Ġpasswd , Ġemail , Ġdate _ of _ birth , ĠcreatedAt ĠFROM Ġusers ĠWHERE Ġid Ġ= Ġ?", Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetUser From ResultSet ( resultSet ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck If Account Exists ( username : ĠString , Ġpassword : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠresultSet : ĠResultSet ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet Ġ= ĠDatabase Query Utils . createQuery (" SELECT Ġid , passwd ĠFROM Ġusers ĠWHERE Ġusername = Ġ?", Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠresultSet . getInt (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhashed Password Ġ= ĠresultSet . getString (" passwd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġverify Password ( password , Ġhashed Password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Username Email Availability ( username : ĠString ? Ġ= Ġnull , Ġemail : ĠString ? Ġ= Ġnull ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠresultSet : ĠResultSet ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( username Ġ!= Ġnull Ġ&& Ġemail Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet Ġ= ĠDatabase Query Utils . createQuery (" SELECT Ġid ĠFROM Ġusers ĠWHERE Ġusername = Ġ?", Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( username Ġ== Ġnull Ġ&& Ġemail Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġemail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet Ġ= ĠDatabase Query Utils . createQuery (" SELECT Ġid ĠFROM Ġusers ĠWHERE Ġemail = Ġ?", Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( username Ġ!= Ġnull Ġ&& Ġemail Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġusername , Ġ 2 Ġto Ġemail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet Ġ= ĠDatabase Query Utils . createQuery (" SELECT Ġid ĠFROM Ġusers ĠWHERE Ġusername = Ġ? ĠOR Ġemail = Ġ?", Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! resultSet . next ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠresultSet . getInt (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( id Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert New User ( username : ĠString , Ġpassword : ĠString , Ġemail : ĠString , Ġbirth Date : ĠLocalDate ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġusername , Ġ 2 Ġto Ġhash Password ( password ), Ġ 3 Ġto Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġto Ġconvert ToDate ( birth Date ), Ġ 5 Ġto Ġconvert ToDate ( LocalDate . now ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDatabase Query Utils . create Update Type Query (" INSERT ĠINTO Ġusers ( username , Ġpasswd , Ġemail , Ġdate _ of _ birth , ĠcreatedAt ) ĠVALUES ( ?,?, ?,?, ? )", Ġparams ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate User ( userId : ĠLong , Ġnew Username : ĠString ? Ġ= Ġnull , Ġnew Email : ĠString ? Ġ= Ġnull , Ġnew Birth Date : ĠLocalDate ? Ġ= Ġnull , Ġnew Password : ĠString ? Ġ= Ġnull ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrows Affected Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Username Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġnew Username , Ġ 2 Ġto ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Affected Ġ= ĠDatabase Query Utils . create Update Type Query (" UPDATE Ġusers ĠSET Ġusername = Ġ? ĠWHERE Ġid = Ġ?", Ġparams ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Email Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġnew Email , Ġ 2 Ġto ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Affected Ġ= ĠDatabase Query Utils . create Update Type Query (" UPDATE Ġusers ĠSET Ġemail = Ġ? ĠWHERE Ġid = Ġ?", Ġparams ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Birth Date Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġconvert ToDate ( new Birth Date ), Ġ 2 Ġto ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Affected Ġ= ĠDatabase Query Utils . create Update Type Query (" UPDATE Ġusers ĠSET Ġdate _ of _ birth = Ġ? ĠWHERE Ġid = Ġ?", Ġparams ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Password Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġhash Password ( new Password ), Ġ 2 Ġto ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Affected Ġ= ĠDatabase Query Utils . create Update Type Query (" UPDATE Ġusers ĠSET Ġpasswd = Ġ? ĠWHERE Ġid = Ġ?", Ġparams ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rows Affected Ġ> Ġ 0 ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Password By UserId ( userId : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar ĠresultSet : ĠResultSet ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet Ġ= ĠDatabase Query Utils . createQuery (" SELECT Ġpasswd ĠFROM Ġusers ĠWHERE Ġid = Ġ?", Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠresultSet . getString (" passwd ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġdelete User By Username ( username : ĠString ) Ġ: ĠBoolean { ĊĠĠĠĠĠĠĠ Ġvar Ġrows Affected Ġ= 0 ; ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( 1 Ġto Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrows Affected Ġ= ĠDatabase Query Utils . create Update Type Query (" DELETE ĠFROM Ġusers ĠWHERE Ġusername = Ġ?", Ġparams ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( rows Affected > 0 ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠSQLException (" Cannot Ġextract Ġdata : ĠCause : Ġ${ e . cause } Ġ; ĠMessage : Ġ${ e . message }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }