package Ġcom . d team . li zing . backend . kotlin čĊč Ċ import Ġch . qos . log back . core . jor an . spi . Console Target . find ByName č Ċ import Ġcom . d team . li zing . backend . kotlin . entities . Privilege č Ċ import Ġcom . d team . li zing . backend . kotlin . entities . Role č Ċ import Ġcom . d team . li zing . backend . kotlin . entities . User č Ċ import Ġcom . d team . li zing . backend . kotlin . repositories . Privilege Repository č Ċ import Ġcom . d team . li zing . backend . kotlin . repositories . Role Repository č Ċ import Ġcom . d team . li zing . backend . kotlin . repositories . UserRepository č Ċ import Ġorg . springframework . beans . factory . annotation . Autowired č Ċ import Ġorg . springframework . context . Application Listener č Ċ import Ġorg . springframework . context . event . Context Ref reshed Event č Ċ import Ġorg . springframework . security . crypto . password . Password Encoder č Ċ import Ġorg . springframework . stereotype . Component č Ċ import Ġjava . util .* č Ċ import Ġjavax . transaction . Transactional čĊčĊč Ċ @ Component č Ċ class ĠSetup DataLoader Ġ: ĠApplication Listener < Context Ref reshed Event ?> Ġ{ čĊĠĠĠ Ġvar Ġalready Setup Ġ= Ġfalse čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository ? Ġ= Ġnull čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġprivate Ġval Ġrole Repository : ĠRole Repository ? Ġ= Ġnull čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġprivate Ġval Ġprivilege Repository : ĠPriv ilege Repository ? Ġ= Ġnull čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġprivate Ġval Ġpassword Encoder : ĠPassword Encoder ? Ġ= Ġnull čĊčĊĠĠĠ Ġ@ Transactional čĊĠĠĠ Ġoverride Ġfun Ġon Application Event ( event : ĠContext Ref reshed Event ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( already Setup ) Ġreturn čĊĠĠĠĠĠĠĠ Ġval Ġread Privilege Ġ= Ġcreate Privilege If NotFound (" READ _ PRIV ILE GE ") čĊĠĠĠĠĠĠĠ Ġval Ġwrite Privilege Ġ= Ġcreate Privilege If NotFound (" WRITE _ PRIV ILE GE ") čĊĠĠĠĠĠĠĠ Ġval Ġadmin Privileges : ĠList < Privilege ?> Ġ= ĠlistOf ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Privilege , Ġwrite Privilege ) čĊĠĠĠĠĠĠĠ Ġcreate Role If NotFound (" ROLE _ ADMIN ", Ġadmin Privileges ) čĊĠĠĠĠĠĠĠ Ġcreate Role If NotFound (" ROLE _ USER ", ĠlistOf ( read Privilege )) čĊĠĠĠĠĠĠĠ Ġval Ġadmin Role : ĠRole ? Ġ= Ġrole Repository !!. find ByName (" ROLE _ ADMIN ") čĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser (" User ĠName ", Ġ" First ĠName ", Ġ" Last ĠName ", Ġ" test @ test . com ", Ġpassword Encoder !!. encode (" test "), Ġtrue ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( admin Role Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . roles Ġ= ĠlistOf ( admin Role ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġuser Repository !!. save ( user ) čĊĠĠĠĠĠĠĠ Ġalready Setup Ġ= Ġtrue čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Transactional čĊĠĠĠ Ġfun Ġcreate Privilege If NotFound ( name : ĠString ?): ĠPriv ilege Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġprivilege : ĠPriv ilege ? Ġ= Ġprivilege Repository !!. find ByName ( name !! ) čĊĠĠĠĠĠĠĠ Ġif Ġ( privilege Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivilege Ġ= ĠPriv ilege ( name ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivilege Repository . save ( privilege ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġprivilege čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Transactional čĊĠĠĠ Ġfun Ġcreate Role If NotFound ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString ?, Ġprivileges : ĠCollection < Privilege ?> ?): ĠRole Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġrole : ĠRole ? Ġ= Ġrole Repository !!. find ByName ( name !! ) čĊĠĠĠĠĠĠĠ Ġif Ġ( role Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Ġ= ĠRole ( name ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole . privilege Ġ= Ġprivileges Ġas ĠCollection < Privilege >? čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Repository . save ( role ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġrole čĊĠĠĠ Ġ} č Ċ }