completed the task
This commit was merged in pull request #18.
This commit is contained in:
+2
-2
@@ -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"]
|
||||
ENTRYPOINT ["scripts/entry.sh"]
|
||||
@@ -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
|
||||
return jsonify({"message": "Internal Server Error"}), 500
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user