import logging
from q2_sdk.models.demographic import DemographicInfo
from q2_cores.CorePro.queries.base_query import CoreProBaseQuery
from q2_cores.CorePro.queries import mock_responses
from q2_cores.CorePro.translation_maps import ADDRESS_MAP_REVERSE, PHONE_MAP_REVERSE
[docs]
class UpdateDemographicInfoQuery(CoreProBaseQuery):
"""POST /customer/update"""
def __init__(
self,
logger: logging.Logger,
customer_id: int,
demographic_info: DemographicInfo,
):
url_path = "/customer/update"
body = self._build_body(customer_id, demographic_info)
super().__init__(logger, url_path, "POST", body=body)
[docs]
def mock_response(self):
return mock_responses.mock_update_demographic_info_response()
def _build_body(self, customer_id: int, demographic_info: DemographicInfo):
demo = demographic_info
email = None
dl_number = None
dl_state = None
if demo.emails:
email = demo.emails[0]
phones = [
{
"phoneType": PHONE_MAP_REVERSE[x.type],
"number": x.area_code + x.phone_number,
}
for x in demo.phones
]
addresses = [
{
"addressType": ADDRESS_MAP_REVERSE[x.address_type],
"addressLine1": x.address_1,
"addressLine2": x.address_2,
"city": x.city,
"state": x.state,
"postalCode": x.zipcode,
"country": "US",
"isActive": True,
}
for x in demo.addresses
]
if demo.driver_license:
dl_number = demo.driver_license.dl_number
dl_state = demo.driver_license.state
body = {
"customerId": customer_id,
"firstName": demo.first_name,
"middleName": demo.middle_name,
"lastName": demo.last_name,
"birthDate": demo.dob,
"taxId": demo.social_security_number,
"driversLicenseNumber": dl_number,
"driversLicenseState": dl_state,
"emailAddress": email,
"phones": phones,
"addresses": addresses,
}
return body