package Ġcom . k re ait . slack . broker . broker Ċ Ċ import Ġcom . k re ait . slack . api . contract . jackson . Slack Command Ċ import Ġcom . k re ait . slack . broker . configuration . Command Ċ import Ġcom . k re ait . slack . broker . metrics . Command Metrics Collector Ċ import Ġcom . k re ait . slack . broker . receiver . Mismatch Command Receiver Ċ import Ġcom . k re ait . slack . broker . receiver . Slash Command Receiver Ċ import Ġcom . k re ait . slack . broker . store . team . Team Store Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . web . bind . annotation . PostMapping Ċ import Ġorg . springframework . web . bind . annotation . Request Header Ċ import Ġorg . springframework . web . bind . annotation . ResponseStatus Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ Ċ /** Ċ Ġ* ĠCommand Broker Ġthat Ġforwards Ġincoming Ġ[ Slack Command ] s Ġto Ġall Ġ[ Slash Command Receiver ] s Ċ Ġ*/ Ċ @ SuppressWarnings (" de te kt : Too Generic Exception Ca ught ") Ċ @ RestController Ċ class ĠCommand Broker Ġconstructor ( private Ġval Ġslack Command Re ceiv ers : ĠList < Slash Command Receiver >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġteam Store : ĠTeam Store , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmismatch Command Receiver : ĠMis match Command Receiver ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmetrics Collector : ĠCommand Metrics Collector ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLoggerFactory . getLogger ( Command Broker :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEndpoint Ġthat Ġreceives Ġthe Ġcommands ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ ResponseStatus ( HttpStatus . OK ) ĊĠĠĠ Ġ@ PostMapping ("/ commands ", Ġconsume s Ġ= Ġ[" application / x - www - form - urlencoded "], Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ]) ĊĠĠĠ Ġfun Ġreceive Command (@ Command Ġslack Command : ĠSlack Command , Ġ@ Request Header Ġheaders : ĠHttp Headers ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . metrics Collector ?. commands Received () ĊĊĠĠĠĠĠĠĠ Ġval Ġteam Ġ= Ġthis . team Store . findById ( slack Command . team Id ) ĊĠĠĠĠĠĠĠ Ġslack Command Re ceiv ers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . supports Command ( slack Command ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . order () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Empty Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . metrics Collector ?. receiver Mismatch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmismatch Command Receiver ?. on Receive Slash Command ( slack Command , Ġheaders , Ġteam ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġbroker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . metrics Collector ?. receiver Executed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroker . on Receive Slash Command ( slack Command , Ġheaders , Ġteam ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . metrics Collector ?. receiver Execution Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( broker . should Throw Exception ( e )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ