SubTracker to backendowe REST API stworzone w Flasku do zarządzania subskrypcjami (np. Netflix, Spotify) wraz z systemem automatycznych przypomnień o płatnościach oraz miesięcznych raportów wydatków wysyłanych e-mailem.
Projekt został zaprojektowany jako aplikacja produkcyjna, z wyraźnym podziałem na warstwy, asynchronicznym przetwarzaniem zadań, schedulerem oraz pełnym środowiskiem uruchomieniowym w Dockerze.
Kluczowe funkcjonalności
- Rejestracja i logowanie użytkowników (JWT: access + refresh)
- Zarządzanie subskrypcjami (CRUD)
- Automatyczne przypomnienia e-mail o płatnościach za 1 i 7 dni
- Generowanie miesięcznych raportów wydatków
- Logowanie każdej próby wysłania przypomnienia (success/failure)
- Token revocation przechowywane w Redis
- Dokumentacja API w Swagger UI
- Postman Collection do testowania endpointów
Architektura
Aplikacja została oparta o podejście event-driven z wykorzystaniem Redis i RQ do obsługi zadań asynchronicznych oraz cyklicznych.
System składa się z:
- Flask REST API
- MySQL + SQLAlchemy + Alembic
- Redis jako:
- backend dla kolejek RQ
- storage dla blokowanych tokenów JWT
- Trzech niezależnych workerów:
- wysyłka maili
- przypomnienia
- raporty miesięczne
- RQ Scheduler uruchamiającego zadania cykliczne (cron)
- Pełnego środowiska Docker Compose (API, DB, Redis, workers, scheduler)
Każde przypomnienie i raport przetwarzane są jako osobne zadanie, co pozwala na izolację, retry i skalowalność.
Technologie
Python · Flask · Flask-Smorest · SQLAlchemy · Alembic · MySQL
Redis · RQ · RQ Scheduler · JWT · Mailgun · Docker · Pytest
Testy
Projekt zawiera testy:
- Unit
- Service
- Integration
Pokrycie testami: 90%
