Beispiel #1
0
def user_subscribe():
    """
	" 3 use cases:
	" Popup subscribe email will appear after user plays on match_id.
	" Popup subscribe email will appear at the first time.
	" Popup subscribe email will apear when user click on referral link.
	"""
    try:
        data = request.json
        if data is None:
            return response_error(MESSAGE.INVALID_DATA, CODE.INVALID_DATA)

        if 'email' not in data or is_valid_email(data["email"]) is False:
            return response_error(MESSAGE.USER_INVALID_EMAIL,
                                  CODE.USER_INVALID_EMAIL)

        if user_bl.is_email_subscribed(data['email']):
            return response_error(MESSAGE.EMAIL_ALREADY_SUBSCRIBED,
                                  CODE.EMAIL_ALREADY_SUBSCRIBED)

        match = Match.find_match_by_id(data.get('match_id', -1))
        email = data["email"]
        uid = int(request.headers["Uid"])
        referral_code = data.get('referral_code', None)

        user = User.find_user_with_id(uid)
        user.email = email
        user.is_user_disable_popup = 0
        user.is_subscribe = 1

        if referral_code is not None:
            r = Referral.find_referral_by_code(referral_code)
            if r is not None and r.user_id != uid:
                user.invited_by_user = r.user_id

        db.session.flush()

        # issue referral code for user if any
        referral_bl.issue_referral_code_for_user(user)
        db.session.commit()

        # send email
        result, code_1, code_2 = user_bl.claim_redeem_code_for_user(user)
        if result:
            subscribe_email_to_claim_redeem_code.delay(
                email, code_1, code_2, request.headers["Fcm-Token"],
                request.headers["Payload"], uid)
        elif match is not None:
            subscribe_email.delay(email, match.id,
                                  request.headers["Fcm-Token"],
                                  request.headers["Payload"], uid)

        return response_ok(user.to_json())

    except Exception, ex:
        db.session.rollback()
        return response_error(ex.message)
Beispiel #2
0
    def test_user_subscribe_email_with_referral_code(self):
        self.clear_data_before_test()

        # claim referral code to uid 88
        code = '1ABC'
        r = Referral.find_referral_by_code(code)
        if r is None:
            r = Referral(
                code=code,
                user_id=88
            )
            db.session.add(r)
        else:
            r.user_id = 88
        db.session.commit()


        with self.client:
            Uid = 66
            params = {
                "email": "*****@*****.**",
                "referral_code": code
            }
            response = self.client.post(
                                    '/subscribe',
                                    data=json.dumps(params), 
                                    content_type='application/json',
                                    headers={
                                        "Uid": "{}".format(Uid),
                                        "Fcm-Token": "{}".format(123),
                                        "Payload": "{}".format(123),
                                    })
            data = json.loads(response.data.decode()) 
            self.assertTrue(data['status'] == 1)

            user = User.find_user_with_id(66)
            self.assertEqual(user.invited_by_user, 88)
    def test_check_user_join_referral_program(self):
        self.clear_data_before_test()
        code = 'A123'

        with self.client:
            Uid = 88
            response = self.client.get('/referral/check',
                                       headers={
                                           "Uid": "{}".format(Uid),
                                           "Fcm-Token": "{}".format(123),
                                           "Payload": "{}".format(123),
                                       })

            data = json.loads(response.data.decode())
            self.assertTrue(data['status'] == 0)

            # generate referral code for user id 88
            r = Referral.find_referral_by_code(code)
            if r is not None:
                r.user_id = 88
            else:
                r = Referral(code=code, user_id=88)
                db.session.add(r)
            db.session.commit()

            # call again
            response = self.client.get('/referral/check',
                                       headers={
                                           "Uid": "{}".format(Uid),
                                           "Fcm-Token": "{}".format(123),
                                           "Payload": "{}".format(123),
                                       })

            data = json.loads(response.data.decode())
            self.assertTrue(data['status'] == 1)
            self.assertEqual(data['data']['code'], code)