1717
1818package com .khartec .waltz .service .asset_cost ;
1919
20- import com .khartec .waltz .common .Checks ;
2120import com .khartec .waltz .data .application .ApplicationIdSelectorFactory ;
2221import com .khartec .waltz .data .asset_cost .AssetCostDao ;
2322import com .khartec .waltz .data .asset_cost .AssetCostStatsDao ;
23+ import com .khartec .waltz .model .application .ApplicationIdSelectionOptions ;
2424import com .khartec .waltz .model .cost .*;
2525import org .jooq .Record1 ;
2626import org .jooq .Select ;
2727import org .springframework .beans .factory .annotation .Autowired ;
2828import org .springframework .stereotype .Service ;
2929
30+ import java .util .Collections ;
3031import java .util .List ;
3132
33+ import static com .khartec .waltz .common .Checks .checkNotNull ;
34+
3235
3336@ Service
3437public class AssetCostService {
@@ -42,9 +45,9 @@ public class AssetCostService {
4245 public AssetCostService (AssetCostDao assetCodeDao ,
4346 AssetCostStatsDao assetCostStatsDao ,
4447 ApplicationIdSelectorFactory idSelectorFactory ) {
45- Checks . checkNotNull (assetCodeDao , "assetCodeDao cannot be null" );
46- Checks . checkNotNull (assetCostStatsDao , "assetCostStatsDao cannot be null" );
47- Checks . checkNotNull (idSelectorFactory , "idSelectorFactory cannot be null" );
48+ checkNotNull (assetCodeDao , "assetCodeDao cannot be null" );
49+ checkNotNull (assetCostStatsDao , "assetCostStatsDao cannot be null" );
50+ checkNotNull (idSelectorFactory , "idSelectorFactory cannot be null" );
4851
4952 this .assetCostDao = assetCodeDao ;
5053 this .assetCostStatsDao = assetCostStatsDao ;
@@ -53,7 +56,7 @@ public AssetCostService(AssetCostDao assetCodeDao,
5356
5457
5558 public List <AssetCost > findByAssetCode (String code ) {
56- Checks . checkNotNull (code , "code cannot be null" );
59+ checkNotNull (code , "code cannot be null" );
5760 return assetCostDao .findByAssetCode (code );
5861 }
5962
@@ -63,25 +66,37 @@ public List<AssetCost> findByAppId(long appId) {
6366 }
6467
6568
66- public List <ApplicationCost > findAppCostsByAppIds (AssetCostQueryOptions options ) {
67- Checks .checkNotNull (options , "options cannot be null" );
68- Select <Record1 <Long >> selector = idSelectorFactory .apply (options .idSelectionOptions ());
69- return assetCostDao .findAppCostsByAppIdSelector (options .year (), selector );
69+ public List <ApplicationCost > findAppCostsByAppIds (ApplicationIdSelectionOptions options ) {
70+ checkNotNull (options , "options cannot be null" );
71+ Select <Record1 <Long >> selector = idSelectorFactory .apply (options );
72+
73+ return assetCostDao
74+ .findLatestYear ()
75+ .map (year -> assetCostDao .findAppCostsByAppIdSelector (year , selector ))
76+ .orElse (Collections .emptyList ());
7077 }
7178
7279
73- public AssetCostStatistics calculateStatisticsByAppIds (AssetCostQueryOptions options ) {
74- Checks .checkNotNull (options , "options cannot be null" );
80+ public AssetCostStatistics calculateStatisticsByAppIds (ApplicationIdSelectionOptions options ) {
81+ checkNotNull (options , "options cannot be null" );
82+
83+ Select <Record1 <Long >> appIdSelector = idSelectorFactory .apply (options );
7584
76- Select <Record1 <Long >> appIdSelector = idSelectorFactory .apply (options .idSelectionOptions ());
85+ return assetCostDao
86+ .findLatestYear ()
87+ .map (year -> {
88+ List <CostBandTally > costBandCounts = assetCostStatsDao
89+ .calculateCostBandStatisticsByAppIdSelector (year , appIdSelector );
7790
78- List < CostBandTally > costBandCounts = assetCostStatsDao . calculateCostBandStatisticsByAppIdSelector ( options . year (), appIdSelector );
79- Cost totalCost = assetCostStatsDao .calculateTotalCostByAppIdSelector (options . year () , appIdSelector );
91+ Cost totalCost = assetCostStatsDao
92+ .calculateTotalCostByAppIdSelector (year , appIdSelector );
8093
81- return ImmutableAssetCostStatistics .builder ()
82- .costBandCounts (costBandCounts )
83- .totalCost (totalCost )
84- .build ();
94+ return ImmutableAssetCostStatistics .builder ()
95+ .costBandCounts (costBandCounts )
96+ .totalCost (totalCost )
97+ .build ();
98+ })
99+ .orElse (null );
85100
86101 }
87102
0 commit comments