package Ġcom . k re ait . bots . agile . core . stand up . answer Ċ Ċ import Ġcom . k re ait . bots . agile . core . stand up . question . Question Service Ċ import Ġcom . k re ait . bots . agile . domain . common . data . Stand up Ċ import Ġcom . k re ait . bots . agile . domain . common . data . Stand up Repository Ċ import Ġcom . k re ait . bots . agile . domain . common . service . Random Answer Service Ċ import Ġcom . k re ait . bots . agile . domain . slack . stand up . Broadcast ing Service Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . data . mongodb . core . query . Update Ċ import Ġorg . springframework . stereotype . Service Ċ Ċ @ Service Ċ class ĠStand up Answer Receiver Ġ@ Autowired Ġconstructor ( private Ġval Ġstand up Repository : ĠStand up Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġbroadcast ing Service : ĠBroadcast ing Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġquestion Service : ĠQuestion Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġrandom Answer Service : ĠRandom Answer Service ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġin comm ing Ġanswers . ĠCall Ġthis Ġmethod Ġin Ġslack - agile - bot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle Answer ( userId : ĠString , Ġanswer : ĠString , Ġevent Id : ĠString , Ġevent Time : ĠInt , Ġteam Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Stand up . Pred icates ( stand up Repository ). can Save Answer ( userId Ġ= ĠuserId , Ġanswer Ġ= ĠStand up . Answer ( text Ġ= Ġanswer , Ġevent Id Ġ= Ġevent Id , Ġevent Time Ġ= Ġevent Time ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . stand up Repository . exists ( with Status Ġ= Ġset Of ( Stand up . Status . OPEN ), Ġwith User Ids Ġ= Ġset Of ( userId ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstand ups Ġ= Ġthis . stand up Repository . find ( with Status Ġ= Ġset Of ( Stand up . Status . OPEN ), Ġwith User Ids Ġ= Ġset Of ( userId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stand ups . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMultiple Open Stand ups Exception ( stand ups ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstand up Ġ= Ġstand ups [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stand up Repository . update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Ids Ġ= Ġset Of ( stand up . id !! ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ġ= ĠUpdate (). push ( Stand up . AN SW ERS , ĠStand up . Answer ( text Ġ= Ġanswer , Ġevent Id Ġ= Ġevent Id , Ġevent Time Ġ= Ġevent Time )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . question Service . send Questions ( stand up . userId ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . broadcast ing Service . broadcast ( userId Ġ= Ġstand up . userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Answer Service . handle Message ( userId , Ġanswer , Ġteam Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIt Ġis Ġnot Ġpossible Ġthat Ġthere Ġare Ġmore Ġthan Ġ 1 Ġstand ups Ġopen Ċ Ġ*/ Ċ class ĠMultiple Open Stand ups Exception ( stand ups : ĠList < Stand up >) Ġ: ĠRuntimeException ( stand ups . join ToString Ġ{ Ġ", Ġ" Ġ}) Ċ