package Ġcom . notify . api . user . service Ċ Ċ import Ġcom . notify . api . exception . User DoesNotExist Exception Ċ import Ġcom . notify . api . user . domain . UserDetails Response Ċ import Ġcom . notify . api . user . domain . User Information Ċ import Ġcom . notify . api . user . domain . UserProfile Ċ import Ġcom . notify . api . user . repository . UserProfile Repository Ċ import Ġcom . notify . common . Notification Status Ċ import Ġcom . notify . common . domain . Email Id Ċ import Ġcom . notify . common . domain . UserId Ċ import Ġcom . notify . databases . model . tables . records . UserProfile Record Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util . UUID Ċ Ċ @ Service Ċ class ĠUser Profile Service ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġuser Profile Repository : ĠUser Profile Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġfun ĠgetUser Detail ( email Id : ĠString ): ĠUser Details Response Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġuser Details Response : ĠUser Details Response ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġuser Profile Repository . fetch By Email Id ( email Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġrecord : ĠUser Profile Record Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Profile Ġ= Ġrecord . to UserProfile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Details Response Ġ= ĠUser Details Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . userId . value . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . email Id . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . notification Status . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. orElse Throw Ġ{ ĠUser DoesNotExist Exception (" User Ġwith Ġemail Ġid Ġ$ email Id ĠDoes n 't Ġexist Ġ") Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Details Response !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate UserProfile ( user Information : ĠUser Information ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Profile Repository . save ( user Information . to UserProfile ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġenable Subscription ( userId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Profile Repository . fetch By UserId ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġrecord : ĠUser Profile Record Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated UserProfile Ġ= Ġget Updated Notification Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . to UserProfile (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Status . SUB SCR IB ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile Repository . save ( updated UserProfile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. orElse Throw Ġ{ ĠUser DoesNotExist Exception (" User Ġ$ userId ĠDoes n 't Ġexist Ġ") Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġdisable Subscription ( userId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Profile Repository . fetch By UserId ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġrecord : ĠUser Profile Record Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated UserProfile Ġ= Ġget Updated Notification Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . to UserProfile (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Status . UN SUB SCR IB ED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile Repository . save ( updated UserProfile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. orElse Throw Ġ{ ĠUser DoesNotExist Exception (" User Ġ$ userId ĠDoes n 't Ġexist Ġ") Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠUser Information . to UserProfile () Ġ= ĊĠĠĠĠĠĠĠ ĠUser Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( UUID . randomUUID ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fullName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmail Id ( this . email Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . country Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . notification Status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġ Ġget Ġthe ĠUTC ĠTime Zone Ġof ĠUser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠ Ġ) Ċ Ċ private Ġfun ĠUser Profile Record . to UserProfile (): ĠUser Profile Ġ= ĊĠĠĠĠĠĠĠ ĠUser Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( UUID . fromString ( this . userId )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fullName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmail Id ( this . email Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . country , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( notification Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠNotification Status . SUB SCR IB ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNotification Status . UN SUB SCR IB ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Ts Utc . to LocalDateTime (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Email Sent Ts Utc . to LocalDateTime () ĊĠĠĠĠĠĠĠ Ġ) Ċ Ċ private Ġfun Ġget Updated Notification Model ( user Profile : ĠUser Profile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Status : ĠNotification Status ) Ġ= ĊĠĠĠĠĠĠĠ ĠUser Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . fullName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . email Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . country Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . notification Ts Utc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Profile . last Email Sent Ts Utc ĊĠĠĠĠĠĠĠ Ġ) ĊĊ