package Ġcom . so yle . stories . use case . repositories Ċ Ċ import Ġcom . so yle . stories . domain . pro se . Mention ed EntityId Ċ import Ġcom . so yle . stories . domain . pro se . Pro se Ċ import Ġcom . so yle . stories . domain . pro se . events . Pro se Event Ċ import Ġcom . so yle . stories . use case . pro se . Pro se Repository Ċ Ċ class ĠPro se Repository Double ( ĊĠĠĠ Ġprivate Ġval ĠonCreate Pro se : Ġ( Pro se ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġprivate Ġval Ġon Replace Pro se : Ġ( Pro se ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġprivate Ġval Ġon Add Events : Ġ( Pro se . Id , ĠList < Pro se Event >) Ġ-> ĠUnit Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ} Ċ ) Ġ: ĠPro se Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpro se Ġ= Ġmutable Map Of < Pro se . Id , ĠPro se >() ĊĠĠĠ Ġprivate Ġval Ġpro se Events Ġ= Ġmutable Map Of < Pro se . Id , ĠMutable List < Pro se Event >>() ĊĊĠĠĠ Ġfun Ġgiven Pro se ( pro se : ĠPro se ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pro se [ pro se . id ] Ġ= Ġpro se ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Pro se ById ( pro se Id : ĠPro se . Id ): ĠPro se ? Ġ= Ġpro se [ pro se Id ] ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġadd Pro se ( pro se : ĠPro se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pro se [ pro se . id ] Ġ= Ġpro se ĊĠĠĠĠĠĠĠ ĠonCreate Pro se ( pro se ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġreplace Pro se ( pro se : ĠPro se ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . pro se [ pro se . id ] Ġ= Ġpro se ĊĠĠĠĠĠĠĠ Ġon Replace Pro se ( pro se ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġreplace Pro se ( all Pro se : ĠList < Pro se >) Ġ{ ĊĠĠĠĠĠĠĠ Ġall Pro se . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpro se [ it . id ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Replace Pro se ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Pro se That Mention Entity ( entityId : ĠM ention ed EntityId < *> ): ĠList < Pro se > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpro se . values . filter Ġ{ Ġmention Ġ-> Ġmention . mentions . any Ġ{ Ġit . entityId Ġ== Ġentity Id Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Pro se Events ( pro se Id : ĠPro se . Id , Ġsince Revision : ĠLong ): ĠList < Pro se Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpro se Events . get OrDefault ( pro se Id , ĠlistOf ()). filter Ġ{ Ġit . revision Ġ> Ġsince Revision Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġadd Events ( pro se Id : ĠPro se . Id , Ġevents : ĠList < Pro se Event >) Ġ{ ĊĠĠĠĠĠĠĠ Ġpro se Events . get Or Put ( pro se Id , Ġ:: mutable ListOf ). addAll ( events ) ĊĠĠĠĠĠĠĠ Ġon Add Events ( pro se Id , Ġevents ) ĊĠĠĠ Ġ} Ċ Ċ }