/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAlex i ĠBre Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġtech . alex ib . y aba . server . service Ċ Ċ import Ġarrow . core . Either Ċ import Ġarrow . core . comp ut ations . either Ċ import Ġarrow . core . left Ċ import Ġarrow . core . right Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġtech . alex ib . y aba . domain . institution . Inst itution Ċ import Ġtech . alex ib . y aba . domain . institution . Inst itution Error Ċ import Ġtech . alex ib . y aba . domain . institution . Inst itution Id Ċ import Ġtech . alex ib . y aba . server . dto . to Domain Ċ import Ġtech . alex ib . y aba . server . dto . to Entity Ċ import Ġtech . alex ib . y aba . server . pl aid . Pl aid Service Ċ import Ġtech . alex ib . y aba . server . repository . Inst itution Repository Ċ Ċ interface ĠInst itution Service Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġget OrCreate ( institution Id : ĠInst itution Id ): ĠEither < Inst itution Error , ĠInst itution > Ċ } Ċ Ċ @ Service Ċ class ĠInst itution ServiceImpl ( ĊĠĠĠ Ġprivate Ġval Ġinstitution Repository : ĠInst itution Repository , ĊĠĠĠ Ġprivate Ġval Ġpl aid Service : ĠP la id Service Ċ ) Ġ: ĠInst itution Service Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget OrCreate ( institution Id : ĠInst itution Id ): ĠEither < Inst itution Error , ĠInst itution > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Ġ= Ġget From Db ById ( institution Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġeither Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexisting ?. right ()?. bind () Ġ?: Ġget From Pl aid ById ( institution Id ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Inst itution ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. bind () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget From Db ById ( institution Id : ĠInst itution Id ): ĠInst itution ? Ġ= ĊĠĠĠĠĠĠĠ Ġinstitution Repository . findBy Pl aid Inst itution Id ( institution Id . value )?. to Domain () ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget From Pl aid ById ( institution Id : ĠInst itution Id ): ĊĠĠĠĠĠĠĠ ĠEither < Inst itution Error . Invalid Inst itution Id , ĠInst itution > Ġ= ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpl aid Service . get Inst itution ( institution Id . value ). institution . to Domain (). right () ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ ĠInst itution Error . Invalid Inst itution Id . left () Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsave Inst itution ( institution : ĠInst itution ): ĠInst itution Ġ= ĊĠĠĠĠĠĠĠ Ġinstitution Repository . insert ( institution . to Entity ()). to Domain () Ċ } Ċ