package Ġorg . w code . database . sql . dao Ċ Ċ import Ġorg . jetbrains . ex posed . sql . Database Ċ import Ġorg . jetbrains . ex posed . sql . select Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . w code . core . Cryptography . decrypt Ċ import Ġorg . w code . core . Cryptography . encrypt Ċ import Ġorg . w code . core . Security . make Token Ċ import Ġorg . w code . database . sql . core . Base Dao Ċ import Ġorg . w code . database . sql . schema . User Schema Ċ import Ġorg . w code . database . sql . tables . User Table Ċ import Ġorg . w code . dto . Auth DTO Ċ import Ġorg . w code . dto . Author DTO Ċ import Ġorg . w code . dto . User DTO Ċ import Ġjava . util .* Ċ Ċ class ĠUser DAO ( private Ġval Ġdb : ĠDatabase ) Ġ: ĠBase Dao < User DTO > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinsert ( instance : ĠUser DTO ): ĠResult < User DTO > Ġ= Ġtransaction ( db ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm User DTO Ġ= ĠUser Schema . new ( UUID . fromString ( instance . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . email Ġ= Ġinstance . email ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . password Ġ= Ġinstance . password . encrypt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( m User DTO . to DTO ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist ( page : ĠInt , Ġsize : ĠInt , Ġall : ĠBoolean ): ĠResult < List < User DTO >> Ġ= Ġtransaction ( db ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm Users Ġ= ĠUser Schema . all () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! all ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Users Ġ= Ġm Users . limit ( size , Ġoffset Ġ= Ġ( page Ġ- Ġ 1 ). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( m Users . toList (). map Ġ{ Ġit . to DTO () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ById ( id : ĠString ): ĠResult < User DTO > Ġ= Ġtransaction ( db ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm User Ġ= ĠUser Schema . findById ( UUID . fromString ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m User Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( m User . to DTO ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( NoSuch ElementException ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( id : ĠString ): ĠResult < Boolean > Ġ= Ġtransaction ( db ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm User Ġ= ĠUser Schema . findById ( UUID . fromString ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m User Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm User . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( NoSuch ElementException ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( instance : ĠUser DTO ): ĠResult < User DTO > Ġ= Ġtransaction ( db ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Schema . findById ( UUID . fromString ( instance . id )) ?. let Ġ{ Ġcurrent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . password Ġ= Ġinstance . password . encrypt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( current . to DTO ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠResult . failure ( NoSuch ElementException ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcount (): ĠInt Ġ= Ġtransaction ( db ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUser Schema . all (). count (). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlogin ( username : ĠString , Ġpassword : ĠString ): ĠResult < Auth DTO > Ġ= Ġtransaction ( db ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Schema . find Ġ{ ĠUser Table . email Ġeq Ġusername Ġ}. first (). let Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( password Ġ== Ġuser . password . decrypt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauth Ġ= ĠAuth DTO ( user . to DTO (). make Token ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . success ( auth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( Exception (" Auth Ġerror ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġuser Exist ( id : ĠString ): ĠBoolean Ġ= Ġtransaction ( db ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm User Ġ= ĠUser Schema . findById ( UUID . fromString ( id )) ĊĠĠĠĠĠĠĠ Ġm User Ġ!= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ