package Ġd sm . service . announcement . core . use case . announcement Ċ Ċ import Ġd sm . service . announcement . core . domain . entity . Account Ċ import Ġd sm . service . announcement . core . domain . entity . Anno uncement Ċ import Ġd sm . service . announcement . core . domain . entity . enums . Account Type Ċ import Ġd sm . service . announcement . core . domain . exception . Server Exception Ċ import Ġd sm . service . announcement . core . domain . exception . Un Authorized Exception Ċ import Ġd sm . service . announcement . core . domain . repository . Anno uncement Repository Ċ import Ġd sm . service . announcement . core . use case . UseCase Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠGet Previous Anno uncement UseCase ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġanno uncement Repository : ĠAnno uncement Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġget Account UseCase : ĠGet Account UseCase Ċ ): ĠUse Case < Get Previous Anno uncement UseCase . Input Values , ĠGet Previous Anno uncement UseCase . Output Values >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġexecute ( input : ĠInput Values ): ĠOutput Values Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOutput Values ( get Previous Anno uncement ( input )) ĊĊĠĠĠ Ġprivate Ġfun Ġget Previous Anno uncement ( input : ĠInput Values ): ĠAnno uncement ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Number Ġ= Ġanno uncement Repository . find Top By OrderBy Number Asc ()?. number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġnumber : ĠLong Ġ= Ġinput . announcement . number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠServer Exception ( message Ġ= Ġ" Anno uncement Ġnumber Ġisn 't Ġexists .") ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( number Ġ> Ġmin Number ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumber Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanno uncement Ġ= Ġanno uncement Repository . findBy Number And Type ( number , Ġinput . announcement . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanno uncement ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . announcement . type Ġ== Ġ" club " Ġ-> Ġreturn Ġanno uncement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . announcement . type Ġ== Ġ" school " Ġ&& Ġcheck Account ( announcement , Ġinput ) Ġ-> Ġreturn Ġanno uncement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Account ( announcement : ĠAnno uncement , Ġinput : ĠInput Values ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġget Account ( input ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( account . type Ġ!= ĠAccount Type . ST UD ENT ) Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( announcement . target Class Ġ!= Ġnull Ġ&& Ġanno uncement . target Grade Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanno uncement . target Grade !!. contains ( account . grade . toString ()) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanno uncement . target Class !!. contains ( account . group . toString ()) ĊĠĠĠĠĠĠĠ Ġelse Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Account ( input : ĠInput Values ): ĠAccount Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Account UseCase . execute ( Get Account UseCase . Input Values ( input . account Uuid )). account ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠUn Authorized Exception () ĊĊĠĠĠ Ġclass ĠInput Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Uuid : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanno uncement : ĠAnno uncement ĊĠĠĠ Ġ): ĠUse Case . Input Values ĊĊĠĠĠ Ġclass ĠOutput Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanno uncement : ĠAnno uncement ? ĊĠĠĠ Ġ): ĠUse Case . Output Values Ċ Ċ }