166 lines
15 KiB
Plaintext
166 lines
15 KiB
Plaintext
<mxfile host="draw.io" modified="2026-02-12" agent="Claude Code" type="device">
|
|
<diagram id="a7-modules" name="Struktura Modulow">
|
|
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
|
<root>
|
|
<mxCell id="0"/>
|
|
<mxCell id="1" parent="0"/>
|
|
|
|
<mxCell id="title" value="NordaBiz — Struktura Modułów (Blueprinty)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=22;fontStyle=1;fontColor=#1a1a2e;" vertex="1" parent="1">
|
|
<mxGeometry x="400" y="15" width="530" height="36" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="subtitle" value="17 blueprintów Flask — modularny monolit po refaktoringu app.py (15,570 → 1,557 linii)" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontSize=11;fontColor=#888;" vertex="1" parent="1">
|
|
<mxGeometry x="380" y="48" width="560" height="20" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- CENTRUM: APP.PY -->
|
|
<mxCell id="center" value="<b style="font-size:16px;color:#fff">app.py</b><br><font style="font-size:10px;color:#ccc">1,557 linii<br>Flask factory<br>Blueprint registry</font>" style="ellipse;whiteSpace=wrap;html=1;fillColor=#1a1a2e;strokeColor=#1a1a2e;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="660" y="400" width="140" height="120" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- SERWISY (po lewej) -->
|
|
<mxCell id="svc_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F3E5F5;strokeColor=#7B1FA2;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="40" y="350" width="280" height="230" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="svc_title" value="<b style="font-size:14px;color:#7B1FA2">Serwisy (27)</b>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="356" width="130" height="24" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="s1" value="gemini_service.py — AI Gemini" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="384" width="260" height="22" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="s2" value="search_service.py — Unified Search" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="410" width="260" height="22" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="s3" value="oauth_service.py — Google/Meta OAuth" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="436" width="260" height="22" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="s4" value="benchmark_service.py — Benchmarks" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="462" width="260" height="22" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="s5" value="crux_service.py — Chrome UX Report" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="488" width="260" height="22" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="s6" value="youtube_service.py — YouTube API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#7B1FA2;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="514" width="260" height="22" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="s7" value="+ 21 więcej (database.py, nordabiz_chat.py...)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E1BEE7;strokeColor=#7B1FA2;fontSize=10;align=left;spacingLeft=6;fontStyle=2;" vertex="1" parent="1">
|
|
<mxGeometry x="50" y="544" width="260" height="22" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- STRZAŁKA serwisy → center -->
|
|
<mxCell id="arr_svc" value="import" style="strokeColor=#7B1FA2;strokeWidth=2;fontSize=10;fontColor=#7B1FA2;fontStyle=1;" edge="1" source="svc_bg" target="center" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- BLUEPRINTY GŁÓWNE (góra) -->
|
|
<mxCell id="bp_core_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F2FD;strokeColor=#1565C0;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="440" y="80" width="560" height="140" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp_core_title" value="<b style="font-size:14px;color:#1565C0">Blueprinty Podstawowe (użytkownicy)</b>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
|
|
<mxGeometry x="450" y="86" width="330" height="24" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp1" value="<b>main</b><br><font style="font-size:9px">Katalog, strona<br>główna, search</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="455" y="114" width="100" height="46" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp2" value="<b>auth</b><br><font style="font-size:9px">Login, rejestracja<br>2FA, reset hasła</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="565" y="114" width="100" height="46" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp3" value="<b>company</b><br><font style="font-size:9px">Profile firm<br>edycja danych</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="675" y="114" width="100" height="46" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp4" value="<b>chat</b><br><font style="font-size:9px">NordaGPT<br>Gemini AI</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="785" y="114" width="100" height="46" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp5" value="<b>account</b><br><font style="font-size:9px">Panel konta<br>ustawienia</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="895" y="114" width="90" height="46" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp6" value="<b>forum</b><br><font style="font-size:9px">Dyskusje<br>społeczność</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="455" y="166" width="100" height="44" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp7" value="<b>classifieds</b><br><font style="font-size:9px">Ogłoszenia<br>B2B</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="565" y="166" width="100" height="44" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp8" value="<b>messages</b><br><font style="font-size:9px">Prywatne<br>wiadomości</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="675" y="166" width="100" height="44" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp9" value="<b>events</b><br><font style="font-size:9px">Kalendarz<br>wydarzenia</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="785" y="166" width="100" height="44" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp10" value="<b>zopk</b><br><font style="font-size:9px">Baza wiedzy<br>ZOPK</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#1565C0;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="895" y="166" width="90" height="44" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- STRZAŁKA core → center -->
|
|
<mxCell id="arr_core" value="register_blueprint" style="strokeColor=#1565C0;strokeWidth=2;fontSize=10;fontColor=#1565C0;fontStyle=1;" edge="1" source="bp_core_bg" target="center" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- BLUEPRINTY ADMIN (prawo) -->
|
|
<mxCell id="bp_admin_bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEBEE;strokeColor=#C62828;shadow=1;" vertex="1" parent="1">
|
|
<mxGeometry x="1080" y="260" width="240" height="310" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="bp_admin_title" value="<b style="font-size:14px;color:#C62828">Blueprinty Admin</b>" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="266" width="170" height="24" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="adm1" value="<b>admin</b> — Panel główny, firmy, użytkownicy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="296" width="220" height="28" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="adm2" value="<b>admin_seo</b> — Audyty SEO, PageSpeed" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="330" width="220" height="28" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="adm3" value="<b>admin_social</b> — Social media audit" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="364" width="220" height="28" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="adm4" value="<b>admin_news</b> — Monitoring wiadomości" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="398" width="220" height="28" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="adm5" value="<b>board</b> — Rada Izby, protokoły" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="432" width="220" height="28" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="adm6" value="<b>membership</b> — Składki, taryfy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="466" width="220" height="28" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="adm7" value="<b>reports</b> — Raporty zbiorcze" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="500" width="220" height="28" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="adm8" value="<b>api</b> — REST API, OAuth, webhooks" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff;strokeColor=#C62828;fontSize=10;align=left;spacingLeft=6;" vertex="1" parent="1">
|
|
<mxGeometry x="1090" y="534" width="220" height="28" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- STRZAŁKA admin → center -->
|
|
<mxCell id="arr_admin" value="register_blueprint" style="strokeColor=#C62828;strokeWidth=2;fontSize=10;fontColor=#C62828;fontStyle=1;" edge="1" source="bp_admin_bg" target="center" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- BAZA DANYCH (dół) -->
|
|
<mxCell id="db_box" value="<b style="font-size:14px;color:#1565C0">PostgreSQL</b><br><font style="font-size:10px">database.py — 80+ tabel | 19 domen | 3 widoki | 2 funkcje</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F2FD;strokeColor=#1565C0;shadow=1;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="510" y="620" width="430" height="50" as="geometry"/>
|
|
</mxCell>
|
|
<mxCell id="arr_db" value="SQLAlchemy" style="strokeColor=#1565C0;strokeWidth=2;fontSize=10;fontColor=#1565C0;fontStyle=1;" edge="1" source="center" target="db_box" parent="1">
|
|
<mxGeometry relative="1" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- UTILS -->
|
|
<mxCell id="utils_box" value="<b>utils/</b><br><font style="font-size:9px">decorators.py, helpers.py<br>validators.py, cache.py</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#2E7D32;shadow=1;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="380" y="380" width="160" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- TEMPLATES -->
|
|
<mxCell id="tpl_box" value="<b>templates/</b><br><font style="font-size:9px">Jinja2 szablony<br>base.html + podkatalogi per blueprint</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#2E7D32;shadow=1;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="380" y="460" width="160" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- STATIC -->
|
|
<mxCell id="static_box" value="<b>static/</b><br><font style="font-size:9px">CSS, JS, obrazy<br>Vanilla JS (bez frameworka)</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8F5E9;strokeColor=#2E7D32;shadow=1;fontSize=10;" vertex="1" parent="1">
|
|
<mxGeometry x="380" y="540" width="160" height="55" as="geometry"/>
|
|
</mxCell>
|
|
|
|
<!-- PODSUMOWANIE -->
|
|
<mxCell id="summary" value="<font style="font-size:11px;color:#888"><b>17 blueprintów</b> | <b>49 plików z routami</b> | <b>375+ tras API</b> | <b>27 serwisów</b> | Refaktoring -90% (15,570 → 1,557 linii app.py)</font>" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
|
|
<mxGeometry x="330" y="700" width="740" height="24" as="geometry"/>
|
|
</mxCell>
|
|
|
|
</root>
|
|
</mxGraphModel>
|
|
</diagram>
|
|
</mxfile>
|