added new route

This commit is contained in:
CHIEFSOFT\ameye
2025-10-03 20:37:21 -04:00
parent 53dad90ef4
commit 9f60427a42
6 changed files with 111 additions and 16 deletions
+7
View File
@@ -227,6 +227,13 @@ def myproduct_dash():
response = MyProductsService.process_request(data)
return response
@api.route("/panel/myproduct/external-url", methods=["POST"])
def set_external_url():
data = request.get_json()
# logger.info(f"Route MyProduct Data ==>>>> {data}")
response = MyProductsService.set_external_url(data)
return response
@api.route("/panel/myproduct/settings", methods=["POST"])
def myproduct_settings():
@@ -0,0 +1,8 @@
from marshmallow import Schema, fields
class MyProductExternalUrlSchema(Schema):
token = fields.Str(required=True)
uid = fields.Str(required=True)
subscription_uid = fields.Str(required=True)
external_url = fields.Str(required=True)
+84 -13
View File
@@ -2,7 +2,8 @@ from urllib import request
from flask import session, jsonify
from app.api.enums import SettingsItemsData,KafkaMessage
from app.api.enums import SettingsItemsData, KafkaMessage
from app.api.schemas.myproduct_external_url import MyProductExternalUrlSchema
from app.api.schemas.myproduct_set_template import MyProductSetTemplateSchema
from app.utils.logger import logger
from app.api.services.base_service import BaseService
@@ -23,7 +24,7 @@ from app.config import Config
class MyProductsService(BaseService):
START_URL_PATTERN = Config.START_URL_PATTERN
START_URL_PATTERN = Config.START_URL_PATTERN
@staticmethod
def process_provision_actions(data):
@@ -197,8 +198,8 @@ class MyProductsService(BaseService):
member_id = member_data.id
# getting the url-name part
url_name_part = str(random.randint(100000, 999999)) # Starr with random numbers
member_profile_data = MembersProfile.get_member_profile_by_member_id(member_id)
url_name_part = str(random.randint(100000, 999999)) # Starr with random numbers
member_profile_data = MembersProfile.get_member_profile_by_member_id(member_id)
if member_profile_data and member_profile_data.url_name != None:
url_name_part = member_profile_data.url_name
@@ -206,11 +207,11 @@ class MyProductsService(BaseService):
product_data = Products.get_product_by_product_id(product_id)
configured_start_url = product_data.start_url
if configured_start_url =='':
if configured_start_url == '':
configured_start_url = MyProductsService.START_URL_PATTERN
internal_url = url_name_part + configured_start_url # ".devprov.mermsemr.com" =
internal_url=internal_url.lower()
internal_url = url_name_part + configured_start_url # ".devprov.mermsemr.com" =
internal_url = internal_url.lower()
# let us see if this is in USE
anybodyUsingUrl = MembersProducts.get_member_product_by_internal_url(internal_url)
@@ -247,13 +248,14 @@ class MyProductsService(BaseService):
status = 6
subscription = MembersProducts.create_subscription(member_id, product_id, status, internal_url)
#-let prepare the flags for auto generated stuffs
# -let prepare the flags for auto generated stuffs
profile_data = MembersProfile.get_member_profile_by_member_id(member_id)
if profile_data:
practice = profile_data.practice
specialization = profile_data.specialization
specialization = profile_data.specialization
subscription_uid = subscription.uid
SubscriptionGenerative.create_subscription_generative(member_id ,practice,specialization,product_id, subscription_uid)
SubscriptionGenerative.create_subscription_generative(member_id, practice, specialization,
product_id, subscription_uid)
response_data = {
"subscription_uid": subscription.uid,
@@ -303,7 +305,6 @@ class MyProductsService(BaseService):
productDataStatus = memberSubscription.status
product_subscription_uid = memberSubscription.uid
for key in settings.keys():
setting_value = settings[key]
subscription_uid = memberSubscription.uid
@@ -379,7 +380,6 @@ class MyProductsService(BaseService):
product_template = memberSubscription.product_template
custom_template = memberSubscription.custom_template
# "banner": "banner.jpg",
myproduct_data = {
"myproudct": {
@@ -557,7 +557,7 @@ class MyProductsService(BaseService):
if product_id == "A000002":
settings_items = {
"url_config_tab": {"title": 'URL Configuration', "controls": 'url-config', "active": '',
"custom": True, "data": {}, "list_order": 0},
"custom": True, "data": {}, "list_order": 0},
"settings": {"title": 'Settings', "controls": 'settings', "active": 'active show',
"custom": False, "data": settingsFields, "list_order": 1},
"home_tab": {"title": 'Home Page', "controls": 'home', "active": '', "custom": False,
@@ -605,3 +605,74 @@ class MyProductsService(BaseService):
logger.error(f"An error occurred: {str(e)}", exc_info=True)
db.session.rollback()
return ResponseHelper.internal_server_error()
@staticmethod
def set_external_url(data):
try:
with db.session.begin():
# logger.info(f"Incoming MyProduct data ==>>>> {data}")
validated_data = MyProductsService.validate_data(data, MyProductExternalUrlSchema())
token = validated_data.get('token')
uid = validated_data.get('uid')
subscription_uid = validated_data.get('subscription_uid')
external_url = validated_data.get('external_url')
member_data = Members.get_member_by_uid(uid)
if not member_data:
return {
"message": "Invalid User",
"error_message": "Error - Please select a valid product to view",
"data": None,
"error": f"User with UID {uid} does not exist."
}, 400
member_id = member_data.id
membersSubResult = MembersProducts.get_member_product_by_subscription_uid(subscription_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 {subscription_uid} does not exist."
}, 400
logger.info(f"External URL Member Data: {member_data}")
if int(membersSubResult.member_id) != member_id:
return {
"message": "Mismatch subscription and User",
"error_message": "Error - Please select a valid product to view",
"data": None,
"error": f"Mismatch subscription and User."
}, 400
setUrlResult = MembersProducts.set_member_product_external_url(member_id, membersSubResult.product_id,
external_url)
# Simulate processing
response_data = {
"subscription_uid": subscription_uid,
"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()
+2 -2
View File
@@ -94,11 +94,11 @@ class OfficeDashboardService(BaseService):
dashboard_data = {
"subscription": subscription_data,
"loans": {
"signups": {
"currency": "Naira",
"currency_text": "\u20a6",
"text": "last 30 days",
"value": sub_count
"value": int(sub_count)
},
"payments": {
"currency": "Dollars",
+1 -1
View File
@@ -30,6 +30,7 @@ class Members(db.Model):
def to_dict(self):
return {
"id": self.id,
"member_id": self.id,
"uid": str(self.uid),
"profile_completed": self.profile_completed,
"username": self.username,
@@ -69,7 +70,6 @@ class Members(db.Model):
@classmethod
def get_member_by_uid(cls, uid):
member = cls.query.filter_by(uid=str(uid)).first()
if not member:
logger.info(f"User UID = {uid} found")
return None
+9
View File
@@ -98,6 +98,14 @@ class MembersProducts(db.Model):
member_product.product_template = product_template
return product_template
@classmethod
def set_member_product_external_url(cls, member_id, product_id, external_url):
member_product = cls.query.filter_by(member_id=str(member_id), product_id=str(product_id)).first()
if not member_product:
return None
member_product.external_url = external_url
return external_url
@classmethod
def create_subscription(cls, member_id ,product_id,status,internal_url):
dns_group = "DNS_G01"
@@ -162,6 +170,7 @@ class MembersProducts(db.Model):
return {
'id': self.id,
'uid': self.uid,
'member_id': self.member_id,
'product_id': self.product_id,
'internal_url': self.internal_url,
'external_url': self.external_url,