package Ġcom . so yle . stories . domain . writer Ċ Ċ import Ġcom . so yle . stories . domain . entities . Entity Ċ import Ġjava . util .* Ċ Ċ class ĠWriter ( ĊĠ Ġoverride Ġval Ġid : ĠId , ĊĠ Ġval Ġpreferences : ĠPreferences Ċ ) Ġ: ĠEntity < Writer . Id > Ġ{ ĊĊ ĉ constructor () Ġ: Ġthis ( Id (), ĠPreferences ()) ĊĊ ĉ private Ġfun Ġcopy ( ĊĉĠ Ġpreferences : ĠPreferences Ġ= Ġthis . preferences Ċ ĉ ) Ġ= ĠWriter ( id , Ġpreferences ) ĊĊ ĉ fun Ġwith Preference For ( preference Key : ĠString , Ġvalue : ĠAny ?) Ġ= Ġcopy ( preferences Ġ= Ġpreferences . with Preference ( preference Key , Ġvalue )) ĊĊ ĉ override Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ Ċĉ ĉ if Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue Ċĉ ĉ if Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĉ ĉ other Ġas ĠWriter ĊĊĉ ĉ if Ġ( id Ġ!= Ġother . id ) Ġreturn Ġfalse Ċĉ ĉ if Ġ( preferences Ġ!= Ġother . preferences ) Ġreturn Ġfalse ĊĊĉ ĉ return Ġtrue Ċ ĉ } ĊĊ ĉ override Ġfun ĠhashCode (): ĠInt Ġ{ Ċĉ ĉ var Ġresult Ġ= Ġid . hashCode () Ċĉ ĉ result Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġpreferences . hashCode () Ċĉ ĉ return Ġresult Ċ ĉ } ĊĊ ĉ override Ġfun ĠtoString (): ĠString Ġ{ Ċĉ ĉ return Ġ" Writer ( id =$ id , Ġpreferences =$ preferences )" Ċ ĉ } ĊĊĊ ĉ data Ġclass ĠId ( val Ġuuid : ĠUUID Ġ= ĠUUID . randomUUID ()) Ġ{ Ċĉ ĉ override Ġfun ĠtoString (): ĠString Ġ= Ġ" Writer ($ uuid )" Ċ ĉ } Ċ Ċ }