def METHOD_NAME(session: Session, args: GetUSDCTransactionsArgs):
    transaction_type = args.get("transaction_type", None)
    transaction_method = args.get("transaction_method", None)
    sort_method = args.get("sort_method")
    sort_direction = args.get("sort_direction")
    query: Query = (
        session.query(USDCTransactionsHistory)
        .select_from(User)
        .filter(User.user_id == args["user_id"], User.is_current == True)
        .join(USDCUserBankAccount, USDCUserBankAccount.ethereum_address == User.wallet)
        .join(
            USDCTransactionsHistory,
            USDCTransactionsHistory.user_bank == USDCUserBankAccount.bank_account,
        )
    )
    if transaction_type is not None:
        query = query.filter(
            USDCTransactionsHistory.transaction_type == transaction_type
        )
    if transaction_method is not None:
        query = query.filter(USDCTransactionsHistory.method == transaction_method)
    sort_fn = desc if sort_direction == SortDirection.desc else asc
    if sort_method == TransactionSortMethod.date:
        query = query.order_by(sort_fn(USDCTransactionsHistory.transaction_created_at))
    elif sort_method == TransactionSortMethod.transaction_type:
        query = query.order_by(
            sort_fn(USDCTransactionsHistory.transaction_type),
            desc(USDCTransactionsHistory.transaction_created_at),
        )
    query = paginate_query(query)
    results: List[USDCTransactionsHistory] = query.all()
    return results