/* Ċ Ġ* ĠThis Ġprogram Ġhas Ġbeen Ġdeveloped Ġby Ġstudents Ġfrom Ġthe Ġb ache lor ĠComputer ĠScience Ġat ĠU tre cht ĠUniversity Ġwithin Ġthe ĠSoftware ĠProject Ġcourse . Ċ Ġ* ĠÂ© ĠCopyright ĠU tre cht ĠUniversity Ġ( Department Ġof ĠInformation Ġand ĠComputing ĠSci ences ) Ċ Ġ*/ Ċ package Ġcom . ap ex devs . backend . persistence Ċ Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . Domain Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . Domain Topic Ċ import Ġcom . ap ex devs . backend . persistence . database . entity . Topic Ċ import Ġcom . ap ex devs . backend . persistence . database . repository . Domain Topic Repository Ċ import Ġcom . ap ex devs . backend . persistence . database . repository . Topic Repository Ċ import Ġcom . ap ex devs . backend . persistence . exception . Topic NotFoundException Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . springframework . dao . Duplicate Key Exception Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ /** Ċ Ġ* ĠPerforms Ġtopic Ġoperations Ġon Ġthe Ġdatabase Ċ Ġ* Ġ@ param Ġdomain Topic Repository Ġ( aut ow ired ) Ċ Ġ* Ġ@ param Ġtopic Repository Ġ( aut ow ired ) Ċ Ġ*/ Ċ @ Component Ċ class ĠTopic Operation ( val Ġtopic Repository : ĠTopic Repository , Ġval Ġdomain Topic Repository : ĠDomain Topic Repository ) Ġ{ ĊĠĠĠ Ġ@ Throws ( Duplicate Key Exception :: class ) ĊĠĠĠ Ġfun Ġcreate Topic ( topic : ĠTopic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtopic Repository . insert ( topic ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠDuplicate Key Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDuplicate Key Exception (" This Ġtopic Ġalready Ġexists ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Duplicate Key Exception :: class ) ĊĠĠĠ Ġfun Ġrename Topic ( topic : ĠTopic , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtopic . name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtopic Repository . save ( topic ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠDuplicate Key Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDuplicate Key Exception (" This Ġtopic Ġalready Ġexists ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Topic NotFoundException :: class ) ĊĠĠĠ Ġfun Ġassign To Domain ( topic : ĠObjectId , Ġdomain : ĠDomain ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtopic To Connect Ġ= Ġtopic Repository . findById ( topic ) ĊĠĠĠĠĠĠĠ Ġif Ġ( topic To Connect . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTopic NotFoundException ( topic , Ġ" Topic Ġwith Ġid : Ġ$ topic Ġnot Ġfound !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdomain Topic Repository . insert ( Domain Topic ( domain . id , Ġtopic To Connect . get (). id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun Assign From Domain ( topic : ĠObjectId , Ġdomain : ĠDomain ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdomain Topic Repository . findBy Domain Id ( domain . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġdomain Topic : ĠDomain Topic Ġ-> Ġdomain Topic . topic Id Ġ== Ġtopic Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġdomain Topic : ĠDomain Topic Ġ-> Ġdomain Topic Repository . delete ById ( domain Topic . id ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe places Ġcurrent Ġtopics Ġwith Ġnew Ġtopics ĊĠĠĠĠ Ġ* Ġ@ param Ġdomain Ġthe Ġdomain Ġof Ġwhich Ġtopics Ġneed Ġto Ġbe Ġupdated ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Topics Ġlist Ġof ĠObjectId 's Ġof Ġthe Ġtopics Ġyou Ġwant Ġto Ġupdate Ġthe Ġdomain Ġwith ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Domain Topics ( domain : ĠDomain , Ġnew Topics : ĠList < ObjectId > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġnew Topics ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Topics Ġ= Ġdomain Topic Repository . findBy Domain Id ( domain . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcurrent Topics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Assign From Domain ( c . topic Id , Ġdomain ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġnew Topics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassign To Domain ( n , Ġdomain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ