Finished the task3 #18

Merged
ameye merged 1 commits from task_3 into master 2025-05-28 12:40:51 +00:00
4 changed files with 33 additions and 36 deletions
+2 -2
View File
@@ -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"]
+30 -34
View File
@@ -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
+1
View File
@@ -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()