def post(self, candidate_public_id): """ Create Credit Report Account """ request_data = request.json # TODO: retrieve campaign information for candidate campaign_data = {'ad_id': 5000, 'affiliate_id': 1662780, 'campaign_id': 'ABR:DBL_OD_WOULDYOULIKETOADD_041615'} campaign_data.update({'channel': 'paid'}) try: candidate, error_response = _handle_get_candidate(candidate_public_id) if not candidate: return error_response # look for existing credit report account credit_report_account = candidate.credit_report_account if not credit_report_account: signup_data = start_signup(campaign_data) credit_report_account = save_new_credit_report_account(signup_data, candidate, CreditReportSignupStatus.INITIATING_SIGNUP) if credit_report_account.status == CreditReportSignupStatus.ACCOUNT_CREATED: response_object = { 'success': False, 'message': 'Credit Report account already exists' } return response_object, 409 email_exists, error = does_email_exist(request_data.get('email'), credit_report_account.tracking_token) if email_exists or error: response_object = { 'success': False, 'message': error or 'Email already exists' } return response_object, 409 password = Auth.generate_password() request_data.update(dict(password=password)) new_customer = create_customer(request_data, credit_report_account.tracking_token, sponsor_code='BTX5DY2SZK') credit_report_account.password = password credit_report_account.customer_token = new_customer.get('customerToken') credit_report_account.financial_obligation_met = new_customer.get('isFinancialObligationMet') credit_report_account.plan_type = new_customer.get('planType') credit_report_account.status = CreditReportSignupStatus.ACCOUNT_CREATED update_credit_report_account(credit_report_account) response_object = { 'success': True, 'message': f'Successfully created credit report account with {credit_report_account.provider}', 'public_id': credit_report_account.public_id } return response_object, 201 except LockedException as e: response_object = { 'success': False, 'message': str(e) } return response_object, 409 except Exception as e: response_object = { 'success': False, 'message': str(e) } return response_object, 500
class UserDto: api = Namespace('users', description='user related operations') new_user = api.model( 'new_user', { 'email': fields.String(required=True, description='user email address'), 'username': fields.String(required=True, description='user username'), 'password': fields.String(required=True, description='user password', example=Auth.generate_password()), 'first_name': fields.String(required=True, description='user first name'), 'last_name': fields.String(required=True, description='user last name'), 'title': fields.String(required=True, description='user title', example='Administrator'), 'language': fields.String(required=True, description='user language preference', example='en'), 'personal_phone': fields.String(required=True, description='user personal phone number'), 'voip_route_number': fields.String(required=False, description='user VOIP routing number') }) update_user = api.model( 'update_user', { 'email': fields.String(required=False, description='user email address'), 'first_name': fields.String(required=False, description='user first name'), 'last_name': fields.String(required=False, description='user last name'), 'title': fields.String(required=False, description='user title', example='Administrator'), 'language': fields.String(required=False, description='user language preference', example='en'), 'personal_phone': fields.String(required=False, description='user personal phone number'), 'voip_route_number': fields.String(required=False, description='user VOIP routing number') }) user = api.model( 'user', { 'email': fields.String(required=True, description='user email address'), 'username': fields.String(required=True, description='user username'), 'password': fields.String(required=True, description='user password'), 'public_id': fields.String(description='user identifier'), 'first_name': fields.String(required=True, description='user first name'), 'last_name': fields.String(required=True, description='user last name'), 'title': fields.String(required=True, description='user title'), 'language': fields.String(required=True, description='user language preference'), 'personal_phone': fields.String(required=True, description='user personal phone number'), 'voip_route_number': fields.String(required=False, description='user VOIP routing number') })