diff --git a/app/api/routes/routes.py b/app/api/routes/routes.py index ac3f005..5d9c12d 100644 --- a/app/api/routes/routes.py +++ b/app/api/routes/routes.py @@ -69,8 +69,6 @@ def merms_resetcomplete(): response = LoginService.complete_reset(data) return response - - @api.route("/panel/Login", methods=["POST"]) @jwt_required() def merms_login(): @@ -135,6 +133,13 @@ def merms_account_product_url(): response = ProductsService.product_url_request(data) return response +@api.route("/panel/account/payments", methods=["POST"]) +@jwt_required() +def merms_account_payments(): + data = request.get_json() + response = AccountService.process_payments_data(data) + return response + @api.route("/panel/account/products/url", methods=["POST"]) def myproduct_url(): data = request.get_json() diff --git a/app/api/services/account.py b/app/api/services/account.py index 0069f1d..a4ac71e 100644 --- a/app/api/services/account.py +++ b/app/api/services/account.py @@ -7,7 +7,7 @@ from marshmallow import ValidationError from app.api.enums import TransactionType # from app.api.integrations import SimbrellaIntegration from app.extensions import db -from app.models import Members, MembersActions, MembersProfile +from app.models import Members, MembersActions, MembersProfile, Payments # from app.api.services.offer_analysis import OfferAnalysis from app.api.helpers.response_helper import ResponseHelper from werkzeug.security import generate_password_hash, check_password_hash @@ -321,3 +321,56 @@ class AccountService(BaseService): logger.error(f"An error occurred: {str(e)}", exc_info=True) db.session.rollback() return ResponseHelper.internal_server_error() + + + @staticmethod + def process_payments_data(data): + + try: + with db.session.begin(): + + validated_data = AccountService.validate_data(data, UserSchema()) + user_token = validated_data.get('token') + uid = str(validated_data.get('uid')) + member_data = Members.get_member_by_uid(uid) + + member_payments = Payments.get_member_payments_by_member_id(member_data['id']) + + member_payments_data = [] + + for t in member_payments: + member_payments_data.append({ + 'id': t.id, + 'uid': t.uid, + 'option_name': t.option_name, + 'option_type': t.option_type, + 'payment_uid': t.payment_uid, + 'amount': t.amount, + 'status': t.status, + 'added': t.added + }) + + action_data = { + "member_payments": member_payments, + "last_update": datetime.datetime.utcnow(), + } + + # logger.info(f"Member Actions : {action_data}") + + return ResponseHelper.success(data=action_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() \ No newline at end of file diff --git a/app/models/payments.py b/app/models/payments.py index ad379c9..e89832d 100644 --- a/app/models/payments.py +++ b/app/models/payments.py @@ -61,6 +61,12 @@ class Payments(db.Model): return pay_data + @classmethod + def get_member_payments_by_member_id(cls, member_id): + member_payments = cls.query.filter_by(member_id=str(member_id)) + if not member_payments: + return None + return member_payments def to_dict(self): return { @@ -81,18 +87,3 @@ class Payments(db.Model): def __repr__(self): return f'' - - ''' - id SERIAL, - uid uuid DEFAULT uuid_generate_v4(), - member_id INT REFERENCES members(id), - option_name VARCHAR(100) REFERENCES subscription_options(option_name), - option_type VARCHAR(25), - payment_uid VARCHAR(100) UNIQUE NOT NULL, - amount INT DEFAULT 0, - status INT DEFAULT 1, - added timestamp without time zone DEFAULT now(), - sub_start timestamp without time zone, - next_billing timestamp without time zone, - sub_stop timestamp without time zone - '''