package Ġcom . k re ait . bots . agile . domain . common . data Ċ Ċ import Ġcom . k re ait . bots . agile . domain . common . act uator . Array Count Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . cache . annotation . Cache able Ċ import Ġorg . springframework . data . mongodb . core . Mongo Template Ċ import Ġorg . springframework . data . mongodb . core . aggregation . Aggregation Ċ import Ġorg . springframework . data . mongodb . core . query . Criteria Ċ import Ġorg . springframework . data . mongodb . core . query . Criteria . where Ċ import Ġorg . springframework . data . mongodb . core . query . Query Ċ import Ġorg . springframework . data . mongodb . core . query . Update Ċ import Ġorg . springframework . data . mongodb . repository . Mongo Repository Ċ import Ġjava . time . DayOfWeek Ċ import Ġjava . time . Local Time ĊĊ Ċ interface ĠStand up Definition Repository Ġ: ĠMongo Repository < Stand up Definition , ĠString >, ĠStand up Definition Repository Custom Ċ Ċ interface ĠStand up Definition Repository Custom Ġ{ ĊĊĠĠĠ Ġfun Ġfind ( ĊĠĠĠĠĠĠĠ Ġwith Name : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Days : ĠList < DayOfWeek >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Time : ĠLocal Time ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Broadcast Channels : ĠSet < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Questions : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Sub scribed User Ids : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwithout Sub cri bed User Ids : ĠSet < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Status : ĠSet < Stand up Definition . Status >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwithout Status : ĠSet < Stand up Definition . Status >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Team Id : ĠString , ĊĠĠĠĠĠĠĠ Ġwith UserId : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠList < Stand up Definition > ĊĊĠĠĠ Ġfun Ġupdate ( ĊĠĠĠĠĠĠĠ Ġwith Name : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Days : ĠList < DayOfWeek >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Time : ĠLocal Time ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Broadcast Channels : ĠSet < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Questions : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Sub scribed User Ids : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwithout Sub cri bed User Ids : ĠSet < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Status : ĠSet < Stand up Definition . Status >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwithout Status : ĠSet < Stand up Definition . Status >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Team Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith UserId : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġwith Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġupdate : ĠUpdate ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun ĠfindAll Active ( team Id : ĠString ): ĠList < Stand up Definition > ĊĊĠĠĠ Ġfun Ġfind ById ( id : ĠString ?, Ġteam Id : ĠString , Ġstatus : ĠSet < Stand up Definition . Status >? Ġ= Ġnull ): ĠStand up Definition ĊĊĠĠĠ Ġfun Ġexists ById ( stand up Definition Id : ĠString , Ġteam Id : ĠString ): ĠBoolean ĊĠĠĠ Ġfun Ġfind Ac ross All Work spaces ( ĊĠĠĠĠĠĠĠ Ġstand up Name : ĠString ? Ġ= Ġnull , Ġstand up Days : ĠList < DayOfWeek >? Ġ= Ġnull , Ġstand up Time : ĠLocal Time ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstand up Broadcast Channel Id : ĠSet < String >? Ġ= Ġnull , Ġstand up Questions : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstand up Sub scribed User Ids : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstatus : ĠSet < Stand up Definition . Status >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠList < Stand up Definition > ĊĊĠĠĠ Ġfun Ġget Member Count (): ĠString ĊĠĠĠ Ġfun Ġget Active Count (): ĠString ĊĊĠĠĠ Ġfun Ġadd UserId ( stand up Definition Id : ĠString , ĠuserId : ĠString ) Ċ } Ċ Ċ open Ġclass ĠStand up Definition Repository Impl Ġconstructor (@ Autowired Ġprivate Ġval Ġtemplate : ĠMongo Template ) Ġ: ĊĠĠĠ ĠStand up Definition Repository Custom Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġupdate ( ĊĠĠĠĠĠĠĠ Ġwith Name : ĠString ?, Ġwith Days : ĠList < DayOfWeek > ?, Ġwith Time : ĠLocal Time ?, ĊĠĠĠĠĠĠĠ Ġwith Broadcast Channels : ĠSet < String > ?, Ġwith Questions : ĠList < String > ?, ĊĠĠĠĠĠĠĠ Ġwith Sub scribed User Ids : ĠList < String > ?, Ġwithout Sub cri bed User Ids : ĠSet < String > ?, ĊĠĠĠĠĠĠĠ Ġwith Status : ĠSet < Stand up Definition . Status > ?, Ġwithout Status : ĠSet < Stand up Definition . Status > ?, ĊĠĠĠĠĠĠĠ Ġwith Team Id : ĠString ?, Ġwith UserId : ĠString ?, Ġwith Id : ĠString ?, Ġupdate : ĠUpdate ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= Ġcriteria Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Name Ġ= Ġwith Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Days Ġ= Ġwith Days , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Time Ġ= Ġwith Time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Broadcast Channel Ids Ġ= Ġwith Broadcast Channels , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Questions Ġ= Ġwith Questions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Sub scribed User Ids Ġ= Ġwith Sub scribed User Ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot In Sub scribed User Ids Ġ= Ġwithout Sub cri bed User Ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Status Ġ= Ġwith Status , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo est Not Have Status Ġ= Ġwithout Status , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam Id Ġ= Ġwith Team Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġwith UserId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġwith Id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtemplate . update Multi ( Query . query ( criteria ), Ġupdate , ĠStand up Definition :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd UserId ( stand up Definition Id : ĠString , ĠuserId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstand up ById Ġ= ĠQuery . query ( Criteria . where ("_ id "). ` is `( stand up Definition Id )) ĊĠĠĠĠĠĠĠ Ġval Ġadd UserId ToList Ġ= ĠUpdate (). push ( Stand up Definition . SUB SCR IB ED _ USER _ IDS ). value ( userId ) ĊĠĠĠĠĠĠĠ Ġtemplate . update First ( stand up ById , Ġadd UserId ToList , ĠStand up Definition :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Cache able ( cache Names Ġ= Ġ[ Stand up Definition . STAND UP _ DEFINITION _ COUNT ], Ġsync Ġ= Ġtrue ) ĊĠĠĠ Ġoverride Ġfun Ġget Active Count (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= Ġcriteria Of ( has Status Ġ= Ġset Of ( Stand up Definition . Status . ACTIVE )) ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . count ( Query . query ( criteria ), ĠStand up Definition :: class . java ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Cache able ( cache Names Ġ= Ġ[ Stand up Definition . MEMBER _ COLLECTION ], Ġsync Ġ= Ġtrue ) ĊĠĠĠ Ġoverride Ġfun Ġget Member Count (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= ĠCriteria () ĊĠĠĠĠĠĠĠ Ġcriteria . and ( Stand up Definition . STATUS ). ` is `( Stand up Definition . Status . ACTIVE ) ĊĠĠĠĠĠĠĠ Ġval Ġagg Ġ= ĠAg gregation . new Aggregation ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStand up Definition :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAg gregation . match ( criteria ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAg gregation . project () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and (" subscribed User Ids ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" count ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġtemplate . aggregate ( agg , ĠArray Count :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresults . mapped Results . map Ġ{ Ġit . count Ġ}. sum (). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexists ById ( stand up Definition Id : ĠString , Ġteam Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria Of ( team Id Ġ= Ġteam Id , Ġid Ġ= Ġstand up Definition Id , Ġhas Status Ġ= Ġset Of ( Stand up Definition . Status . ACTIVE )) ĊĠĠĠĠĠĠĠ Ġreturn Ġ! template . find ( Query . query ( criteria ), ĠStand up Definition :: class . java ). isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Ac ross All Work spaces ( ĊĠĠĠĠĠĠĠ Ġstand up Name : ĠString ?, Ġstand up Days : ĠList < DayOfWeek > ?, Ġstand up Time : ĠLocal Time ?, ĊĠĠĠĠĠĠĠ Ġstand up Broadcast Channel Id : ĠSet < String > ?, Ġstand up Questions : ĠList < String > ?, ĊĠĠĠĠĠĠĠ Ġstand up Sub scribed User Ids : ĠList < String > ?, ĊĠĠĠĠĠĠĠ Ġstatus : ĠSet < Stand up Definition . Status >? ĊĠĠĠ Ġ): ĠList < Stand up Definition > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= Ġcriteria Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Name Ġ= Ġstand up Name , Ġstand up Days Ġ= Ġstand up Days , Ġstand up Time Ġ= Ġstand up Time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Status Ġ= Ġstatus , Ġstand up Broadcast Channel Ids Ġ= Ġstand up Broadcast Channel Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Sub scribed User Ids Ġ= Ġstand up Sub scribed User Ids , Ġstand up Questions Ġ= Ġstand up Questions ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . find ( Query . query ( criteria ), ĠStand up Definition :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind ById ( id : ĠString ?, Ġteam Id : ĠString , Ġstatus : ĠSet < Stand up Definition . Status >? ): ĠStand up Definition Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= Ġcriteria Of ( team Id Ġ= Ġteam Id , Ġid Ġ= Ġid , Ġhas Status Ġ= Ġstatus ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . find ( Query . query ( criteria ), ĠStand up Definition :: class . java ). first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll Active ( team Id : ĠString ): ĠList < Stand up Definition > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= Ġcriteria Of ( team Id Ġ= Ġteam Id , Ġhas Status Ġ= Ġset Of ( Stand up Definition . Status . ACTIVE )) ĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . find ( Query . query ( criteria ), ĠStand up Definition :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind ( ĊĠĠĠĠĠĠĠ Ġwith Name : ĠString ?, Ġwith Days : ĠList < DayOfWeek > ?, Ġwith Time : ĠLocal Time ?, ĊĠĠĠĠĠĠĠ Ġwith Broadcast Channels : ĠSet < String > ?, Ġwith Questions : ĠList < String > ?, ĊĠĠĠĠĠĠĠ Ġwith Sub scribed User Ids : ĠList < String > ?, Ġwithout Sub cri bed User Ids : ĠSet < String > ?, ĊĠĠĠĠĠĠĠ Ġwith Status : ĠSet < Stand up Definition . Status > ?, Ġwithout Status : ĠSet < Stand up Definition . Status > ?, ĊĠĠĠĠĠĠĠ Ġwith Team Id : ĠString , Ġwith UserId : ĠString ?, Ġwith Id : ĠString ? ĊĠĠĠ Ġ): ĠList < Stand up Definition > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= Ġcriteria Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Name Ġ= Ġwith Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Days Ġ= Ġwith Days , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Time Ġ= Ġwith Time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Broadcast Channel Ids Ġ= Ġwith Broadcast Channels , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Questions Ġ= Ġwith Questions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstand up Sub scribed User Ids Ġ= Ġwith Sub scribed User Ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot In Sub scribed User Ids Ġ= Ġwithout Sub cri bed User Ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Status Ġ= Ġwith Status , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo est Not Have Status Ġ= Ġwithout Status , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġteam Id Ġ= Ġwith Team Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġwith UserId ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate . find ( Query . query ( criteria ), ĠStand up Definition :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcriteria Of ( ĊĠĠĠĠĠĠĠ Ġstand up Name : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstand up Days : ĠList < DayOfWeek >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstand up Time : ĠLocal Time ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstand up Broadcast Channel Ids : ĠSet < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstand up Questions : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstand up Sub scribed User Ids : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġnot In Sub scribed User Ids : ĠSet < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġhas Status : ĠSet < Stand up Definition . Status >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdo est Not Have Status : ĠSet < Stand up Definition . Status >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġteam Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġid : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠCriteria Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria List Ġ= Ġmutable ListOf < Criteria >() ĊĊĠĠĠĠĠĠĠ Ġstand up Name ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . NAME ). ` is `( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġstand up Days ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . DAYS ). all ( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġstand up Time ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . TIME ). ` is `( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġstand up Broadcast Channel Ids ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . BRO ADCAST _ CHANNEL _ ID ). ` in `( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġstand up Sub scribed User Ids ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . SUB SCR IB ED _ USER _ IDS ). ` in `( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġnot In Sub scribed User Ids ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . SUB SCR IB ED _ USER _ IDS ). nin ( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġstand up Questions ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . QUEST IONS ). ` is `( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġhas Status ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . STATUS ). ` in `( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdo est Not Have Status ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . STATUS ). nin ( it )) Ġ} ĊĊĠĠĠĠĠĠĠ ĠuserId ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . SUB SCR IB ED _ USER _ IDS ). ` in `( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġid ?. let Ġ{ Ġcriteria List . add ( where ("_ id "). ` is `( ObjectId ( it ))) Ġ} ĊĊĠĠĠĠĠĠĠ Ġteam Id ?. let Ġ{ Ġcriteria List . add ( where ( Stand up Definition . TEAM _ ID ). ` is `( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( criteria List . isEmpty ()) ĠCriteria () Ġelse ĠCriteria (). and Operator (* criteria List . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ