From bbb919d93327887ad32b4215881162bdb45fd0a2 Mon Sep 17 00:00:00 2001 From: Chinenye Nmoh Date: Wed, 28 May 2025 12:45:17 +0100 Subject: [PATCH] completed the task --- Dockerfile | 4 +- app/api/services/dashboard_service.py | 64 ++++++++++++------------- app/api/services/transaction_service.py | 1 + scripts/{enterypointone.sh => entry.sh} | 0 4 files changed, 33 insertions(+), 36 deletions(-) rename scripts/{enterypointone.sh => entry.sh} (100%) diff --git a/Dockerfile b/Dockerfile index f07b1ba..7765b85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,6 +19,6 @@ ENV FLASK_RUN_HOST=0.0.0.0 #COPY scripts/enterypointone.sh scripts/enterypointone.sh -RUN chmod +x scripts/enterypointone.sh +RUN chmod +x scripts/entry.sh -ENTRYPOINT ["scripts/enterypointone.sh"] \ No newline at end of file +ENTRYPOINT ["scripts/entry.sh"] \ No newline at end of file diff --git a/app/api/services/dashboard_service.py b/app/api/services/dashboard_service.py index a728966..0b0d21f 100644 --- a/app/api/services/dashboard_service.py +++ b/app/api/services/dashboard_service.py @@ -4,34 +4,30 @@ from app.api.services.base_service import BaseService from app.models.transaction import Transaction from app.models.loan import Loan from sqlalchemy import func, desc -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from app.extensions import db +from app.api.enums.transaction_type import TransactionType class DashboardService(BaseService): @staticmethod def get_dashboard_data(): - """ - Get dashboard summary data. - - Returns: - dict: A standardized response with dashboard data. - """ try: - # Get current date and start of the week now = datetime.now() start_of_week = now - timedelta(days=now.weekday()) start_of_week = start_of_week.replace(hour=0, minute=0, second=0, microsecond=0) - # Get loans data for the current week + # Calculate 24 hours ago + last_24_hours = datetime.now(timezone.utc) - timedelta(hours=24) + + # Loans this week loans_this_week = db.session.query( func.sum(Loan.initial_loan_amount) ).filter( Loan.created_at >= start_of_week ).scalar() or 0 - # Get payments data for the current week - # Assuming payments are transactions with type 'PAYMENT' + # Payments this week payments_this_week = db.session.query( func.count(Transaction.id) ).filter( @@ -39,51 +35,53 @@ class DashboardService(BaseService): Transaction.type == 'PAYMENT' ).scalar() or 0 - # Get request summary counts - # These are placeholders - needed to adjust based on your actual data model + + # Request summary for the last 24 hours eligibility_check_count = db.session.query( func.count(Transaction.id) ).filter( - Transaction.type == 'ELIGIBILITY_CHECK' + Transaction.type == TransactionType.ELIGIBILITY_CHECK.value, + Transaction.created_at >= last_24_hours ).scalar() or 0 select_offer_count = db.session.query( func.count(Transaction.id) ).filter( - Transaction.type == 'SELECT_OFFER' + Transaction.type == TransactionType.SELECT_OFFER.value, + Transaction.created_at >= last_24_hours ).scalar() or 0 provide_loan_count = db.session.query( func.count(Transaction.id) ).filter( - Transaction.type == 'PROVIDE_LOAN' + Transaction.type == TransactionType.PROVIDE_LOAN.value, + Transaction.created_at >= last_24_hours ).scalar() or 0 repayment_count = db.session.query( func.count(Transaction.id) ).filter( - Transaction.type == 'REPAYMENT' + Transaction.type == TransactionType.REPAYMENT.value, + Transaction.created_at >= last_24_hours ).scalar() or 0 + - # Get recent transactions + # Recent transactions (not limited to 24 hrs, just latest 15) recent_transactions = Transaction.query.order_by( Transaction.id.desc() ).limit(15).all() - # Format recent transactions - recent_transactions_data = [] - for transaction in recent_transactions: - recent_transactions_data.append({ - 'id': transaction.id, - 'transaction_id': transaction.transaction_id, - 'account_id': transaction.account_id, - 'type': transaction.type, - 'channel': transaction.channel, - 'created_at': transaction.created_at.isoformat() if transaction.created_at else None, - 'updated_at': transaction.updated_at.isoformat() if transaction.updated_at else None - }) + recent_transactions_data = [{ + 'id': t.id, + 'transaction_id': t.transaction_id, + 'account_id': t.account_id, + 'type': t.type, + 'channel': t.channel, + 'created_at': t.created_at.isoformat() if t.created_at else None, + 'updated_at': t.updated_at.isoformat() if t.updated_at else None + } for t in recent_transactions] - # Prepare response data + # Final response dashboard_data = { "loans": { "value": float(loans_this_week), @@ -110,6 +108,4 @@ class DashboardService(BaseService): except Exception as e: logger.error(f"An error occurred while getting dashboard data: {str(e)}", exc_info=True) - return jsonify({ - "message": "Internal Server Error" - }), 500 \ No newline at end of file + return jsonify({"message": "Internal Server Error"}), 500 diff --git a/app/api/services/transaction_service.py b/app/api/services/transaction_service.py index 570489e..be53877 100644 --- a/app/api/services/transaction_service.py +++ b/app/api/services/transaction_service.py @@ -72,6 +72,7 @@ class TransactionService: 'transaction_id': transaction.transaction_id, 'account_id': transaction.account_id, 'type': transaction.type, + 'customer_id': transaction.customer_id, 'channel': transaction.channel, 'created_at': transaction.created_at.isoformat(), 'updated_at': transaction.updated_at.isoformat() diff --git a/scripts/enterypointone.sh b/scripts/entry.sh similarity index 100% rename from scripts/enterypointone.sh rename to scripts/entry.sh -- 2.34.1