Files
FirstCore/app/api/services/transaction.py
T
Azeez Muibi ad60280c26 update
2025-04-11 11:32:26 +01:00

75 lines
2.6 KiB
Python

from flask import jsonify
from marshmallow import ValidationError
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 ValidationError as err:
logger.error(f"Error retrieving transactions: {str(err)}", exc_info=True)
return jsonify({
'status': 'error',
'message': f'Failed to retrieve transactions: {str(err)}'
}), 500