/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAlex i ĠBre Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ @ file : Use Serial izers ( UUID Serializer :: class ) Ċ Ċ package Ġtech . alex ib . y aba . domain . user Ċ Ċ import Ġkotlinx . serialization . Context ual Ċ import Ġkotlinx . serialization . Serial Name Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Use Serial izers Ċ import Ġtech . alex ib . y aba . domain . common . UUID Serializer Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . util . UUID Ċ Ċ @ Serializable Ċ data Ġclass ĠUser ( ĊĠĠĠ Ġval Ġid : ĠUserId Ġ= ĠUserId ( UUID . randomUUID ()), ĊĠĠĠ Ġval Ġemail : ĠString , ĊĠĠĠ Ġval Ġpassword : ĠString , ĊĠĠĠ Ġval Ġtoken : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġrole : ĠUser Role Ġ= ĠUser Role . USER , ĊĠĠĠ Ġval Ġactive : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġ@ Context ual ĊĠĠĠ Ġ@ Serial Name (" created _ at ") ĊĠĠĠ Ġval ĠcreatedAt : ĠOffset DateTime Ġ= ĠOffset DateTime . now (), ĊĠĠĠ Ġ@ Context ual ĊĠĠĠ Ġ@ Serial Name (" updated _ at ") ĊĠĠĠ Ġval ĠupdatedAt : ĠOffset DateTime Ġ= ĠOffset DateTime . now (), Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ċ } Ċ Ċ @ Serializable Ċ @ Jvm Inline Ċ value Ġclass ĠUserId ( val Ġvalue : ĠUUID ) Ċ Ċ @ Serializable Ċ @ Jvm Inline Ċ value Ġclass ĠEmail ( val Ġvalue : ĠString ) Ċ Ċ fun ĠEmail . isValid (): ĠBoolean Ġ= Ġthis . value . isNotEmpty () Ġ&& Ġthis . value . matches ( ĊĠĠĠ ĠRegex ("^ [_ A - Za - z 0 - 9 - \\ + ]+ ( \\. [_ A - Za - z 0 - 9 - ]+ )* @ [ A - Za - z 0 - 9 - ]+ (\\ .[ A - Za - z 0 - 9 ]+ )*( \\ .[ A - Za - z ]{ 2 , }) $ ") Ċ ) Ċ Ċ @ Serializable Ċ enum Ġclass ĠUser Role Ġ{ ĊĠĠĠ ĠUSER , ĊĠĠĠ ĠADMIN Ċ } Ċ Ċ fun ĠUUID . userId () Ġ= ĠUserId ( this ) Ċ Ċ data Ġclass ĠRegister User Command ( ĊĠĠĠ Ġval Ġdata : ĠRegister UserRequest Ċ ) Ċ Ċ @ Serializable Ċ data Ġclass ĠLogin Request ( ĊĠĠĠ Ġval Ġemail : ĠString , ĊĠĠĠ Ġval Ġpassword : ĠString Ċ ) Ċ Ċ data Ġclass ĠValid User Registration ( ĊĠĠĠ Ġval Ġid : ĠUserId , ĊĠĠĠ Ġval Ġemail : ĠEmail , ĊĠĠĠ Ġval Ġpassword : ĠString , ĊĠĠĠ Ġval Ġtoken : ĠString Ċ ) Ċ