better handle stripe plan change

pull/2029/merge
Thibault Duplessis 2016-07-12 20:25:58 +02:00
parent 88a5126462
commit 05f05aa4e4
2 changed files with 24 additions and 5 deletions

View File

@ -115,6 +115,16 @@
</rollingPolicy>
</appender>
</logger>
<logger name="plan" level="DEBUG">
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/lichess/plan.log</file>
<encoder><pattern>%date %-5level %logger{30} %message%n%xException</pattern></encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/lichess/plan-log-%d{yyyy-MM-dd}.gz</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
</logger>
<!-- Set a specific actor to DEBUG -->
<!-- <logger name="actors.MyActor" level="DEBUG" /> -->

View File

@ -175,14 +175,21 @@ final class PlanApi(
private def createCustomer(user: User, plan: StripePlan, source: Source): Fu[StripeCustomer] =
stripeClient.createCustomer(user, plan, source) flatMap { customer =>
patronColl.insert(Patron(
_id = Patron.UserId(user.id),
stripe = Patron.Stripe(customer.id).some,
lastLevelUp = DateTime.now)) >>
saveStripePatron(user, customer.id) >>
UserRepo.setPlan(user, lila.user.Plan.start) >>-
logger.info(s"Subed ${user.id} ${plan}") inject customer
}
private def saveStripePatron(user: User, customerId: CustomerId): Funit = userPatron(user) flatMap {
case None => patronColl.insert(Patron(
_id = Patron.UserId(user.id),
stripe = Patron.Stripe(customerId).some,
lastLevelUp = DateTime.now))
case Some(patron) => patronColl.update(
$id(patron.id),
patron.copy(stripe = Patron.Stripe(customerId).some))
} void
private def setCustomerPlan(customer: StripeCustomer, plan: StripePlan, source: Source): Fu[StripeSubscription] =
customer.subscriptions.data.find(_.plan == plan) match {
case Some(sub) => fuccess(sub)
@ -193,7 +200,9 @@ final class PlanApi(
}
private def userCustomerId(user: User): Fu[Option[CustomerId]] =
patronColl.primitiveOne[CustomerId]($id(user.id), "stripe.customerId")
userPatron(user) map {
_.flatMap { _.stripe.map(_.customerId) }
}
private def userCustomer(user: User): Fu[Option[StripeCustomer]] =
userCustomerId(user) flatMap {