174 lines
8.2 KiB
Python
174 lines
8.2 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
|
|
from app.api.helpers.response_helper import ResponseHelper
|
|
from werkzeug.security import generate_password_hash, check_password_hash
|
|
from app.api.schemas.myproduct import MyProductSchema
|
|
|
|
import datetime
|
|
import jwt
|
|
import random
|
|
from app.config import Config
|
|
|
|
|
|
class MyProductsService(BaseService):
|
|
|
|
@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)
|
|
subscription =[]
|
|
if not 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(10000, 99999)) + ".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": subscription,
|
|
"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_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')
|
|
|
|
'''
|
|
Table "public.products"
|
|
Column | Type | Collation | Nullable | Default
|
|
-------------+-----------------------------+-----------+----------+--------------------------------------
|
|
id | integer | | not null | nextval('products_id_seq'::regclass)
|
|
uid | uuid | | | uuid_generate_v4()
|
|
product_id | character varying(25) | | not null |
|
|
name | character varying(100) | | not null |
|
|
description | character varying(250) | | not null |
|
|
status | integer | | | 0
|
|
added | timestamp without time zone | | | now()
|
|
updated | timestamp without time zone | | | now()
|
|
banner | character varying(100) | | |
|
|
Indexes:
|
|
"products_id_key" UNIQUE CONSTRAINT, btree (id)
|
|
"products_name_key" UNIQUE CONSTRAINT, btree (name)
|
|
"products_product_id_key" UNIQUE CONSTRAINT, btree (product_id)
|
|
Referenced by:
|
|
TABLE "members_products" CONSTRAINT "members_products_product_id_fkey" FOREIGN KEY (product_id) REFERENCES products(product_id)
|
|
|
|
|
|
merms_panel=#
|
|
"Product Description - Commitment is something that comes from understanding that everything has its price and then having the willingness to pay that price. This is important because nobody wants to put significant effort into something, only to find out after the fact that the price was too high.The price is something not necessarily defined as financial. It could be time, effort, sacrifice, money or perhaps, something else.",
|
|
|
|
|
|
'''
|
|
product_data = Products.get_product_by_product_id(product_id)
|
|
product_description = ProductsDetails.get_product_details_with_product_id('A000002')
|
|
productDataStatus = product_data.status
|
|
# "banner": "banner.jpg",
|
|
myproduct_data = {
|
|
"myproudct": {
|
|
"banner": product_data.banner,
|
|
"description": product_description.details,
|
|
"sale_text" : product_description.sale_text,
|
|
"internal_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_uid": product_data.uid,
|
|
"promotion_text": "Start Free Today !",
|
|
"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()
|
|
|