Skip to content

Commit 0687fd0

Browse files
committed
Refactor: Push tier selection logic deep inside
1 parent 5b9e07d commit 0687fd0

File tree

1 file changed

+18
-11
lines changed
  • exercises/tiered_pricing/solutions/mperezi/src/main/java/tv/codely/checkout

1 file changed

+18
-11
lines changed
Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,29 @@
11
package tv.codely.checkout;
22

3+
import java.util.Arrays;
4+
35
public class TieredPricing {
46

57
private enum Tier {
6-
FIRST(299.0),
7-
SECOND(239.0),
8-
THIRD(219.0);
8+
FIRST(299.0, 1, 2),
9+
SECOND(239.0, 3, 10),
10+
THIRD(219.0, 11, 25);
911

1012
final double unitPrice;
13+
final int startRange;
14+
final int endRange;
1115

12-
Tier(double unitPrice) {
16+
Tier(double unitPrice, int startRange, int endRange) {
1317
this.unitPrice = unitPrice;
18+
this.startRange = startRange;
19+
this.endRange = endRange;
20+
}
21+
22+
static Tier of(int subscriptions) {
23+
return Arrays.stream(values())
24+
.filter(tier -> subscriptions >= tier.startRange && subscriptions <= tier.endRange)
25+
.findFirst()
26+
.orElseThrow(() -> new IllegalArgumentException("Invalid number of subscriptions: " + subscriptions));
1427
}
1528
}
1629

@@ -19,12 +32,6 @@ public double totalPrice(int subscriptions) {
1932
}
2033

2134
private Tier getTier(int subscriptions) {
22-
if (subscriptions < 3) {
23-
return Tier.FIRST;
24-
}
25-
if (subscriptions < 11) {
26-
return Tier.SECOND;
27-
}
28-
return Tier.THIRD;
35+
return Tier.of(subscriptions);
2936
}
3037
}

0 commit comments

Comments
 (0)