Files
FirstCore/app/api/services/transaction.py
T
Azeez Muibi 79f0ac63f6 update
2025-04-11 11:43:43 +01:00

70 lines
2.5 KiB
Python

from flask import jsonify
from app.utils.logger import logger
from app.api.services.base_service import BaseService
from app.models.transaction import Transaction
from datetime import datetime
class TransactionService(BaseService):
@staticmethod
def process_request(filters=None):
"""
Process the get transactions request.
Args:
filters (dict, optional): Filters for the transactions query.
Returns:
dict: A standardized response with transactions data.
"""
try:
if filters is None:
filters = {}
# Extract filters
account_id = filters.get('account_id')
transaction_type = filters.get('type')
channel = filters.get('channel')
start_date = filters.get('start_date')
end_date = filters.get('end_date')
# Convert string dates to datetime objects if provided
if start_date and isinstance(start_date, str):
start_date = datetime.fromisoformat(start_date.replace('Z', '+00:00'))
if end_date and isinstance(end_date, str):
end_date = datetime.fromisoformat(end_date.replace('Z', '+00:00'))
# Get transactions with optional filters
transactions = Transaction.get_all_transactions(
account_id=account_id,
transaction_type=transaction_type,
channel=channel,
start_date=start_date,
end_date=end_date
)
# Convert transactions to dictionary format
transactions_data = []
for transaction in transactions:
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(),
'updated_at': transaction.updated_at.isoformat()
})
response_data = {
'transactions': transactions_data,
'count': len(transactions_data)
}
return response_data
except Exception as e:
logger.error(f"An error occurred: {str(e)}", exc_info=True)
return jsonify({
"message": "Internal Server Error"
}) , 500