package Ġcom . so yle . stories . workspace . use cases . close Project Ċ Ċ import Ġarrow . core . Either Ċ import Ġcom . so yle . stories . workspace . Project Not Open Ċ import Ġcom . so yle . stories . workspace . repositories . Workspace Repository Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠB rend an Ċ Ġ* ĠDate : Ġ 2 / 1 3 / 2 0 2 0 Ċ Ġ* ĠTime : Ġ 1 0 : 0 2 ĠPM Ċ Ġ*/ Ċ class ĠClose Project UseCase ( ĊĠĠĠ Ġprivate Ġval Ġworker Id : ĠString , ĊĠĠĠ Ġprivate Ġval Ġwork Space Repository : ĠWorkspace Repository Ċ ) Ġ: ĠClose Project Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinvoke ( projectId : ĠUUID , Ġoutput Port : ĠClose Project . Output Port ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworkspace Ġ= Ġwork Space Repository . get Work Space For Worker ( worker Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( workspace Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Port . receive Close Project Failure ( Project Not Open ( projectId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġopen Project With Id Ġ= Ġworkspace . open Projects . find Ġ{ Ġit . projectId . uuid Ġ== ĠprojectId Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( open Project With Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Port . receive Close Project Failure ( Project Not Open ( projectId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġremove Project Response Ġ= Ġworkspace . remove Project ( open Project With Id . projectId ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( remove Project Response Ġ! is ĠEither . Right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoutput Port . receive Close Project Failure (( remove Project Response Ġas ĠEither . Left ). a ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwork Space Repository . update Workspace ( remove Project Response . b ) ĊĊĠĠĠĠĠĠĠ Ġoutput Port . receive Close Project Response ( Close Project . Response Model ( projectId )) ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĊĠĠĠĠĠĠĠ Ġwork Space . close Project ( Project . Id ( projectId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Port . receive Close Project Failure ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork Space Repository . save Workspace ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Port . receive Close Project Response ( it . events ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ */ ĊĠĠĠ Ġ} Ċ Ċ }