Skip to content

Commit

Permalink
refactor(enrollment): implement enrollment using Backoffice API
Browse files Browse the repository at this point in the history
add handling for known case that should be treated as a success
  • Loading branch information
angela-tran committed Feb 23, 2024
1 parent 2d30707 commit d043026
Showing 1 changed file with 29 additions and 6 deletions.
35 changes: 29 additions & 6 deletions benefits/enrollment/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from django.urls import reverse
from django.utils.decorators import decorator_from_middleware
from littlepay.api.client import Client
from requests.exceptions import HTTPError

from benefits.core import models, session
from benefits.core.middleware import (
Expand All @@ -17,7 +18,7 @@
pageview_decorator,
)
from benefits.core.views import ROUTE_LOGGED_OUT
from . import analytics, api, forms
from . import analytics, forms


ROUTE_INDEX = "enrollment:index"
Expand Down Expand Up @@ -60,6 +61,7 @@ def index(request):
session.update(request, origin=reverse(ROUTE_INDEX))

agency = session.agency(request)
payment_processor = agency.payment_processor

# POST back after payment processor form, process card token
if request.method == "POST":
Expand All @@ -73,13 +75,34 @@ def index(request):
logger.debug("Read tokenized card")
card_token = form.cleaned_data.get("card_token")

response = api.Client(agency).enroll(card_token, eligibility.group_id)
if response.success:
client = Client(
base_url=payment_processor.api_base_url,
client_id=payment_processor.client_id,
client_secret=payment_processor.client_secret,
audience=payment_processor.audience,
)
client.oauth.ensure_active_token(client.token)

funding_source = client.get_funding_source_by_token(card_token)

try:
client.link_concession_group_funding_source(funding_source_id=funding_source.id, group_id=eligibility.group_id)
except HTTPError as e:
# 409 means that customer already belongs to a concession group.
# the response JSON will look like:
# {"errors":[{"detail":"Conflict (409) - Customer already belongs to a concession group."}]}
if e.response.status_code == 409:
analytics.returned_success(request, eligibility.group_id)
return success(request)
else:
analytics.returned_error(request, str(e))
raise Exception(f"{e}: {e.response.json()}")
except Exception as e:
analytics.returned_error(request, e)
raise e
else:
analytics.returned_success(request, eligibility.group_id)
return success(request)
else:
analytics.returned_error(request, response.message)
raise Exception(response.message)

# GET enrollment index
else:
Expand Down

0 comments on commit d043026

Please sign in to comment.