package Ġdomain . entity . user Ċ Ċ import Ġdomain . Email Invalid Exception Ċ import Ġdomain . Password Invalid Exception Ċ import Ġdomain . entity . Entity Ċ import Ġdomain . entity . Value Class Ċ Ċ data Ġclass ĠUser ( ĊĠĠĠ Ġoverride Ġval Ġid : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġval Ġemail : ĠEmail , ĊĠĠĠ Ġval Ġauthor ities : ĠList < Author ities >, ĊĠĠĠ Ġval Ġpassword : ĠPassword Hash , Ċ ) Ġ: ĠEntity Ċ Ċ enum Ġclass ĠAuthor ities Ġ{ ĊĠĠĠ ĠUSER Ċ } Ċ Ċ data Ġclass ĠEmail ( override Ġval Ġvalue : ĠString ) Ġ: ĠValue Class < String > Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! value . contains ('@ ')) Ġthrow ĠEmail Invalid Exception () ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠPassword ( override Ġval Ġvalue : ĠString ) Ġ: ĠValue Class < String > Ċ Ċ class ĠNew Password ( value : ĠString ) Ġ: ĠPassword ( value ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! value . matches ( Regex ("^ (? = .*? [ A - Z ]) (? = .*? [ a - z ]) (? = .*? [ 0 - 9 ]) (? = .*? [# ?! @\ $ %^ & *- ]). { 8 , }\ $ "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPassword Invalid Exception () ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠPassword Hash ( override Ġval Ġvalue : ĠString ) Ġ: ĠValue Class < String > Ċ