feat: Transform to web architecture with FastAPI backend

This major update transforms leggen from CLI-only to a web-ready
architecture while maintaining full CLI compatibility.

New Features:
- FastAPI backend service (leggend) with comprehensive REST API
- Background job scheduler with configurable cron (replaces Ofelia)
- All CLI commands refactored to use API endpoints
- Docker configuration updated for new services
- API client with health checks and error handling

API Endpoints:
- /api/v1/banks/* - Bank connections and institutions
- /api/v1/accounts/* - Account management and balances
- /api/v1/transactions/* - Transaction retrieval with filtering
- /api/v1/sync/* - Manual sync and scheduler configuration
- /api/v1/notifications/* - Notification settings management

CLI Enhancements:
- New --api-url option and LEGGEND_API_URL environment variable
- Enhanced sync command with --wait and --force options
- Improved transactions command with --full and --limit options
- Automatic fallback and health checking

Breaking Changes:
- compose.yml structure updated (leggend service added)
- Ofelia scheduler removed (internal scheduler used instead)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Elisiário Couto
2025-09-02 00:01:35 +01:00
committed by Elisiário Couto
parent 73d6bd32db
commit 91f53b35b1
39 changed files with 2810 additions and 347 deletions

View File

@@ -3,7 +3,7 @@ name = "leggen"
version = "0.6.11"
description = "An Open Banking CLI"
authors = [{ name = "Elisiário Couto", email = "elisiario@couto.io" }]
requires-python = "~=3.12"
requires-python = "=3.12.0"
readme = "README.md"
license = "MIT"
keywords = [
@@ -31,6 +31,10 @@ dependencies = [
"tabulate>=0.9.0,<0.10",
"pymongo>=4.6.1,<5",
"discord-webhook>=1.3.1,<2",
"fastapi>=0.104.0,<1",
"uvicorn[standard]>=0.24.0,<1",
"apscheduler>=3.10.0,<4",
"tomli-w>=1.0.0,<2",
]
[project.urls]
@@ -38,6 +42,7 @@ Repository = "https://github.com/elisiariocouto/leggen"
[project.scripts]
leggen = "leggen.main:cli"
leggend = "leggend.main:main"
[dependency-groups]
dev = [