From 50e489a8e026c328904bf41bbf4b3c0c7ed2efe4 Mon Sep 17 00:00:00 2001 From: ribardej Date: Wed, 12 Nov 2025 13:29:20 +0100 Subject: [PATCH] feat(tests): implemented local test DB container for isolation --- 7project/report.md | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/7project/report.md b/7project/report.md index 16ce134..2a7e718 100644 --- a/7project/report.md +++ b/7project/report.md @@ -1,9 +1,9 @@ # Personal finance tracker -> **Instructions**: + ## Project Overview @@ -12,15 +12,21 @@ **Group Members**: - 289229, Lukáš Trkan, lukastrkan -- 289258, Dejan Ribarovski, derib2613, ribardej +- 289258, Dejan Ribarovski, ribardej (derib2613) **Brief Description**: -Our application is a finance tracker, so a person can easily track his cash flow -through multiple bank accounts. Person can label transactions with custom categories -and later filter by them. +Our application allows users to easily track their cash flow +through multiple bank accounts. Users can label their transactions with custom categories that can be later used for +filtering and visualization. New transactions are automatically fetched in the background. ## Architecture Overview -Our system is a full‑stack web application composed of a React frontend, a FastAPI backend, a PostgreSQL database, and asynchronous background workers powered by Celery with RabbitMQ. Redis is available for caching/kv and may be used by Celery as a result backend. The backend exposes REST endpoints for authentication (email/password and OAuth), users, categories, and transactions. A thin controller layer (FastAPI routers) lives under app/api. Infrastructure for Kubernetes is provided via OpenTofu (Terraform‑compatible) modules and the application is packaged via a Helm chart. +Our system is a full‑stack web application composed of a React frontend, a FastAPI backend, +a PostgreSQL database, and asynchronous background workers powered by Celery with RabbitMQ. +Redis is available for caching/kv and may be used by Celery as a result backend. The backend +exposes REST endpoints for authentication (email/password and OAuth), users, categories, +transactions, exchange rates and bank APIs. A thin controller layer (FastAPI routers) lives under app/api. +Infrastructure for Kubernetes is provided via OpenTofu (Terraform‑compatible) modules and +the application is packaged via a Helm chart. ### High-Level Architecture @@ -34,20 +40,27 @@ flowchart LR client[Client/Frontend] <--> svc[Backend API] svc --> proc_queue svc <--> db[(Database)] + svc <--> api[(UniRate API)] ``` The workflow works in the following way: - Client connects to the frontend. After login, frontend automatically fetches the stored transactions from -the database via the backend API +the database via the backend API and currency rates from UniRate API. - When the client opts for fetching new transactions via the Bank API, the backend delegates the task to a background worker service via the Message queue. - After successful load, these transactions are stored to the database and displayed to the client -- There is also a Task planner, that executes periodic tasks, like fetching new transactions automatically from the Bank API +- There is also a Task planner, that executes periodic tasks, like fetching new transactions automatically from the Bank APIs + +### Features +- The stored transactions are encrypted in the DB for security reasons. +- For every pull request the full APP is deployed on a separate URL and the tests are run by github CI/CD +- On every push to main, the production app is automatically updated +- ### Components - Frontend (frontend/): React + TypeScript app built with Vite. Talks to the backend via REST, handles login/registration, shows latest transactions, filtering, and allows adding transactions. -- Backend API (backend/app): FastAPI app with routers under app/api for auth, categories, and transactions. Uses FastAPI Users for auth (JWT + OAuth), SQLAlchemy ORM, and Pydantic v2 schemas. +- Backend API (backend/app): FastAPI app with routers under app/api for auth, users, categories, transactions, exchange rates and bankAPI. Uses FastAPI Users for auth (JWT + OAuth), SQLAlchemy ORM, and Pydantic v2 schemas. - Worker service (backend/app/workers): Celery worker handling asynchronous tasks (e.g., sending verification emails, future background processing). - Database (PostgreSQL): Persists users, categories, transactions; schema managed by Alembic migrations. - Message Queue (RabbitMQ): Transports background jobs from the API to the worker. @@ -59,7 +72,7 @@ to a background worker service via the Message queue. - Backend: Python, FastAPI, FastAPI Users, SQLAlchemy, Pydantic, Alembic, Celery - Frontend: React, TypeScript, Vite -- Database: MariaDB (Maxscale) +- Database: MariaDB with Maxscale - Background jobs: RabbitMQ, Celery - Containerization/Orchestration: Docker, Docker Compose (dev), Kubernetes, Helm - IaC/Platform: Proxmox, Talos, Cloudflare pages, OpenTofu (Terraform), cert-manager, MetalLB, Cloudflare Tunnel, Prometheus, Loki @@ -86,7 +99,7 @@ to a background worker service via the Message queue. ### Environment Variables (common) # TODO: UPDATE -- Backend: SECRET, FRONTEND_URL, BACKEND_URL, DATABASE_URL, RABBITMQ_URL, REDIS_URL +- Backend: SECRET, FRONTEND_URL, BACKEND_URL, DATABASE_URL, RABBITMQ_URL, REDIS_URL, UNIRATE_API_KEY - OAuth vars (Backend): MOJEID_CLIENT_ID/SECRET, BANKID_CLIENT_ID/SECRET (optional) - Frontend: VITE_BACKEND_URL