package Ġvec . use Case . query . impl Ċ Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġreactor . core . publisher . Mono Ċ import Ġvec . domain . entity . User Ċ import Ġvec . domain . repository . Order Repository Ċ import Ġvec . domain . repository . Product Repository Ċ import Ġvec . domain . repository . UserRepository Ċ import Ġvec . use Case . dto . Usage Statistics Dto Ċ import Ġvec . use Case . query . Get Usage Statistics Query Ċ Ċ @ Component Ċ @ Transactional Ċ class ĠGet Usage Statistics Query Impl ( ĊĠĠĠ Ġprivate Ġval Ġorder Repository : ĠOrder Repository , ĊĠĠĠ Ġprivate Ġval Ġproduct Repository : ĠProduct Repository , ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository , Ċ ) Ġ: ĠGet Usage Statistics Query Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġperform ( ĊĠĠĠĠĠĠĠ Ġprincipal : ĠUser , ĊĠĠĠ Ġ): ĠMono < Usage Statistics Dto > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMono . defer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMono . zip ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Repository . count By Has Role Consumer ( true ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Repository . count (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Repository . count (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUsage Statistics Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer Count Ġ= Ġit . t 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Count Ġ= Ġit . t 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Count Ġ= Ġit . t 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ