from flask import session, jsonify from app.models.loan import Loan from app.utils.logger import logger from app.api.services.base_service import BaseService from app.api.schemas.eligibility_check import EligibilityCheckSchema 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 Offer, RACCheck, Members, MembersActions 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 from app.api.schemas.user import UserSchema import datetime import jwt import random from app.config import Config class AccountService(BaseService): @staticmethod def process_bar_request(data): bar_data = { "last_update": datetime.datetime.utcnow(), "top_bar": [ {"id": "1", "description": "Contacts", "last_update": "10-10-2010 11:00 AM", "value": random.randint(0, 10), "data_span": 'Last 2 months'}, {"id": "2", "description": "Site Traffic", "last_update": "10-10-2010 11:30 AM", "value": random.randint(0, 10), "data_span": 'Past 12 hours'}, {"id": "3", "description": "Appointments", "last_update": "10-12-2010 11:30 AM", "value": random.randint(0, 10), "data_span": 'Last 14 days'}, {"id": "4", "description": "Purchases", "last_update": "10-12-2010 11:30 AM", "value": random.randint(0, 10), "data_span": 'Last 3 months'}, ] } return ResponseHelper.success(data=bar_data) @staticmethod def process_action_request(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_actions = MembersActions.get_recent_member_actions(member_data.id) member_actions_data = [] product_data =[] for t in member_actions: product_data.append({ 'id': t.id, 'uid': t.uid, 'product_id': t.product_id, 'name': t.name, 'description': t.description, 'status': t.status, 'added': t.added, 'updated': t.updated, 'banner': t.banner }) action_data = { "recent_actions": member_actions_data, "last_update": datetime.datetime.utcnow(), "initial": random.randint(0, 10), "processing": random.randint(0, 10), "verifying": random.randint(0, 10), "completed": random.randint(0, 10), "actions": member_actions_data } logger.info(f"Member Actions Error: {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() @staticmethod def process_request(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 = Members.get_member_by_uid(uid) # Simulate processing response_data = { "member_id": member.id, "uid": str(uid), "username": member.username, "account_name": member.account_name, "firstname":member.firstname, "lastname": member.lastname, "email": member.email, "room": member.uid, "token": user_token } 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_calendar(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')) dList = [] sample_range = random.randint(20, 60) for x in range(sample_range): timeMin = random.randint(1440, 2880) calDate = datetime.datetime.utcnow() + datetime.timedelta(minutes=timeMin * random.randint(0, 20)) new_l = {"uid": "425611f2-c692-4404-b93d-76ca7a5ce7" + str(x), "title": "Calendar Random Item on " + str(x), "start": calDate, "category": random.randint(1, 4)} dList.append(new_l) calendar_data = { "last_update": datetime.datetime.utcnow(), "category": [ {"cid": "1", "description": "category 01"}, {"cid": "2", "description": "category 02"}, {"cid": "3", "description": "category 03"}, {"cid": "4", "description": "category 04"}, ], "list": dList } return ResponseHelper.success(data=calendar_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()