- Dodano graf zależności (auth + public muszą być razem)
- utils/decorators.py wymaga url_for('auth.login') i url_for('public.index')
- Faza 2 jest krytyczna - blokuje wszystkie kolejne fazy
- Zaktualizowano harmonogram z kolumną zależności
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
15 KiB
Plan Refaktoryzacji: Modularny Monolit
Data utworzenia: 2026-01-31 Status: W PLANOWANIU Cel: Redukcja app.py z 15,570 → ~500 linii
Stan obecny
Metryki app.py
| Metryka | Wartość |
|---|---|
| Linie kodu | 15,570 |
| Routes (@app.route) | 235 |
| Funkcje (def) | 258 |
| Funkcje pomocnicze | ~30 |
Rozkład routes według kategorii
| Kategoria | Ilość routes | Linie (szac.) | Priorytet |
|---|---|---|---|
| admin/* | 85 | ~4,000 | Średni |
| api/* | 85 | ~3,500 | Średni |
| zopk/* | 32 | ~2,500 | Niski |
| public (/, /company, /search) | ~20 | ~800 | Wysoki |
| forum/* | ~15 | ~600 | Średni |
| auth (login, register) | 8 | ~500 | Wysoki |
| account (konto, settings) | 13 | ~500 | Średni |
| messages (wiadomości) | ~10 | ~400 | Średni |
| chat/* | 8 | ~400 | Niski |
| audits (seo, gbp, it, krs) | ~25 | ~2,000 | Niski |
| honeypot | 10 | ~20 | Niski |
Blueprinty - aktualny stan
| Blueprint | Status | Linie | Routes |
|---|---|---|---|
| reports | ✅ Wdrożony | 198 | 4 |
| community/contacts | ✅ Wdrożony | ~200 | 6 |
| community/classifieds | ✅ Wdrożony | ~250 | 4 |
| community/calendar | ✅ Wdrożony | ~200 | 3 |
| education | ✅ Wdrożony | 59 | 2 |
| Razem wdrożone | ~900 | 19 | |
| Pozostało w app.py | ~14,700 | 216 |
Funkcje pomocnicze do wydzielenia
# utils/validators.py
validate_email(email)
validate_password(password)
sanitize_input(text, max_length)
# utils/notifications.py
create_notification(user_id, title, message, ...)
create_news_notification(company_id, news_id, news_title)
# utils/analytics.py
get_or_create_analytics_session()
track_conversion(event_type, company_id, ...)
track_page_view()
log_brave_api_call(user_id, feature, company_name)
# utils/security.py
check_geoip()
set_security_headers(response)
is_admin_exempt()
# utils/api_usage.py
get_free_tier_usage()
get_brave_api_usage()
# utils/filters.py
ensure_url_filter(url)
Analiza zależności
Funkcje pomocnicze
| Funkcja | Lokalizacja | Status |
|---|---|---|
sanitize_input() |
utils/helpers.py | ✅ Gotowe |
validate_email() |
utils/helpers.py | ✅ Gotowe |
validate_password() |
utils/helpers.py | ✅ Gotowe |
ensure_url() |
utils/helpers.py | ✅ Gotowe |
admin_required |
utils/decorators.py | ✅ Gotowe |
verified_required |
utils/decorators.py | ✅ Gotowe |
Dekoratory - zależności krytyczne!
# utils/decorators.py używa:
url_for('auth.login') # Wymaga blueprintu 'auth'
url_for('public.index') # Wymaga blueprintu 'public'
WNIOSEK: Blueprinty auth i public muszą być wdrożone RAZEM, zanim można używać dekoratorów w innych blueprintach.
Graf zależności
utils/helpers.py ──────────────────────────────────────┐
│ │
▼ │
utils/decorators.py ─────► wymaga: auth + public │
│ │
▼ │
┌──────────────────────────────────────────────────────┴─┐
│ FAZA 2 (KRYTYCZNA - razem!) │
│ ┌─────────┐ ┌─────────┐ │
│ │ auth │◄──►│ public │ ◄── wzajemne url_for │
│ └─────────┘ └─────────┘ │
└────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ FAZA 3+: Wszystkie pozostałe blueprinty │
│ - mogą używać utils/decorators.py │
│ - mogą używać url_for('auth.login') │
│ - mogą używać url_for('public.index') │
└─────────────────────────────────────────────────────────┘
Plan fazowy (z uwzględnieniem zależności)
Faza 2: Auth + Public (RAZEM - KRYTYCZNA!)
Szacowany czas: 4-5 godzin Redukcja app.py: ~1,300 linii WAŻNE: Te dwa blueprinty MUSZĄ być wdrożone razem!
2.1 Blueprint: auth
| Route | Endpoint | Metody |
|---|---|---|
| /register | register | GET, POST |
| /login | login | GET, POST |
| /logout | logout | GET |
| /verify-2fa | verify_2fa | GET, POST |
| /forgot-password | forgot_password | GET, POST |
| /reset-password/ | reset_password | GET, POST |
| /verify-email/ | verify_email | GET |
| /resend-verification | resend_verification | GET, POST |
Zależności:
validate_email(),validate_password()send_registration_notification()- Flask-Login
2.2 Blueprint: public
| Route | Endpoint |
|---|---|
| / | index |
| /company/ | company_detail |
| /company/ | company_detail_by_slug |
| /company//recommend | company_recommend |
| /osoba/ | person_detail |
| /search | search |
| /aktualnosci | events |
| /nowi-czlonkowie | new_members |
| /mapa-polaczen | connections_map |
| /release-notes | release_notes |
Po wdrożeniu Fazy 2:
url_for('auth.login')działa ✅url_for('public.index')działa ✅- Można używać
utils/decorators.pyw kolejnych fazach ✅
Faza 3: Account + Forum
Szacowany czas: 3-4 godziny Redukcja app.py: ~1,100 linii Zależności: auth, public (Faza 2)
3.1 Blueprint: account
| Route | Endpoint | Metody |
|---|---|---|
| /konto | account_index | GET, POST |
| /konto/prywatnosc | account_privacy | GET, POST |
| /konto/bezpieczenstwo | account_security | GET |
| /konto/blokady | account_blocks | GET |
| /konto/blokady/dodaj | account_blocks_add | POST |
| /konto/blokady/usun/ | account_blocks_remove | POST |
| /settings/2fa | settings_2fa | GET, POST |
| /settings/privacy | settings_privacy | GET, POST |
| /settings/blocks | settings_blocks | GET |
| /settings/blocks/add | settings_blocks_add | POST |
| /settings/blocks/remove/ | settings_blocks_remove | POST |
| /dashboard | dashboard | GET |
3.2 Blueprint: forum
| Route | Endpoint |
|---|---|
| /forum | forum_index |
| /forum/nowy | forum_new_topic |
| /forum/ | forum_topic |
| /forum//odpowiedz | forum_reply |
| /admin/forum | admin_forum |
| /admin/forum/topic//pin | admin_forum_pin |
| /admin/forum/topic//lock | admin_forum_lock |
| /admin/forum/topic//delete | admin_forum_delete_topic |
| /admin/forum/reply//delete | admin_forum_delete_reply |
| /admin/forum/topic//status | admin_forum_change_status |
Faza 4: Messages + Notifications
Szacowany czas: 2 godziny Redukcja app.py: ~600 linii
4.1 Blueprint: messages
| Route | Endpoint |
|---|---|
| /wiadomosci | messages_inbox |
| /wiadomosci/wyslane | messages_sent |
| /wiadomosci/nowa | messages_new |
| /wiadomosci/wyslij | messages_send |
| /wiadomosci/ | messages_view |
| /wiadomosci//odpowiedz | messages_reply |
| /api/messages/unread-count | api_messages_unread |
4.2 Blueprint: notifications (API)
| Route | Endpoint |
|---|---|
| /api/notifications | api_notifications_list |
| /api/notifications//read | api_notifications_read |
| /api/notifications/read-all | api_notifications_read_all |
| /api/notifications/unread-count | api_notifications_unread |
Faza 5: Chat (NordaGPT)
Szacowany czas: 2 godziny Redukcja app.py: ~400 linii
| Route | Endpoint |
|---|---|
| /chat | chat_index |
| /api/chat/settings | api_chat_settings |
| /api/chat/start | api_chat_start |
| /api/chat//message | api_chat_message |
| /api/chat//history | api_chat_history |
| /api/chat/conversations | api_chat_conversations |
| /api/chat//delete | api_chat_delete |
| /api/chat/feedback | api_chat_feedback |
Faza 6: Admin panels
Szacowany czas: 6-8 godzin Redukcja app.py: ~4,000 linii
6.1 admin/users (~10 routes)
6.2 admin/fees (~5 routes)
6.3 admin/analytics (~10 routes)
6.4 admin/ai (~5 routes)
6.5 admin/status (~10 routes)
6.6 admin/security (~5 routes)
6.7 admin/announcements (~10 routes)
6.8 admin/recommendations (~5 routes)
Faza 7: Audits
Szacowany czas: 4-5 godzin Redukcja app.py: ~2,000 linii
7.1 audits/seo (~10 routes)
7.2 audits/gbp (~5 routes)
7.3 audits/social (~5 routes)
7.4 audits/it (~10 routes)
7.5 audits/krs (~5 routes)
7.6 audits/digital (~2 routes)
Faza 8: ZOPK
Szacowany czas: 4-5 godzin Redukcja app.py: ~2,500 linii
| Moduł | Routes |
|---|---|
| zopk/public | 4 |
| zopk/admin | 5 |
| zopk/news | 15 |
| zopk/knowledge | 20 |
| zopk/timeline | 8 |
Faza 9: API misc + Honeypot
Szacowany czas: 2 godziny Redukcja app.py: ~500 linii
- api/validation (check-email, verify-nip, verify-krs)
- api/analytics (track, heartbeat, scroll, error, performance)
- api/recommendations
- api/companies
- api/connections
- honeypot (wp-admin, .env, etc.)
Faza 10: Utils extraction
Szacowany czas: 2 godziny
Wydzielenie funkcji pomocniczych:
- utils/validators.py
- utils/notifications.py
- utils/analytics.py
- utils/security.py
- utils/api_usage.py
- utils/filters.py
Docelowa struktura
nordabiz/
├── app.py # ~500 linii (tylko init + config)
├── config.py # Konfiguracja środowisk
├── extensions.py # Flask extensions (csrf, limiter, login)
│
├── blueprints/
│ ├── __init__.py # register_blueprints()
│ │
│ ├── auth/ # Faza 2
│ │ ├── __init__.py
│ │ └── routes.py
│ │
│ ├── account/ # Faza 2
│ │ ├── __init__.py
│ │ └── routes.py
│ │
│ ├── public/ # Faza 3
│ │ ├── __init__.py
│ │ └── routes.py
│ │
│ ├── forum/ # Faza 3
│ │ ├── __init__.py
│ │ └── routes.py
│ │
│ ├── messages/ # Faza 4
│ │ ├── __init__.py
│ │ └── routes.py
│ │
│ ├── chat/ # Faza 5
│ │ ├── __init__.py
│ │ └── routes.py
│ │
│ ├── admin/ # Faza 6
│ │ ├── __init__.py
│ │ ├── users.py
│ │ ├── fees.py
│ │ ├── analytics.py
│ │ ├── ai.py
│ │ ├── status.py
│ │ ├── security.py
│ │ ├── announcements.py
│ │ └── recommendations.py
│ │
│ ├── audits/ # Faza 7
│ │ ├── __init__.py
│ │ ├── seo.py
│ │ ├── gbp.py
│ │ ├── social.py
│ │ ├── it.py
│ │ ├── krs.py
│ │ └── digital.py
│ │
│ ├── zopk/ # Faza 8
│ │ ├── __init__.py
│ │ ├── public.py
│ │ ├── admin.py
│ │ ├── news.py
│ │ ├── knowledge.py
│ │ └── timeline.py
│ │
│ ├── api/ # Faza 9
│ │ ├── __init__.py
│ │ ├── validation.py
│ │ ├── analytics.py
│ │ ├── recommendations.py
│ │ ├── companies.py
│ │ └── connections.py
│ │
│ ├── community/ # ✅ Faza 1 (DONE)
│ │ ├── contacts/
│ │ ├── classifieds/
│ │ └── calendar/
│ │
│ ├── reports/ # ✅ Faza 1 (DONE)
│ │
│ └── education/ # ✅ Faza 1 (DONE)
│
├── utils/ # Faza 10
│ ├── __init__.py
│ ├── validators.py
│ ├── notifications.py
│ ├── analytics.py
│ ├── security.py
│ ├── api_usage.py
│ ├── filters.py
│ ├── decorators.py # ✅ Istnieje
│ └── helpers.py # ✅ Istnieje
│
└── services/ # ✅ Istnieje (14 plików)
├── gemini_service.py
├── search_service.py
├── email_service.py
└── ...
Harmonogram szacunkowy
| Faza | Zakres | Czas | Zależności | Status |
|---|---|---|---|---|
| 1 | reports, community, education | 4h | utils/helpers | ✅ DONE |
| 2 | auth + public (RAZEM!) | 5h | utils/helpers | 🔜 Następna |
| 3 | account, forum | 4h | Faza 2 | ⏳ |
| 4 | messages, notifications | 2h | Faza 2 | ⏳ |
| 5 | chat | 2h | Faza 2 | ⏳ |
| 6 | admin (8 modułów) | 8h | Faza 2 + decorators | ⏳ |
| 7 | audits (6 modułów) | 5h | Faza 2 + decorators | ⏳ |
| 8 | zopk (5 modułów) | 5h | Faza 2 + decorators | ⏳ |
| 9 | api misc, honeypot | 2h | Faza 2 | ⏳ |
| 10 | cleanup (usunięcie duplikatów z app.py) | 2h | Wszystkie fazy | ⏳ |
| RAZEM | ~39h |
UWAGA: Faza 2 jest krytyczna - auth i public muszą być wdrożone RAZEM, bo utils/decorators.py wymaga obu blueprintów.
Zasady refaktoryzacji
1. url_for w blueprintach
# Wewnątrz blueprintu - z kropką
url_for('.endpoint')
# W szablonach - pełna nazwa
url_for('blueprint.endpoint')
2. Testowanie po każdej fazie
# Lokalnie
python3 app.py
curl http://localhost:5000/health
# Testy manualne każdego route
3. Procedura wdrożenia
# 1. Commit lokalny
git add . && git commit -m "refactor(phase-X): ..."
# 2. Test lokalny
# 3. Push
git push origin master && git push inpi master
# 4. Deploy
ssh maciejpi@10.22.68.249 "cd /var/www/nordabiznes && sudo -u www-data git pull && sudo systemctl restart nordabiznes"
# 5. Weryfikacja produkcji
curl https://nordabiznes.pl/health
4. Rollback
git revert HEAD
git push origin master && git push inpi master
ssh maciejpi@10.22.68.249 "cd /var/www/nordabiznes && sudo -u www-data git pull && sudo systemctl restart nordabiznes"
Metryki sukcesu
| Metryka | Przed | Po | Cel |
|---|---|---|---|
| Linie app.py | 15,570 | ~500 | -97% |
| Routes w app.py | 235 | ~5 | -98% |
| Funkcje w app.py | 258 | ~10 | -96% |
| Blueprinty | 5 | ~25 | +400% |
| Czas uruchomienia | ? | bez zmian | = |
| Funkcjonalność | 100% | 100% | = |
Ostatnia aktualizacja: 2026-01-31