Skip to content
This repository was archived by the owner on Jun 19, 2026. It is now read-only.

[Bounty $500] Bank Sync Connector Architecture — pluggable bank integrations - #1057

Open
zhangyei1976-dotcom wants to merge 8 commits into
rohitdash08:mainfrom
zhangyei1976-dotcom:main
Open

zhangyei1976-dotcom wants to merge 8 commits into
rohitdash08:mainfrom
zhangyei1976-dotcom:main

Conversation

@zhangyei1976-dotcom

Copy link
Copy Markdown

Bank Sync Connector Architecture — Issue #75

Implements a pluggable bank integration system for FinMind.

Architecture

connectors/
├── __init__.py       # Public API exports
├── base.py           # Abstract BankConnector + BankTransaction dataclass
├── mock.py           # MockBankConnector — synthetic data for dev/test
└── manager.py        # ConnectorManager — registry, import, refresh

Connector Interface (base.py)

  • BankConnector — Abstract base class with three required methods:
    • fetch_transactions(user_id, from_date, to_date, **credentials) → list[BankTransaction]
    • refresh_connection(**credentials) → bool
    • get_connection_status() → dict
  • BankTransaction — Normalized dataclass with to_expense_dict() for DB insertion

Mock Connector (mock.py)

  • Returns 12 synthetic transactions across groceries, salary, utilities, etc.
  • Spread over configurable date range
  • Always returns healthy — perfect for CI and demos

Connector Manager (manager.py)

  • register(connector) / unregister(name) — dynamic connector registry
  • import_transactions(name, user_id, ...) — fetch + normalize
  • refresh(name, user_id, ...) — verify connection + re-import
  • Global singleton via get_connector_manager()

API Routes (routes/connectors.py)

  • GET /api/connectors/ — list all registered connectors
  • GET /api/connectors/<name>/status — connection health
  • POST /api/connectors/<name>/import — import transactions
  • POST /api/connectors/<name>/refresh — refresh + re-import

Adding a Real Bank

class HDFCBankConnector(BankConnector):
    name = "hdfc"
    display_name = "HDFC Bank"

    async def fetch_transactions(self, user_id, from_date, to_date, **creds):
        # Call HDFC API with creds["api_key"]
        ...

Closes #75

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bank Sync Connector Architecture

1 participant