def referral_claim(): if not use_referrals: return bad_request(web_utils.NOT_AVAILABLE) token, api_key, err_response = auth_request_get_single_param(db, "token") if err_response: return err_response if not api_key.user.has_role( Role.ROLE_ADMIN) and not api_key.user.has_role( Role.ROLE_REFERRAL_CLAIMER): return bad_request(web_utils.UNAUTHORIZED) ref = Referral.from_token(db.session, token) if not ref: return bad_request(web_utils.NOT_FOUND) if ref.status != ref.STATUS_CREATED: return bad_request(web_utils.NOT_FOUND) # send referral rewards category = Category.from_name(db.session, Category.CATEGORY_REFERRAL) if not category: return bad_request(web_utils.INVALID_CATEGORY) if ref.reward_sender <= 0: return bad_request(web_utils.INVALID_AMOUNT) if ref.reward_recipient_type == ref.REWARD_TYPE_FIXED and ref.reward_recipient <= 0: return bad_request(web_utils.INVALID_AMOUNT) reason = f'{ref.token}: reward for referral' _reward_create(api_key.user, reason, category, ref.recipient, ref.reward_sender, 'Thank you for referring a friend') if ref.reward_recipient_type == ref.REWARD_TYPE_FIXED: _reward_create(api_key.user, reason, category, ref.recipient, ref.reward_recipient, 'Thank you for using our service') ref.status = ref.STATUS_CLAIMED db.session.add(ref) db.session.commit() return jsonify(dict(referral=ref.to_json()))
def referral_validate(): if not use_referrals: return bad_request(web_utils.NOT_AVAILABLE) token, api_key, err_response = auth_request_get_single_param(db, "token") if err_response: return err_response if not api_key.user.has_role( Role.ROLE_ADMIN) and not api_key.user.has_role( Role.ROLE_REFERRAL_CLAIMER): return bad_request(web_utils.UNAUTHORIZED) ref = Referral.from_token(db.session, token) if not ref: return bad_request(web_utils.NOT_FOUND) if ref.status != ref.STATUS_CREATED: return bad_request(web_utils.NOT_FOUND) return jsonify(dict(referral=ref.to_json()))