417 lines
19 KiB
Python
417 lines
19 KiB
Python
from flask import session, jsonify
|
|
from app.utils.logger import logger
|
|
from app.api.services.base_service import BaseService
|
|
from marshmallow import ValidationError
|
|
from app.extensions import db
|
|
from app.models import MembersProducts, Products, Members, ProductsDetails, ProductsDetails, ProvisionActions, \
|
|
MembersProductsSettings, ProductsTemplates
|
|
from app.api.helpers.response_helper import ResponseHelper
|
|
from app.api.schemas.myproduct import MyProductSchema
|
|
from app.api.schemas.provision import ProvisionSchema
|
|
from app.api.schemas.myproduct_settings import MyProductSettingsSchema
|
|
from threading import Thread
|
|
|
|
import datetime
|
|
import jwt
|
|
import random
|
|
from app.config import Config
|
|
|
|
|
|
class MyProductsService(BaseService):
|
|
|
|
@staticmethod
|
|
def process_provision_actions(data):
|
|
pass
|
|
|
|
@staticmethod
|
|
def mpproduct_template_data(data):
|
|
try:
|
|
with db.session.begin():
|
|
# logger.info(f"Incoming MyProduct data ==>>>> {data}")
|
|
validated_data = MyProductsService.validate_data(data, MyProductSchema())
|
|
token = validated_data.get('token')
|
|
uid = validated_data.get('uid')
|
|
member_data = Members.get_member_by_uid(uid)
|
|
member_id = member_data.id
|
|
|
|
product_id = validated_data.get('product_id')
|
|
|
|
# class MyProductSchema(Schema):
|
|
# token = fields.Str(required=True)
|
|
# uid = fields.Str(required=True)
|
|
# product_id = fields.Str(required=True)
|
|
templates = ProductsTemplates.get_template_by_product_id(product_id)
|
|
template_data = {
|
|
'template_16': {'title': 'Template Name-16', 'template_id': '02af24fd-2b1a-46ed-af21-87018e726408',
|
|
'banner': 'file-icon/svg.png', 'active': '0'},
|
|
'template_22': {'title': 'Template Name-22', 'template_id': '8b296894-42e4-4f2e-abd1-7c2a38d6e07b',
|
|
'banner': 'file-icon/svg.png', 'active': '0'},
|
|
'template_47': {'title': 'Template Name-47', 'template_id': 'ef2ffa1c-9272-42cd-9d33-0e614047b4f8',
|
|
'banner': 'file-icon/svg.png', 'active': '0'},
|
|
'template_25': {'title': 'Template Name-25', 'template_id': 'b3a7ba31-dc47-4a40-a5cc-fd1ff27d6b78',
|
|
'banner': 'file-icon/svg.png', 'active': '1'},
|
|
'template_49': {'title': 'Template Name-49', 'template_id': '60959c69-6672-4f69-a006-eeb7d210e605',
|
|
'banner': 'file-icon/svg.png', 'active': '0'},
|
|
'template_27': {'title': 'Template Name-27', 'template_id': 'e4acb98a-c584-45f2-bece-af677dcf0a1f',
|
|
'banner': 'file-icon/svg.png', 'active': '0'},
|
|
'template_51': {'title': 'Template Name-51', 'template_id': '975ee42e-3169-4978-92d7-d28e7e2ac014',
|
|
'banner': 'file-icon/svg.png', 'active': '0'},
|
|
'template_9': {'title': 'Template Name-9', 'template_id': 'fc8f0738-6500-4775-9895-2047cd275302',
|
|
'banner': 'file-icon/svg.png', 'active': '0'},
|
|
}
|
|
template_data =[]
|
|
for t in templates:
|
|
template_data.append({
|
|
'id': t.id,
|
|
'template_uid': t.uid,
|
|
'title': t.name,
|
|
'active': 1,
|
|
'added': t.added.isoformat() if t.added else None
|
|
})
|
|
|
|
response_data = {
|
|
"product_id": product_id,
|
|
"templates": template_data,
|
|
"last_update": datetime.datetime.utcnow(),
|
|
}
|
|
|
|
return ResponseHelper.success(data=response_data)
|
|
|
|
|
|
except ValidationError as err:
|
|
|
|
logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.unprocessable_entity(result_description="Validation exception")
|
|
|
|
except ValueError as err:
|
|
logger.error(f"{getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.error(result_description=str(err))
|
|
|
|
except Exception as e:
|
|
logger.error(f"An error occurred: {str(e)}", exc_info=True)
|
|
db.session.rollback()
|
|
return ResponseHelper.internal_server_error()
|
|
|
|
@staticmethod
|
|
def process_provision(data):
|
|
try:
|
|
with db.session.begin():
|
|
# logger.info(f"Incoming MyProduct data ==>>>> {data}")
|
|
validated_data = MyProductsService.validate_data(data, ProvisionSchema())
|
|
token = validated_data.get('token')
|
|
uid = validated_data.get('uid')
|
|
member_data = Members.get_member_by_uid(uid)
|
|
member_id = member_data.id
|
|
|
|
product_id = validated_data.get('product_id')
|
|
product_data = Products.get_product_by_product_id(product_id)
|
|
|
|
if not product_data:
|
|
return {
|
|
"message": "Please provide product_id",
|
|
"data": None,
|
|
"error": "Bad request"
|
|
}, 400
|
|
|
|
logger.info(f"GET HERE ******************************** : {data}", exc_info=True)
|
|
subscription = MembersProducts.get_member_product_by_product_member_id(member_id, product_id)
|
|
|
|
provision_activities = ProvisionActions.get_provision_action_by_product_uid(subscription.uid, 4)
|
|
provision_activities_data = []
|
|
for t in provision_activities:
|
|
provision_activities_data.append({
|
|
'id': t.id,
|
|
'uid': t.uid,
|
|
'action': t.action,
|
|
'added': t.added.isoformat() if t.added else None,
|
|
})
|
|
|
|
response_data = {
|
|
"subscription_uid": subscription.uid,
|
|
"subscription_id": subscription.id,
|
|
"last_update": datetime.datetime.utcnow(),
|
|
"percent_completed": random.randint(10, 99),
|
|
"activities": provision_activities_data
|
|
}
|
|
return ResponseHelper.success(data=response_data)
|
|
|
|
|
|
except ValidationError as err:
|
|
|
|
logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.unprocessable_entity(result_description="Validation exception")
|
|
|
|
except ValueError as err:
|
|
logger.error(f"{getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.error(result_description=str(err))
|
|
|
|
except Exception as e:
|
|
logger.error(f"An error occurred: {str(e)}", exc_info=True)
|
|
db.session.rollback()
|
|
return ResponseHelper.internal_server_error()
|
|
|
|
@staticmethod
|
|
def process_subscription(data):
|
|
try:
|
|
with db.session.begin():
|
|
# logger.info(f"Incoming MyProduct data ==>>>> {data}")
|
|
validated_data = MyProductsService.validate_data(data, MyProductSchema())
|
|
token = validated_data.get('token')
|
|
uid = validated_data.get('uid')
|
|
member_data = Members.get_member_by_uid(uid)
|
|
member_id = member_data.id
|
|
|
|
product_id = validated_data.get('product_id')
|
|
product_data = Products.get_product_by_product_id(product_id)
|
|
|
|
if not product_data:
|
|
return {
|
|
"message": "Please provide product_id",
|
|
"data": None,
|
|
"error": "Bad request"
|
|
}, 400
|
|
|
|
logger.info(f"GET HERE ******************************** : {data}", exc_info=True)
|
|
mumberSub = MembersProducts.get_member_product_by_product_member_id(member_id, product_id)
|
|
|
|
if mumberSub:
|
|
logger.error(f"Ready to add data to tables")
|
|
response_data = {
|
|
"subscription": mumberSub,
|
|
"member_id": member_id,
|
|
"error": "already_subscribed",
|
|
"uid": uid
|
|
}
|
|
return ResponseHelper.success(data=response_data)
|
|
|
|
internal_url = str(random.randint(100000, 999999)) + ".devprov.mermsemr.com"
|
|
# INSERT_NEW_PRODUCT = "INSERT INTO members_products (member_id ,product_id,status,internal_url) VALUES (%s, %s, %s, %s)"
|
|
# val_insert = (member_id, product_id,6,internal_url)
|
|
status = 6
|
|
subscription = MembersProducts.create_subscription(member_id, product_id, status, internal_url)
|
|
|
|
response_data = {
|
|
"subscription_uid": subscription.uid,
|
|
"subscription_id": subscription.id,
|
|
"internal_url": subscription.internal_url,
|
|
"member_id": member_id,
|
|
"uid": uid
|
|
}
|
|
return ResponseHelper.success(data=response_data)
|
|
|
|
|
|
except ValidationError as err:
|
|
|
|
logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.unprocessable_entity(result_description="Validation exception")
|
|
|
|
except ValueError as err:
|
|
logger.error(f"{getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.error(result_description=str(err))
|
|
|
|
except Exception as e:
|
|
logger.error(f"An error occurred: {str(e)}", exc_info=True)
|
|
db.session.rollback()
|
|
return ResponseHelper.internal_server_error()
|
|
|
|
@staticmethod
|
|
def process_settings(data):
|
|
try:
|
|
with db.session.begin():
|
|
logger.info(f"Incoming MyProduct Settings Data ==>>>> {data}")
|
|
settings = data["settings"]
|
|
data.pop("settings")
|
|
validated_data = MyProductsService.validate_data(data, MyProductSettingsSchema())
|
|
token = validated_data.get('token')
|
|
uid = validated_data.get('uid')
|
|
|
|
member_data = Members.get_member_by_uid(uid)
|
|
member_id = member_data.id
|
|
product_id = validated_data.get('product_id')
|
|
product_settings = validated_data.get('settings')
|
|
|
|
memberSubscription = MembersProducts.get_member_product_by_product_member_id(member_id, product_id)
|
|
if memberSubscription is not None:
|
|
# logger.info(f"Incoming MyProduct data ==>>>> {memberSubscription}")
|
|
productDataStatus = memberSubscription.status
|
|
product_subscription_uid = memberSubscription.uid
|
|
# product_subscription_external_url = memberSubscription.external_url
|
|
# product_subscription_internal_url = memberSubscription.internal_url
|
|
|
|
# result_data = {
|
|
# "myproudct": {
|
|
# "result": "Reveived under development ",
|
|
# "message": "to be fixed"
|
|
# }
|
|
# }
|
|
|
|
for key in settings.keys():
|
|
setting_value = settings[key]
|
|
subscription_uid = memberSubscription.uid
|
|
MembersProductsSettings.save_update_product_settings(member_id, subscription_uid, product_id, key,
|
|
'TXT', setting_value)
|
|
|
|
# Simulate processing
|
|
response_data = {
|
|
"member_id": member_id,
|
|
"subscription_uid": str(subscription_uid),
|
|
"uid": str(uid),
|
|
}
|
|
logger.error(f"Going for Thread ******************** ")
|
|
thread = Thread(target=MyProductsService.async_send_settings_refresh_to_kafka,
|
|
args=(response_data, subscription_uid, "REFRESH_PRODUCT_SETTINGS"))
|
|
thread.start()
|
|
logger.error(f"After the Thread ******************** ")
|
|
|
|
return ResponseHelper.success(data=response_data)
|
|
|
|
except ValidationError as err:
|
|
|
|
logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.unprocessable_entity(result_description="Validation exception")
|
|
|
|
except ValueError as err:
|
|
logger.error(f"{getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.error(result_description=str(err))
|
|
|
|
except Exception as e:
|
|
logger.error(f"An error occurred: {str(e)}", exc_info=True)
|
|
db.session.rollback()
|
|
return ResponseHelper.internal_server_error()
|
|
|
|
@staticmethod
|
|
def process_request(data):
|
|
try:
|
|
with db.session.begin():
|
|
# logger.info(f"Incoming MyProduct data ==>>>> {data}")
|
|
validated_data = MyProductsService.validate_data(data, MyProductSchema())
|
|
token = validated_data.get('token')
|
|
uid = validated_data.get('uid')
|
|
member_data = Members.get_member_by_uid(uid)
|
|
member_id = member_data.id
|
|
product_id = validated_data.get('product_id')
|
|
product_subscription_uid = ''
|
|
product_subscription_external_url = ''
|
|
product_subscription_internal_url = ''
|
|
product_data = Products.get_product_by_product_id(product_id)
|
|
product_description = ProductsDetails.get_product_details_with_product_id(product_id)
|
|
productDataStatus = product_data.status
|
|
|
|
memberSubscription = MembersProducts.get_member_product_by_product_member_id(member_id, product_id)
|
|
if memberSubscription is not None:
|
|
# logger.info(f"Incoming MyProduct data ==>>>> {memberSubscription}")
|
|
productDataStatus = memberSubscription.status
|
|
product_subscription_uid = memberSubscription.uid
|
|
product_subscription_external_url = memberSubscription.external_url
|
|
product_subscription_internal_url = memberSubscription.internal_url
|
|
|
|
# "banner": "banner.jpg",
|
|
myproduct_data = {
|
|
"myproudct": {
|
|
"banner": product_data.banner,
|
|
"description": product_description.details,
|
|
"sale_text": product_description.sale_text,
|
|
"internal_url": product_subscription_internal_url,
|
|
"external_url": product_subscription_external_url,
|
|
"price_text": "90 days free and 3.95/Month",
|
|
"product_id": product_data.product_id,
|
|
"product_name": product_data.name,
|
|
"product_subscription_uid": product_subscription_uid,
|
|
"product_uid": product_data.uid,
|
|
"promotion_text": "Start Free Today !",
|
|
"subscription_uid": product_subscription_uid,
|
|
"status": productDataStatus,
|
|
"subscription_text": "Start with your goals in mind and then work possible.ith yand Goals. If the plan doesn\u2019t support the vision then change it!",
|
|
"title": "Your personal professional web presence"
|
|
}
|
|
}
|
|
|
|
# Simulate processing
|
|
response_data = {
|
|
"myproduct": myproduct_data,
|
|
"member_id": member_id,
|
|
"uid": uid,
|
|
}
|
|
|
|
return ResponseHelper.success(data=response_data)
|
|
|
|
except ValidationError as err:
|
|
|
|
logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.unprocessable_entity(result_description="Validation exception")
|
|
|
|
except ValueError as err:
|
|
logger.error(f"{getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.error(result_description=str(err))
|
|
|
|
except Exception as e:
|
|
logger.error(f"An error occurred: {str(e)}", exc_info=True)
|
|
db.session.rollback()
|
|
return ResponseHelper.internal_server_error()
|
|
|
|
@staticmethod
|
|
def process_settings_values(data):
|
|
try:
|
|
with db.session.begin():
|
|
# logger.info(f"Incoming MyProduct data ==>>>> {data}")
|
|
validated_data = MyProductsService.validate_data(data, MyProductSchema())
|
|
token = validated_data.get('token')
|
|
uid = validated_data.get('uid')
|
|
member_data = Members.get_member_by_uid(uid)
|
|
member_id = member_data.id
|
|
product_id = validated_data.get('product_id')
|
|
|
|
product_subscription_uid = ''
|
|
product_data = Products.get_product_by_product_id(product_id)
|
|
product_description = ProductsDetails.get_product_details_with_product_id(product_id)
|
|
productDataStatus = product_data.status
|
|
|
|
memberSubscription = MembersProducts.get_member_product_by_product_member_id(member_id, product_id)
|
|
settings_data = []
|
|
if memberSubscription is not None:
|
|
# logger.info(f"Incoming MyProduct data ==>>>> {memberSubscription}")
|
|
product_subscription_uid = memberSubscription.uid
|
|
settings_data_result = MembersProductsSettings.get_product_settings_by_product_id_and_member_id(
|
|
product_id, member_id)
|
|
if settings_data_result is not None:
|
|
for t in settings_data_result:
|
|
settings_data.append({
|
|
'setting_key': t.settings_key,
|
|
'setting_value': t.setting_value,
|
|
})
|
|
|
|
# Simulate processing
|
|
response_data = {
|
|
"settings": settings_data,
|
|
"member_id": member_id,
|
|
"product_subscription_uid": product_subscription_uid,
|
|
}
|
|
|
|
return ResponseHelper.success(data=response_data)
|
|
|
|
except ValidationError as err:
|
|
|
|
logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.unprocessable_entity(result_description="Validation exception")
|
|
|
|
except ValueError as err:
|
|
logger.error(f"{getattr(err, 'messages', str(err))}")
|
|
db.session.rollback()
|
|
return ResponseHelper.error(result_description=str(err))
|
|
|
|
except Exception as e:
|
|
logger.error(f"An error occurred: {str(e)}", exc_info=True)
|
|
db.session.rollback()
|
|
return ResponseHelper.internal_server_error()
|