from flask import jsonify from app.api.enums import KafkaMessage from app.api.services import MyProductsService from app.utils.logger import logger from app.api.services.base_service import BaseService from sqlalchemy import func, desc from app.extensions import db from app.models import MembersProductsSettings, MembersProducts, ProductsColorStyle from threading import Thread class WebContentsService(BaseService): @staticmethod def get_web_contents_data(provision_uid): try: web_contents_data = { "last_update": "0", "site_title": "my-site-title", "site_description": "This is site description in the header", "site_logo_text": "MY-GOOD-LOGO", "site_contact_email": "email@specialemail.com", "site_contact_phone": "911 111 1111", "site_keywords": "Responsive, HTML5, DSAThemes, Landing, Software, Mobile App, SaaS, Startup, Creative, Digital Product", "facebook": "myface.facebook.com", "twitter": "mytwit.twitter.com", "youtube": "myyou.youtube.com", "banner_text": "This is the main business text on the web page", "banner_description": "Naira", "footer_description": "Any text under the logo on the footer", "about_description": "Naira", "banner_text": "Banner title for your new website. Adjust as needed.", "banner_description": "A brief overview of your banner title. Tailor the text to accurately reflect the interests and demographics of your audience.", "about_title": "This is about title section", "about_description": "About Description - Mauris donec ociis magnis sapien ipsum sagittis sapien tempor and volute gravida aliquet quaerat vitae", "about_extra_1": "About Extra 1 - Mauris donec ociis magnis sapien ipsum sagittis sapien tempor and volute gravida aliquet quaerat vitae", "about_extra_2": "About - Extra 2 -Mauris donec ociis magnis sapien ipsum sagittis sapien tempor and volute gravida aliquet quaerat vitae ", "contact_title": "Questions? Let's Talk", "contact_introduction": "Want to learn more about us, or speak with an expert? Let us know what you are looking for and we’ll get back to you right away", "internal_template_style": '' } # web_contents_data[""] = "" # Do we have this subsction membersSubResult = MembersProducts.get_member_product_by_subscription_uid(provision_uid) if membersSubResult: member_sub = { 'id': membersSubResult.id, 'subscription_uid': str(membersSubResult.uid), 'member_id': membersSubResult.member_id, 'product_id': membersSubResult.product_id, 'internal_url': membersSubResult.internal_url, 'external_url': membersSubResult.external_url, 'dns_group': membersSubResult.dns_group, 'product_template': membersSubResult.product_template, 'primary_server': membersSubResult.primary_server, 'provision_port': membersSubResult.provision_port, 'custom_template': membersSubResult.custom_template, 'status': membersSubResult.status, 'updated': membersSubResult.updated, "added": membersSubResult.added, } if membersSubResult.colorstyle is not None and membersSubResult.colorstyle !='': # is this a valid olor scheme colorStyle = ProductsColorStyle.get_colorstyle_by_product_id_and_uid(membersSubResult.product_id, membersSubResult.colorstyle) if colorStyle and colorStyle.color_style != '': web_contents_data["internal_template_style"] = colorStyle.color_style # web_contents_data ={} settings_data_result = MembersProductsSettings.get_product_settings_by_subscription_uid(provision_uid) if settings_data_result: for t in settings_data_result: if t.settings_key.strip() is web_contents_data: web_contents_data[t.settings_key.strip()] = t.setting_value.strip() else: web_contents_data[t.settings_key.strip()] = t.setting_value.strip() # The template set up return web_contents_data except Exception as e: logger.error(f"An error occurred while getting dashboard data: {str(e)}", exc_info=True) return jsonify({"message": "Internal Server Error"}), 500 @staticmethod def get_web_trafic_data(data): provision_uid = data.get('provision_uid', '') country = data.get('country', '') region = data.get('region', '') city = data.get('city', '') latitude = data.get('latitude', '') longitude = data.get('longitude', '') membersSubResult = MembersProducts.get_member_product_by_subscription_uid(provision_uid) if not membersSubResult: return { "message": "Invalid Subscription", "error_message": "Error - Please select a valid product to view", "data": None, "error": f"Subscription with UID {provision_uid} does not exist." }, 400 member_id = membersSubResult.member_id product_id = membersSubResult.product_id try: response_data = { "provision_uid": provision_uid, "member_id": member_id, "product_id": product_id, "country": country, "region": region, "city": city, "latitude": latitude, "longitude": longitude, } logger.error(f"Going for Thread ******************** ") thread = Thread(target=MyProductsService.async_send_settings_refresh_to_kafka, args=(response_data, provision_uid, KafkaMessage.SITE_TRAFFIC_DATA)) thread.start() logger.error(f"After the Thread ******************** ") return response_data except Exception as e: logger.error(f"An error occurred while getting dashboard data: {str(e)}", exc_info=True) return jsonify({"message": "Internal Server Error"}), 500