package Ġcom . notify . api . subscription . service Ċ Ċ import Ġcom . notify . api . subscription . domain . Red dit Channel Info Ċ import Ġcom . notify . api . subscription . domain . Sub scribed Red dit Channel Ċ import Ġcom . notify . api . subscription . repository . Channel Subscription Repository Ċ import Ġcom . notify . api . subscription . repository . User Red dit Channel Mapping Repository Ċ import Ġcom . notify . common . domain . Channel Id Ċ import Ġcom . notify . common . domain . Red dit Channel Ċ import Ġcom . notify . common . domain . UserId Ċ import Ġcom . notify . common . domain . User Red dit Channel Mapping Ċ import Ġcom . notify . databases . model . tables . records . Sub scribed Red dit Channel Record Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġjava . util . UUID Ċ Ċ @ Service Ċ class ĠChannel Subscription Service ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġchannel Subscription Repository : ĠChannel Subscription Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġuser Red dit Channel Mapping Repository : ĠUser Red dit Channel Mapping Repository Ċ ) Ġ{ ĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġadd Channel Subscription ForUser ( reddit Channel Info : ĠRed dit Channel Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel Subscription Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Channel If Exist ( reddit Channel Info . reddit Channel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġrecord : ĠSub scribed Red dit Channel Record Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubscribed Red dit Channel Ġ= Ġrecord . to Sub scribed Red dit Channel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Red dit Channel Mapping Repository . save ( User Red dit Channel Mapping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( UUID . fromString ( reddit Channel Info . userId )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribed Red dit Channel . channelId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. orElse Get Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubscribed Red dit Channel Ġ= Ġre dd it Channel Info . to Sub scribed Red dit Channel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Subscription Repository . save ( subscribed Red dit Channel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Red dit Channel Mapping Repository . save ( User Red dit Channel Mapping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUserId ( UUID . fromString ( reddit Channel Info . userId )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribed Red dit Channel . channelId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġupdate Channel Subscription ForUser ( reddit Channel Info : ĠRed dit Channel Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Red dit Channel Mapping Repository . delete Old Mapping ( reddit Channel Info . userId ) ĊĠĠĠĠĠĠĠ Ġadd Channel Subscription ForUser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRed dit Channel Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre dd it Channel Info . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre dd it Channel Info . reddit Channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠRed dit Channel Info . to Sub scribed Red dit Channel () Ġ= ĊĠĠĠĠĠĠĠ ĠSub scribed Red dit Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Id ( UUID . randomUUID ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRed dit Channel ( this . reddit Channel ) ĊĠĠĠĠĠĠĠ Ġ) Ċ Ċ private Ġfun ĠSub scribed Red dit Channel Record . to Sub scribed Red dit Channel () Ġ= ĊĠĠĠĠĠĠĠ ĠSub scribed Red dit Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Id ( UUID . fromString ( this . channelId )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRed dit Channel ( this . reddit Channel ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊ