my product data

This commit is contained in:
CHIEFSOFT\ameye
2025-09-01 10:39:08 -04:00
parent 61a6fe3f10
commit d4b2cd1457
6 changed files with 166 additions and 33 deletions
+3 -3
View File
@@ -49,7 +49,7 @@ ALTER TABLE members ADD profile_completed timestamp without time zone DEFAULT NU
ALTER TABLE members ADD option_name VARCHAR(100) REFERENCES subscription_options(option_name);
ALTER TABLE members ADD next_billing timestamp without time zone;
ALTER TABLE members ADD trial_end timestamp without time zone;
-- bALTER TABLE members ADD option_name VARCHAR(100) REFERENCES subscription_options(option_name);
CREATE TABLE members_profile(
id SERIAL,
@@ -317,7 +317,7 @@ ALTER TABLE members_products ADD primary_server VARCHAR(100);
ALTER TABLE members_products ADD db_status INT DEFAULT 0;
ALTER TABLE members_products ADD provision_status INT DEFAULT 0;
ALTER TABLE members_products ADD p_file INT DEFAULT 0;
ALTER TABLE members_products ADD url_status INT DEFAULT 0
ALTER TABLE members_products ADD url_status INT DEFAULT 0;
-- INSERT INTO merms_products (name,description,status,product_id, banner) VALUES ('Personal Website','Your personal professional web presence',1,'A000001', 'banner.jpg');
@@ -496,7 +496,7 @@ ALTER TABLE payments_session OWNER TO merms_panel;
-- added = db.Column(db.DateTime(timezone=True), server_default=func.now())
-- updated = db.Column(db.DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
ALTER TABLE members ADD option_name VARCHAR(100) REFERENCES subscription_options(option_name);
CREATE TABLE payments (
+2 -1
View File
@@ -1,2 +1,3 @@
from .transaction_type import TransactionType
from .loan_status import LoanStatus
from .loan_status import LoanStatus
from .settings_items_data import SettingsItemsData
+62
View File
@@ -0,0 +1,62 @@
from symtable import Class
class SettingsItemsData:
@staticmethod
def get_site_settings_data():
data = {
"site_title": { "name": 'Title', "controls": 'TEXT', "active": True },
"site_description": { "name": 'Description', "controls": 'TEXTAREA', "active": True },
"site_logo_text": { "name": 'Logo Text', "controls": 'TEXT', "active": True },
"site_contact_email": { "name": 'Email', "controls": 'TEXT', "active": True },
"site_contact_phone": { "name": 'Phone', "controls": 'TEXT', "active": True },
}
return data
@staticmethod
def get_site_social_settings_data():
data = {
"facebook": { "name": 'Facebook', "controls": 'TEXT', "active": True },
"twitter": { "name": 'Twitter', "controls": 'TEXT', "active": True },
"youtube": { "name": 'Youtube', "controls": 'TEXT', "active": True },
}
return data
@staticmethod
def get_site_home_settings():
data = {
"banner_text": { "name": 'Banner Text', "controls": 'TEXT', "active": True },
"banner_description": { "name": 'Banner Description', "controls": 'TEXTAREA', "active": True },
}
return data
@staticmethod
def get_site_footer_settings():
data = {
"footer_description": { "name": 'Footer Description', "controls": 'TEXTAREA', "active": True },
"boolean_footer_show_email": { "name": 'Show email in footer', "controls": 'SELECT_NO_YES', "active": True },
"boolean_footer_show_made_by": { "name": 'Show made by in footer', "controls": 'SELECT_NO_YES', "active": True },
"boolean_footer_show_socials": { "name": 'Show social in footer', "controls": 'SELECT_NO_YES', "active": True },
}
return data
@staticmethod
def get_site_about_items():
data = {
"about_title": { "name": 'About Title', "controls": 'TEXT', "active": True },
"about_description": { "name": 'About Details', "controls": 'TEXTAREA', "active": True },
"about_extra_1": { "name": 'Extra About us', "controls": 'TEXTAREA', "active": True },
"about_extra_2": { "name": 'More About us', "controls": 'TEXTAREA', "active": True },
}
return data
@staticmethod
def get_site_contact_items():
data = {
"contact_title" : { "name": 'Contact Title', "controls": 'TEXT', "active": True },
"contact_introduction": { "name": 'Extra Introduction', "controls": 'TEXTAREA', "active": True },
}
return data
+8
View File
@@ -194,6 +194,14 @@ def myproduct_settings():
response = MyProductsService.process_settings(data)
return response
@api.route("/panel/myproduct/configuration", methods=["POST"])
def myproduct_configuration():
data = request.get_json()
# logger.info(f"Route Save MyProduct Settings Data ==>>>> {data}")
response = MyProductsService.product_configuration(data)
return response
@api.route("/panel/myproduct/settings/values", methods=["POST"])
def myproduct_settings_values():
data = request.get_json()
+83 -6
View File
@@ -1,4 +1,8 @@
from urllib import request
from flask import session, jsonify
from app.api.enums import SettingsItemsData
from app.utils.logger import logger
from app.api.services.base_service import BaseService
from marshmallow import ValidationError
@@ -59,14 +63,14 @@ class MyProductsService(BaseService):
'template_9': {'title': 'Template Name-9', 'template_id': 'fc8f0738-6500-4775-9895-2047cd275302',
'banner': 'file-icon/svg.png', 'active': '0'},
}
template_data =[]
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
'id': t.id,
'template_uid': t.uid,
'title': t.name,
'active': 1,
'added': t.added.isoformat() if t.added else None
})
response_data = {
@@ -414,3 +418,76 @@ class MyProductsService(BaseService):
logger.error(f"An error occurred: {str(e)}", exc_info=True)
db.session.rollback()
return ResponseHelper.internal_server_error()
@staticmethod
def product_configuration(data):
try:
with db.session.begin():
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
settingsFields = SettingsItemsData.get_site_settings_data()
templateData = []
homeFields = SettingsItemsData.get_site_home_settings()
footerFields = SettingsItemsData.get_site_footer_settings()
contactFields = SettingsItemsData.get_site_contact_items()
socialFields = SettingsItemsData.get_site_social_settings_data()
aboutFields = SettingsItemsData.get_site_about_items()
settings_items = {
"settings": {"title": 'Settings', "controls": 'settings', "active": 'active show',
"custom": False, "data": settingsFields},
"home_tab": {"title": 'Home Page', "controls": 'home', "active": '', "custom": False,
"data": homeFields},
"footer_tab": {"title": 'Footer', "controls": 'footer', "active": '', "custom": False,
"data": footerFields},
"about_tab": {"title": 'About Page', "controls": 'about', "active": '', "custom": False,
"data": aboutFields},
"contact_tab": {"title": 'Contact Page', "controls": 'contact', "active": '', "custom": False,
"data": contactFields},
"social_tab": {"title": 'Socials', "controls": 'social', "active": '', "custom": False,
"data": socialFields},
"template_tab": {"title": 'Template', "controls": 'template', "active": '', "custom": True,
"data": templateData},
"color_scheme_tab": {"title": 'Color Scheme', "controls": 'color-scheme', "active": '',
"custom": True, "data": {}}
}
# Simulate processing
response_data = {
"settings_items": 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()
+8 -23
View File
@@ -171,9 +171,14 @@ class SubscriptionsService(BaseService):
return []
stripe_session = StripeIntegration.create_checkout_session_subscription(priceId, customerId)
logger.info(f"Inside Stripe_Session ===== : {stripe_session}")
logger.info(f"Inside Stripe_Session ID ===== : {stripe_session.id}")
PaymentsSession.add_payment_session(member_id, option_name, 'STRIPE', stripe_session.id)
if stripe_session:
logger.info(f"Inside Stripe_Session ===== : {stripe_session}")
logger.info(f"Inside Stripe_Session ID ===== : {stripe_session.id}")
PaymentsSession.add_payment_session(member_id, option_name, 'STRIPE', stripe_session.id)
else:
stripe_error = f"Stripe Returned {stripe_session}"
db.session.rollback()
return ResponseHelper.error(result_description=str(stripe_error))
#
# product_id = validated_data.get('product_id')
# product_subscription_uid=''
@@ -191,26 +196,6 @@ class SubscriptionsService(BaseService):
# 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 = {