Untitled

 avatar
unknown
plain_text
2 years ago
997 B
8
Indexable
class Calculator {

  def calculate(orderId: String, discount: Double): Double = {
    val response = scala.io.Source.fromURL("yourapi.com/api/v6/order/" + orderId).mkString
    if (response.isBlank) throw new RuntimeException("empty response body")
    val orderResponse = OrderResponse(response)
    var sum = orderResponse.productList.map((e: Product) => e.price * e.quantity).reduce((a, b) => a + b)
    if (sum > 1000) sum = sum * 0.9
    else if (sum > 100) sum = sum * 0.95
    if (orderResponse.accountType eq "NoAccountCustomer") sum = sum * 1.03
    else if (orderResponse.accountType eq "PremiumCustomer") sum = sum * 0.98
    else throw new RuntimeException("unknown customer")
    if (discount == null) sum
    else sum - discount
  }
}

case class OrderResponse(productList: List[Product], accountType: String)
object OrderResponse {
  def apply(json: String): OrderResponse = ??? //let's pretend this is manual deserialization
}

case class Product(price: Double, quantity: Double)
Editor is loading...