membership-attribute-service/app/services/stripe/ChooseStripe.scala (42 lines of code) (raw):
package services.stripe
import com.gu.i18n.Country
import com.gu.okhttp.RequestRunners
import com.gu.stripe.StripeServiceConfig
import monitoring.CreateMetrics
import scala.concurrent.ExecutionContext
case class StripePublicKey(key: String)
object ChooseStripe {
def createFor(ukStripeConfig: StripeServiceConfig, auServiceConfig: StripeServiceConfig, tortoiseMediaStripeServiceConfig: StripeServiceConfig)(
implicit ec: ExecutionContext,
): ChooseStripe = {
val ukStripePublicKey: StripePublicKey = StripePublicKey(ukStripeConfig.credentials.publicKey)
val auStripePublicKey: StripePublicKey = StripePublicKey(auServiceConfig.credentials.publicKey)
val tortoiseMediaStripePublicKey: StripePublicKey = StripePublicKey(tortoiseMediaStripeServiceConfig.credentials.publicKey)
val ukStripeService: StripeService = createStripeServiceFor(ukStripeConfig)
val auStripeService: StripeService = createStripeServiceFor(auServiceConfig)
val tortoiseMediaStripeService: StripeService = createStripeServiceFor(tortoiseMediaStripeServiceConfig)
val stripePublicKeyByCountry: Map[Country, StripePublicKey] = Map(
Country.UK -> ukStripePublicKey,
Country.Australia -> auStripePublicKey,
)
val stripeServicesByPublicKey: Map[StripePublicKey, StripeService] = Map(
ukStripePublicKey -> ukStripeService,
auStripePublicKey -> auStripeService,
tortoiseMediaStripePublicKey -> tortoiseMediaStripeService,
)
new ChooseStripe(stripePublicKeyByCountry, ukStripePublicKey, stripeServicesByPublicKey)
}
private def createStripeServiceFor(stripeConfig: StripeServiceConfig)(implicit ec: ExecutionContext) = {
val basicUkStripeService = HttpBasicStripeService.from(stripeConfig, RequestRunners.futureRunner)
new StripeService(stripeConfig, basicUkStripeService)
}
}
class ChooseStripe(
publicKeyMappings: Map[Country, StripePublicKey],
defaultKey: StripePublicKey,
serviceMappings: Map[StripePublicKey, StripeService],
) {
def publicKeyForCountry(country: Option[Country]): StripePublicKey = country.flatMap(publicKeyMappings.get).getOrElse(defaultKey)
def serviceForPublicKey(publicKey: String): Option[StripeService] = serviceForPublicKey(StripePublicKey(publicKey))
def serviceForPublicKey(publicKey: StripePublicKey): Option[StripeService] = serviceMappings.get(publicKey)
}