from flask import Blueprint, request, jsonify, send_from_directory from app.api.services import ( AuthorizationService, TransactionService, LoanService, ) from app.utils.logger import logger from app.api.middlewares import enforce_json, require_auth import os from flask_jwt_extended import ( JWTManager, jwt_required, create_access_token, get_jwt_identity, create_refresh_token, ) api = Blueprint("api", __name__) @api.before_request def cors_middleware(): """Middleware applied globally to all API routes in this blueprint""" return enforce_json() # Swagger JSON file @api.route("/swagger.json", methods=["GET"]) def swagger_json(): swagger_dir = os.path.join("swagger") return send_from_directory(swagger_dir, "digifi_swagger.json") @api.route("/swagger/") def serve_paths(filename): swagger_dir = os.path.join("swagger") return send_from_directory(swagger_dir, filename) # Get All Transactions Endpoint @api.route("/transactions", methods=["GET"]) # @jwt_required() def get_transactions(): # Extract query parameters for filtering filters = { 'account_id': request.args.get('account_id'), 'type': request.args.get('type'), 'channel': request.args.get('channel'), 'start_date': request.args.get('start_date'), 'end_date': request.args.get('end_date') } # logger.info(f"Get transactions request received with filters: {filters}") response = TransactionService.process_request(filters) return response # Get All Loans Endpoint @api.route("/loans", methods=["GET"]) # @jwt_required() def get_loans(): # Extract query parameters for filtering filters = { 'customer_id': request.args.get('customer_id'), 'account_id': request.args.get('account_id'), 'status': request.args.get('status'), 'offer_id': request.args.get('offer_id'), 'product_id': request.args.get('product_id'), 'start_date': request.args.get('start_date'), 'end_date': request.args.get('end_date'), 'due_before': request.args.get('due_before'), 'due_after': request.args.get('due_after') } # logger.info(f"Get loans request received with filters: {filters}") response = LoanService.process_request(filters) return response # Authorize endpoint @api.route("/Authorize", methods=["POST"]) def authorize(): data = request.get_json() # logger.info(f"Authorize request received: {data}") response = AuthorizationService.process_request(data) return response # Authorize refresh endpoint @api.route("/AuthorizeRefresh", methods=["POST"]) @jwt_required(refresh=True) def refresh(): data = request.get_json() # logger.info(f"Authorize refresh request received: {data}") response = AuthorizationService.process_refresh_request() return response