package Ġcom . die gop arra . ve gg ie . auth . utils Ċ Ċ import Ġcom . die gop arra . ve gg ie . core . kotlin . Either Ċ import Ġcom . die gop arra . ve gg ie . core . kotlin . validate Email Ċ import Ġtim ber . log . Tim ber Ċ Ċ /* Ċ object ĠFields Ġ{ ĊĠĠĠ Ġconst Ġval ĠE MAIL Ġ= Ġ" email " ĊĠĠĠ Ġconst Ġval ĠPASSWORD Ġ= Ġ" password " ĊĠĠĠ Ġconst Ġval ĠNAME Ġ= Ġ" name " ĊĠĠĠ Ġconst Ġval ĠPH ONE _ NUMBER Ġ= Ġ" phone _ number " ĊĠĠĠ Ġconst Ġval ĠADDRESS Ġ= Ġ" address " Ċ } Ċ Ċ object ĠText Input Validation Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpossible Fields Ġ= ĠlistOf ( Fields . EMAIL , ĠFields . PASSWORD , ĠFields . NAME , ĠFields . PASSWORD , ĠFields . ADDRESS ) ĊĠĠĠ Ġfun Ġvalidate NotEmpty ( str : ĠString , Ġfield : ĠString ): ĠEither < Auth Failure . Wrong Input , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! possible Fields . contains ( field )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ("$ field Ġis Ġnot Ġin Ġ${ possible Fields . join ToString (", Ġ" )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( str . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( Auth Failure . Wrong Input . Empty ( field Ġ= Ġfield , Ġinput Ġ= Ġstr )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ( str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfor Email ( email : ĠString ): ĠEither < Auth Failure . Wrong Input , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġemail Field Ġ= ĠFields . EMAIL ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( email . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( Auth Failure . Wrong Input . Empty ( field Ġ= Ġemail Field , Ġinput Ġ= Ġemail )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! validate Email ( email )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( Auth Failure . Wrong Input . Invalid ( field Ġ= Ġemail Field , Ġinput Ġ= Ġemail )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ( email ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfor Password ( password : ĠString ): ĠEither < Auth Failure . Wrong Input , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpassword Field Ġ= ĠFields . PASSWORD ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( password . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( Auth Failure . Wrong Input . Empty ( field Ġ= Ġpassword Field , Ġinput Ġ= Ġpassword )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( password . length Ġ< Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Failure . Wrong Input . Short ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġpassword Field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ= Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Length Ġ= Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ( password ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfor Name ( name : ĠString ): ĠEither < Auth Failure . Wrong Input , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( name . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( Auth Failure . Wrong Input . Empty ( field Ġ= ĠFields . NAME , Ġinput Ġ= Ġname )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ( name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfor PhoneNumber ( phoneNumber : ĠString ): ĠEither < Auth Failure . Wrong Input , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" phoneNumber Ġ= Ġ$ phoneNumber , ĠphoneNumber Length Ġ= Ġ${ phoneNumber . length }") ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( phoneNumber . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( Auth Failure . Wrong Input . Empty ( field Ġ= ĠFields . PHONE _ NUMBER , Ġinput Ġ= ĠphoneNumber )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ!( phoneNumber . startsWith ("+ 5 7 Ġ 3 ") Ġ|| ĠphoneNumber . startsWith ("+ 5 7 3 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠphoneNumber . length Ġ!= Ġ 1 3 ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( Auth Failure . Wrong Input . Invalid ( field Ġ= ĠphoneNumber , Ġinput Ġ= ĠphoneNumber )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ( phoneNumber ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfor Address ( address : ĠString ): ĠEither < Auth Failure . Wrong Input , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( address . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left ( Auth Failure . Wrong Input . Empty ( field Ġ= ĠFields . ADDRESS , Ġinput Ġ= Ġaddress )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ( address ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }*/ Ċ