package Ġtime limit . main Ċ Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Controller Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjava . lang . Exception Ċ import Ġjava . util .* Ċ Ċ @ Controller Ċ @ RequestMapping ( path Ġ= Ġ["/ project UserRole "]) Ċ class ĠProject UserRole Controller Ġ{ ĊĠĠĠ Ġdata Ġclass ĠCreate Result ( val Ġstatus : ĠBoolean ) ĊĠĠĠ Ġdata Ġclass ĠDelete Result ( val Ġstatus : ĠBoolean ) ĊĠĠĠ Ġdata Ġclass ĠEdit Result ( val Ġstatus : ĠBoolean ) ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Project UserRole Controller :: class . java ) ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproject UserRole Repository : ĠProject UserRole Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Repository : ĠUser Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproject Repository : ĠProject Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrole Repository : ĠRole Repository ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotification Repository : ĠNotification Repository ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Add ( project : ĠProject , Ġuser : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnotify ( user , Ġ" You Ġhave Ġbeen Ġadded Ġto Ġthe Ġ'${ project . fullName }' Ġproject .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Remove ( project : ĠProject , Ġuser : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnotify ( user , Ġ" You Ġhave Ġbeen Ġremoved Ġfrom Ġthe Ġ'${ project . fullName }' Ġproject .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify ( user : ĠUser , Ġtext : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= ĠNotification () ĊĠĠĠĠĠĠĠ Ġnotification . is Read Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġnotification . text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġnotification . user Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Repository . save ( notification ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" error Ġsaving Ġnotification ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ( path Ġ= Ġ["/ create ById "]) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġcreate ById ( ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" access _ token ") ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" user _ id ") ĠuserId : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" project _ id ") ĠprojectId : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" role _ id ") Ġrole Id : ĠInt ĊĠĠĠ Ġ): ĠCreate Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġuser Repository . findBy AccessToken ( accessToken ) Ġ?: Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sender . valid Until Ġ< ĠDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsender Role Ġ= Ġsender . projects . find Ġ{ Ġit . project . id Ġ== ĠprojectId Ġ} ?. role Ġ?: Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! sender Role . check Permission ( Permission . MANAGE _ TEAM )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Optional Ġ= Ġuser Repository . findById ( userId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( user Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Optional . get () ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Optional Ġ= Ġproject Repository . findById ( projectId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( project Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject Optional . get () ĊĊĠĠĠĠĠĠĠ Ġval Ġproject UserRole Ġ= ĠProject UserRole () ĊĠĠĠĠĠĠĠ Ġproject UserRole . user Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġproject UserRole . project Ġ= Ġproject ĊĠĠĠĠĠĠĠ Ġval Ġrole Optional Ġ= Ġrole Repository . findById ( role Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( role Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject UserRole . role Ġ= Ġrole Optional . get () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! project UserRole . role . is Subset ( sender Role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject UserRole Repository . save ( project UserRole ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify Add ( project , Ġuser ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ( path Ġ= Ġ["/ create By Email "]) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġcreate By Email ( ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" access _ token ") ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" email ") Ġemail : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" project _ id ") ĠprojectId : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" role _ id ") Ġrole Id : ĠInt ĊĠĠĠ Ġ): ĠCreate Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġuser Repository . findBy AccessToken ( accessToken ) Ġ?: Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sender . valid Until Ġ< ĠDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsender Role Ġ= Ġsender . projects . find Ġ{ Ġit . project . id Ġ== ĠprojectId Ġ} ?. role Ġ?: Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! sender Role . check Permission ( Permission . MANAGE _ TEAM )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Repository . findBy Email ( email ) Ġ?: Ġreturn ĠCreate Result ( false ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Optional Ġ= Ġproject Repository . findById ( projectId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( project Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject Optional . get () ĊĊĠĠĠĠĠĠĠ Ġval Ġproject UserRole Ġ= ĠProject UserRole () ĊĠĠĠĠĠĠĠ Ġproject UserRole . user Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġproject UserRole . project Ġ= Ġproject ĊĠĠĠĠĠĠĠ Ġval Ġrole Optional Ġ= Ġrole Repository . findById ( role Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( role Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject UserRole . role Ġ= Ġrole Optional . get () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! project UserRole . role . is Subset ( sender Role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject UserRole Repository . save ( project UserRole ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify Add ( project , Ġuser ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ( path Ġ= Ġ["/ create By Screen Name "]) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġcreate By Screen Name ( ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" access _ token ") ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" screen _ name ") Ġscreen Name : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" project _ id ") ĠprojectId : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" role _ id ") Ġrole Id : ĠInt ĊĠĠĠ Ġ): ĠCreate Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġuser Repository . findBy AccessToken ( accessToken ) Ġ?: Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sender . valid Until Ġ< ĠDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsender Role Ġ= Ġsender . projects . find Ġ{ Ġit . project . id Ġ== ĠprojectId Ġ} ?. role Ġ?: Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! sender Role . check Permission ( Permission . MANAGE _ TEAM )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Repository . findBy Screen Name ( screen Name ) Ġ?: Ġreturn ĠCreate Result ( false ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Optional Ġ= Ġproject Repository . findById ( projectId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( project Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject Optional . get () ĊĊĠĠĠĠĠĠĠ Ġval Ġproject UserRole Ġ= ĠProject UserRole () ĊĠĠĠĠĠĠĠ Ġproject UserRole . user Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġproject UserRole . project Ġ= Ġproject ĊĠĠĠĠĠĠĠ Ġval Ġrole Optional Ġ= Ġrole Repository . findById ( role Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( role Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject UserRole . role Ġ= Ġrole Optional . get () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! project UserRole . role . is Subset ( sender Role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject UserRole Repository . save ( project UserRole ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify Add ( project , Ġuser ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCreate Result ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( path Ġ= Ġ["/ delete ById "]) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġdelete ById ( ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" access _ token ") ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" user _ id ") ĠuserId : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" project _ id ") ĠprojectId : ĠInt ĊĠĠĠ Ġ): ĠDelete Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġuser Repository . findBy AccessToken ( accessToken ) Ġ?: Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sender . valid Until Ġ< ĠDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsender Role Ġ= Ġsender . projects . find Ġ{ Ġit . project . id Ġ== ĠprojectId Ġ} ?. role Ġ?: Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! sender Role . check Permission ( Permission . MANAGE _ TEAM )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproject UserRole Ġ= Ġproject UserRole Repository . findBy ProjectId And UserId ( projectId , ĠuserId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠDelete Result ( false ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! project UserRole . role . is Subset ( sender Role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject UserRole Repository . delete ById ( project UserRole . id ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify Remove ( project UserRole . project , Ġproject UserRole . user ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( path Ġ= Ġ["/ delete By Email "]) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġdelete By Email ( ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" access _ token ") ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" email ") Ġemail : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" project _ id ") ĠprojectId : ĠInt ĊĠĠĠ Ġ): ĠDelete Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġuser Repository . findBy AccessToken ( accessToken ) Ġ?: Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sender . valid Until Ġ< ĠDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsender Role Ġ= Ġsender . projects . find Ġ{ Ġit . project . id Ġ== ĠprojectId Ġ} ?. role Ġ?: Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! sender Role . check Permission ( Permission . MANAGE _ TEAM )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Repository . findBy Email ( email ) Ġ?: Ġreturn ĠDelete Result ( false ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproject UserRole Ġ= Ġproject UserRole Repository . findBy ProjectId And UserId ( projectId , Ġuser . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠDelete Result ( false ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! project UserRole . role . is Subset ( sender Role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject UserRole Repository . delete ById ( project UserRole . id ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify Remove ( project UserRole . project , Ġproject UserRole . user ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( path Ġ= Ġ["/ delete By Screen Name "]) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġdelete By Screen Name ( ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" access _ token ") ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" screen _ name ") Ġscreen Name : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" project _ id ") ĠprojectId : ĠInt ĊĠĠĠ Ġ): ĠDelete Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġuser Repository . findBy AccessToken ( accessToken ) Ġ?: Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sender . valid Until Ġ< ĠDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsender Role Ġ= Ġsender . projects . find Ġ{ Ġit . project . id Ġ== ĠprojectId Ġ} ?. role Ġ?: Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! sender Role . check Permission ( Permission . MANAGE _ TEAM )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Repository . findBy Screen Name ( screen Name ) Ġ?: Ġreturn ĠDelete Result ( false ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproject UserRole Ġ= Ġproject UserRole Repository . findBy ProjectId And UserId ( projectId , Ġuser . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠDelete Result ( false ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! project UserRole . role . is Subset ( sender Role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject UserRole Repository . delete ById ( project UserRole . id ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify Remove ( project UserRole . project , Ġproject UserRole . user ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDelete Result ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ( path Ġ= Ġ["/ edit "]) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġedit ( ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" access _ token ") ĠaccessToken : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" user _ id ") ĠuserId : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ RequestParam ( value Ġ= Ġ" role _ id ") Ġrole Id : ĠInt ĊĠĠĠ Ġ): ĠEdit Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġuser Repository . findBy AccessToken ( accessToken ) Ġ?: Ġreturn ĠEdit Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ( sender . valid Until Ġ< ĠDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEdit Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrole Optional Ġ= Ġrole Repository . findById ( role Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( role Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEdit Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrole Ġ= Ġrole Optional . get () ĊĊĠĠĠĠĠĠĠ Ġval Ġsender Role Ġ= Ġsender . projects . find Ġ{ Ġit . project . id Ġ== Ġrole . project . id Ġ} ?. role Ġ?: Ġreturn ĠEdit Result ( false ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! sender Role . check Permission ( Permission . MANAGE _ TEAM )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEdit Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Optional Ġ= Ġuser Repository . findById ( userId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( user Optional . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEdit Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Optional . get () ĊĊĠĠĠĠĠĠĠ Ġval Ġproject UserRole Ġ= Ġuser . projects . find Ġ{ Ġit . project . id Ġ== Ġrole . project . id Ġ} Ġ?: Ġreturn ĠEdit Result ( false ) ĊĠĠĠĠĠĠĠ Ġproject UserRole . role Ġ= Ġrole ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject UserRole Repository . save ( project UserRole ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEdit Result ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠEdit Result ( true ) ĊĠĠĠ Ġ} Ċ }