package Ġio . videos . application . domains . identity Ċ Ċ import Ġorg . ax on framework . command handling . CommandHandler Ċ import Ġorg . ax on framework . events ourcing . Event S ourcing Handler Ċ import Ġorg . ax on framework . mode lling . command . Aggregate Identifier Ċ import Ġorg . ax on framework . mode lling . command . Aggregate Lifecycle Ċ import Ġorg . ax on framework . spring . stereotype . Aggregate Ċ import Ġjava . util . UUID Ċ Ċ @ Aggregate Ċ class ĠUser Aggregate Ġ{ ĊĊĠĠĠ Ġ@ Aggregate Identifier ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠuserId : ĠUUID ĊĊĠĠĠ Ġconstructor () ĊĊĠĠĠ Ġ@ CommandHandler ĊĠĠĠ Ġconstructor ( cmd : ĠRegister User , Ġusers : ĠUsers Repository ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( users . exists ( cmd . email )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrejected Event ( cmd ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister ( cmd ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ CommandHandler ĊĠĠĠ Ġfun Ġhandle ( cmd : ĠSignal Login Success ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAggregate Lifecycle . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Succeeded ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġcmd . email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ CommandHandler ĊĠĠĠ Ġfun Ġhandle ( cmd : ĠConfirm Registration Email Sent ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAggregate Lifecycle . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegistration Email Sent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġcmd . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Id Ġ= Ġcmd . email Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ CommandHandler ĊĠĠĠ Ġfun Ġhandle ( cmd : ĠConfirm Registration Email Failed ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAggregate Lifecycle . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegistration Email Send Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġcmd . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Id Ġ= Ġcmd . email Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister ( cmd : ĠRegister User ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAggregate Lifecycle . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Registered ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġcmd . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġcmd . email , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Hash Ġ= Ġcmd . password Hash ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrejected Event ( cmd : ĠRegister User ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAggregate Lifecycle . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegistration Rejected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġcmd . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġcmd . email , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Hash Ġ= Ġcmd . password Hash , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= Ġ" email Ġtaken " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Event S ourcing Handler ĊĠĠĠ Ġfun Ġon ( e : ĠUser Registered ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . userId Ġ= Ġe . userId ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Event S ourcing Handler ĊĠĠĠ Ġfun Ġon ( e : ĠRegistration Rejected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . userId Ġ= Ġe . userId ĊĠĠĠ Ġ} Ċ }