nordabiz/docs/REFACTORING_STATUS.md
Maciej Pienczyn ad2262388b refactor: Extract forum blueprint (Phase 3)
- Create blueprints/forum/ with 10 routes:
  - forum_index, forum_new_topic, forum_topic, forum_reply
  - admin_forum, admin_forum_pin, admin_forum_lock
  - admin_forum_delete_topic, admin_forum_delete_reply
  - admin_forum_change_status
- Register forum blueprint with backward-compatible aliases
- Remove dead code from app.py (-422 lines)
- app.py: 13,820 → 13,398 lines (-3.1%)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:42:18 +01:00

240 lines
5.8 KiB
Markdown

# Status Refaktoringu app.py
> **Ostatnia aktualizacja:** 2026-01-31
> **Autor sesji:** Claude Opus 4.5
## Stan obecny
### Faza 1 - ✅ WDROŻONA NA PRODUKCJĘ
**Commit:** `66856a6`
**Data wdrożenia:** 2026-01-28
| Blueprint | URL Prefix | Routes | Status |
|-----------|------------|--------|--------|
| reports | `/raporty` | 4 | ✅ Przetestowane |
| contacts | `/kontakty` | 6 | ✅ Przetestowane |
| classifieds | `/tablica` | 4 | ✅ Przetestowane |
| calendar | `/kalendarz` | 3 | ✅ Przetestowane |
| education | `/edukacja` | 2 | ✅ Przetestowane |
---
### Faza 2a - ✅ WDROŻONA NA PRODUKCJĘ
**Data wdrożenia:** 2026-01-31
**Strategia:** Alias Bridge (bezpieczna migracja)
**Commity:** `d5adf02` (blueprinty), `cdd050a` (cleanup), `0ccb109` (docs)
| Blueprint | Routes | Status |
|-----------|--------|--------|
| auth | 20 | ✅ Gotowy, aliasy aktywne |
| public | 11 | ✅ Gotowy, aliasy aktywne |
**Pliki utworzone:**
- `blueprints/auth/__init__.py`
- `blueprints/auth/routes.py` (1,040 linii)
- `blueprints/public/__init__.py`
- `blueprints/public/routes.py` (862 linii)
**Redukcja app.py:**
- Przed: 15,577 linii
- Po: 13,820 linii
- **Usunięto: 1,757 linii (11.3%)**
**Testy (DEV):**
- ✅ Wszystkie endpointy działają
- ✅ Aliasy: `url_for('login')` = `url_for('auth.login')`
- ✅ Istniejące blueprinty działają
---
## Metodologia Refaktoringu (Alias Bridge)
### Dlaczego ta metoda?
Problem: 125+ wywołań `url_for()` w szablonach i kodzie używa starych nazw (`url_for('login')`).
Rozwiązanie: Aliasy pozwalają na stopniową migrację bez "Big Bang".
### Procedura dla każdej fazy
#### Krok 1: Utworzenie blueprintu
```bash
mkdir -p blueprints/<nazwa>
touch blueprints/<nazwa>/__init__.py
touch blueprints/<nazwa>/routes.py
```
```python
# blueprints/<nazwa>/__init__.py
from flask import Blueprint
bp = Blueprint('<nazwa>', __name__)
from . import routes
```
#### Krok 2: Przeniesienie tras
1. Skopiuj funkcje z app.py do `blueprints/<nazwa>/routes.py`
2. Zmień `@app.route` na `@bp.route`
3. Zaktualizuj importy (używaj `from extensions import limiter`)
4. Wewnętrzne url_for: użyj `.endpoint` (z kropką)
#### Krok 3: Rejestracja + aliasy
```python
# blueprints/__init__.py
from blueprints.<nazwa> import bp as <nazwa>_bp
app.register_blueprint(<nazwa>_bp)
_create_endpoint_aliases(app, <nazwa>_bp, {
'stara_nazwa': '<nazwa>.nowa_nazwa',
# ...
})
```
#### Krok 4: Dezaktywacja duplikatów w app.py
```python
# PRZED:
@app.route('/endpoint')
def funkcja():
# PO:
# @app.route('/endpoint') # MOVED TO <nazwa>.<endpoint>
def _old_funkcja():
```
#### Krok 5: Test
```bash
python3 -c "from app import app; print('OK')"
# Test wszystkich endpointów
```
#### Krok 6: Cleanup (po weryfikacji na PROD)
Usuń funkcje z prefiksem `_old_` z app.py.
---
## Harmonogram
**Szczegółowy plan:** [`docs/MODULAR_MONOLITH_PLAN.md`](MODULAR_MONOLITH_PLAN.md)
### Podsumowanie faz
| Faza | Zakres | Routes | Status |
|------|--------|--------|--------|
| **1** | reports, community, education | 19 | ✅ WDROŻONA |
| **2a** | auth + public + cleanup | 31 | ✅ WDROŻONA |
| **3** | forum (10 routes) | 10 | ✅ WDROŻONA |
| **4** | messages, notifications | ~10 | ⏳ |
| **5** | chat | ~8 | ⏳ |
| **6** | admin (8 modułów) | ~60 | ⏳ |
| **7** | audits (6 modułów) | ~35 | ⏳ |
| **8** | zopk (5 modułów) | ~32 | ⏳ |
| **9** | api misc, honeypot | ~25 | ⏳ |
| **10** | final cleanup | - | ⏳ |
**Cel końcowy:** Redukcja app.py z 15,570 → ~500 linii
---
## Metryki optymalizacji
### Po Fazie 1 (2026-01-28)
- app.py: 15,570 → 13,699 linii (-12%)
### Po Fazie 2a (2026-01-31)
- app.py: 15,577 → 13,820 linii
- **Usunięto: 1,757 linii (11.3%)**
- Nowe pliki:
- `blueprints/auth/routes.py` (1,040 linii)
- `blueprints/public/routes.py` (862 linii)
### Po Fazie 3 - Forum (2026-01-31)
- app.py: 13,820 → 13,398 linii
- **Usunięto: 422 linie (3.1%)**
- Nowe pliki:
- `blueprints/forum/__init__.py`
- `blueprints/forum/routes.py` (450 linii)
### Łączna redukcja app.py
- Start: 15,570 linii
- Po Fazie 1: 13,699 linii (-12.0%)
- Po Fazie 2a: 13,820 linii (-11.2% od startu)
- Po Fazie 3: 13,398 linii (-13.9% od startu)
- **Cel końcowy: ~500 linii**
---
## Weryfikacja przed wdrożeniem
### Checklist DEV
```bash
# 1. Import aplikacji
python3 -c "from app import app; print('OK')"
# 2. Test endpointów
python3 -c "
from app import app
with app.test_client() as c:
assert c.get('/').status_code == 200
assert c.get('/login').status_code == 200
assert c.get('/health').status_code == 200
print('All endpoints OK')
"
# 3. Test url_for (aliasy)
python3 -c "
from app import app
from flask import url_for
with app.test_request_context():
assert url_for('login') == '/login'
assert url_for('auth.login') == '/login'
assert url_for('index') == '/'
assert url_for('public.index') == '/'
print('Aliases OK')
"
```
### Checklist PROD
```bash
# Po wdrożeniu
curl -sI https://nordabiznes.pl/health | head -1
curl -sI https://nordabiznes.pl/ | head -1
curl -sI https://nordabiznes.pl/login | head -1
curl -sI https://nordabiznes.pl/release-notes | head -1
```
---
## Lekcje na przyszłość
1. **url_for w blueprintach:**
- Wewnątrz blueprintu: `url_for('.endpoint')` (z kropką)
- W szablonach: `url_for('blueprint.endpoint')` (pełna nazwa)
- Aliasy: `url_for('stara_nazwa')` = `url_for('blueprint.nowa_nazwa')`
2. **Kolejność operacji:**
- Najpierw blueprinty + aliasy
- Potem dezaktywacja duplikatów
- Cleanup dopiero po teście PROD
3. **Bezpieczeństwo:**
- Zawsze zachowuj martwy kod do weryfikacji
- Prefix `_old_` dla zdezaktywowanych funkcji
- Rollback: odkomentuj `@app.route`
---
## Kontakt
W razie problemów z wdrożeniem sprawdź:
- Logi: `/var/log/nordabiznes/`
- Health check: `curl https://nordabiznes.pl/health`
- Rollback: `git revert HEAD && git push`