diff --git a/Dockerfile b/Dockerfile index 7765b85..da5f4cb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,7 +18,10 @@ ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 #COPY scripts/enterypointone.sh scripts/enterypointone.sh +#RUN chmod +x scripts/entry.sh +#ENTRYPOINT ["scripts/entry.sh"] -RUN chmod +x scripts/entry.sh - -ENTRYPOINT ["scripts/entry.sh"] \ No newline at end of file +# Run the application +CMD [ "sh", "-c", \ + "echo 'Starting Gunicorn server...' && \ + exec gunicorn -w 4 -b 0.0.0.0:5000 wsgi:wsgi_app"] diff --git a/app/api/routes/routes.py b/app/api/routes/routes.py index b0d4827..2c1078e 100644 --- a/app/api/routes/routes.py +++ b/app/api/routes/routes.py @@ -123,7 +123,8 @@ def get_loans(): 'page': request.args.get('page', 1), 'limit': request.args.get('limit', 20) } - # logger.info(f"Get loans request received with filters: {filters}") + #logger.info(f"Get loans request received with filters: {filters}") + response = LoanService.process_request(filters) return response diff --git a/app/api/services/loan_service.py b/app/api/services/loan_service.py index 1628e9d..5ad082b 100644 --- a/app/api/services/loan_service.py +++ b/app/api/services/loan_service.py @@ -81,7 +81,7 @@ class LoanService: limit=limit ) - logger.info(f"Result from loans model cme back") + logger.info(f"Result from loans model cme back ") # Convert loans to dictionary format loans_data = [] @@ -98,6 +98,8 @@ class LoanService: 'current_loan_amount': loan.current_loan_amount, 'status': loan.status, 'tenor': loan.tenor, + 'balance': loan.balance, + 'reference': loan.reference, 'product_id': loan.product_id, 'default_penalty_fee': loan.default_penalty_fee, 'continuous_fee': loan.continuous_fee, @@ -106,7 +108,13 @@ class LoanService: 'installment_amount': loan.installment_amount, 'due_date': loan.due_date.isoformat() if loan.due_date else None, 'created_at': loan.created_at.isoformat() if loan.created_at else None, - 'updated_at': loan.updated_at.isoformat() if loan.updated_at else None + 'updated_at': loan.updated_at.isoformat() if loan.updated_at else None, + 'disburseResult': loan.disburse_result, + 'disburseDescription': loan.disburse_description, + 'verifyResult': loan.verify_result, + 'verifyDescription': loan.verify_description, + 'disburseDate': loan.disburse_date.isoformat() if loan.disburse_date else None, + 'disburseVerify': loan.disburse_verify.isoformat() if loan.disburse_verify else None, }) # Calculate total pages diff --git a/app/api/services/repayment_service.py b/app/api/services/repayment_service.py index 48b2dcc..5c24204 100644 --- a/app/api/services/repayment_service.py +++ b/app/api/services/repayment_service.py @@ -69,7 +69,15 @@ class RepaymentService: 'product_id': repayment.product_id, 'transaction_id': repayment.transaction_id, 'created_at': repayment.created_at.isoformat() if repayment.created_at else None, - 'updated_at': repayment.updated_at.isoformat() if repayment.updated_at else None + 'updated_at': repayment.updated_at.isoformat() if repayment.updated_at else None, + 'repay_date': repayment.repay_date.isoformat() if repayment.repay_date else None, + 'initiated_by': repayment.initiated_by, + 'salary_amount': repayment.salary_amount, + 'verify_date': repayment.verify_date.isoformat() if repayment.verify_date else None, + 'repay_result': repayment.repay_result, + 'repay_description': repayment.repay_description, + 'verify_result': repayment.verify_result, + 'verify_description': repayment.verify_description }) # Calculate total pages diff --git a/app/models/loan.py b/app/models/loan.py index 4f5b0ec..0b1f35c 100644 --- a/app/models/loan.py +++ b/app/models/loan.py @@ -36,6 +36,14 @@ class Loan(db.Model): created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc)) updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc)) eligible_amount = db.Column(db.Float, nullable=True, default=0.0) + disburse_date = db.Column(db.DateTime, nullable=True) + disburse_verify = db.Column(db.DateTime, nullable=True) + disburse_result = db.Column(db.String(10), nullable=True) + disburse_description = db.Column(db.String(100), nullable=True) + verify_result = db.Column(db.String(10), nullable=True) + verify_description = db.Column(db.String(100), nullable=True) + reference = db.Column(db.String(50), nullable=True) + balance = db.Column(db.Float, nullable=True, default=0.0) customer = relationship( "Customer", @@ -147,7 +155,15 @@ class Loan(db.Model): 'installment_amount': self.installment_amount, 'due_date': self.due_date.isoformat() if self.due_date else None, 'created_at': self.created_at.isoformat() if self.created_at else None, - 'updated_at': self.updated_at.isoformat() if self.updated_at else None + 'updated_at': self.updated_at.isoformat() if self.updated_at else None, + 'disburseResult': self.disburse_result, + 'disburseDescription': self.disburse_description, + 'verifyResult': self.verify_result, + 'verifyDescription': self.verify_description, + 'disburseDate': self.disburse_date.isoformat() if self.disburse_date else None, + 'disburseVerify': self.disburse_verify.isoformat() if self.disburse_verify else None, + 'reference': self.reference, + 'balance': self.balance, } def __repr__(self): diff --git a/app/models/repayment.py b/app/models/repayment.py index 6635dc2..8bc92a0 100644 --- a/app/models/repayment.py +++ b/app/models/repayment.py @@ -12,6 +12,14 @@ class Repayment(db.Model): created_at = db.Column(db.DateTime, default=datetime.now(timezone.utc)) updated_at = db.Column(db.DateTime, default=datetime.now(timezone.utc), onupdate=datetime.now(timezone.utc)) transaction_id = db.Column(db.String(50)) + repay_date = db.Column(db.DateTime, nullable=True) + initiated_by = db.Column(db.String(50), nullable=True) + salary_amount = db.Column(db.Float, nullable=True, default=0.0) + verify_date = db.Column(db.DateTime, nullable=True) + repay_result = db.Column(db.String(10), nullable=True) + repay_description = db.Column(db.String(100), nullable=True) + verify_result = db.Column(db.String(10), nullable=True) + verify_description = db.Column(db.String(100), nullable=True) @classmethod def get_all_repayments(cls, loan_id=None, customer_id=None, product_id=None, @@ -71,7 +79,16 @@ class Repayment(db.Model): 'product_id': self.product_id, 'transaction_id': self.transaction_id, 'created_at': self.created_at.isoformat() if self.created_at else None, - 'updated_at': self.updated_at.isoformat() if self.updated_at else None + 'updated_at': self.updated_at.isoformat() if self.updated_at else None, + 'repay_date': self.repay_date.isoformat() if self.repay_date else None, + 'initiated_by': self.initiated_by, + 'salary_amount': self.salary_amount, + 'verify_date': self.verify_date.isoformat() if self.verify_date else None, + 'repay_result': self.repay_result, + 'repay_description': self.repay_description, + 'verify_result': self.verify_result, + 'verify_description': self.verify_description + } def __repr__(self): diff --git a/app/swagger/schemas/LoansResponse.json b/app/swagger/schemas/LoansResponse.json index b2a6e6a..bf0304f 100644 --- a/app/swagger/schemas/LoansResponse.json +++ b/app/swagger/schemas/LoansResponse.json @@ -76,6 +76,17 @@ "example": 10500.0, "nullable": true }, + "balance": { + "type": "number", + "format": "float", + "example": 5000.0, + "nullable": true + }, + "reference": { + "type": "string", + "example": "REF12345", + "nullable": true + }, "installment_amount": { "type": "number", "format": "float", diff --git a/app/swagger/schemas/RepaymentsResponse.json b/app/swagger/schemas/RepaymentsResponse.json index f451483..a32cf06 100644 --- a/app/swagger/schemas/RepaymentsResponse.json +++ b/app/swagger/schemas/RepaymentsResponse.json @@ -23,6 +23,50 @@ "example": "TRX123456", "nullable": true }, + "initiated_by": { + "type": "string", + "example": "system", + "nullable": true + }, + "salary_amount": { + "type": "number", + "format": "float", + "example": 1000.0, + "nullable": true + }, + "repay_date": { + "type": "string", + "format": "date-time", + "example": "2025-04-10T16:45:47.879552Z", + "nullable": true + }, + "verify_date": { + "type": "string", + "format": "date-time", + "example": "2025-04-10T16:45:47.879552Z", + "nullable": true + }, + "repay_result": { + "type": "string", + "example": "success", + "nullable": true + }, + "repay_description": { + "type": "string", + "example": "Repayment processed successfully", + "nullable": true + }, + "verify_result": { + "type": "string", + "example": "verified", + "nullable": true + }, + "verify_description": { + "type": "string", + "example": "Verification completed successfully", + "nullable": true + }, + "created_at": { "type": "string", "format": "date-time",