From f69356473b0a43341ebe2e4626ed1eca58fa34a6 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Wed, 30 Apr 2025 12:34:06 +0200 Subject: [PATCH] =?UTF-8?q?Entferne=20nicht=20mehr=20ben=C3=B6tigte=20Date?= =?UTF-8?q?ien:=20L=C3=B6sche=20docker-compose.yml,=20Dockerfile,=20README?= =?UTF-8?q?.md,=20requirements.txt,=20start=5Fserver.bat,=20start-flask-se?= =?UTF-8?q?rver.py,=20start.sh,=20test=5Fserver.py,=20sowie=20alle=20zugeh?= =?UTF-8?q?=C3=B6rigen=20Datenbank-=20und=20Website-Dateien.=20Diese=20Ber?= =?UTF-8?q?einigung=20optimiert=20die=20Projektstruktur=20und=20entfernt?= =?UTF-8?q?=20veraltete=20Komponenten.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 27 - README.md | 1 - website.zip => archiv_0.1.zip | Bin database/systades.db | Bin 122880 -> 0 bytes docker-compose.yml | 16 - instance/mindmap.db | Bin 36864 -> 0 bytes requirements.txt | 6 - start-flask-server.py | 119 ---- start.sh | 72 -- start_server.bat | 5 - static/neural-network-background.js | 88 --- test_server.py | 25 - website/__pycache__/app.cpython-313.pyc | Bin 18341 -> 0 bytes website/__pycache__/init_db.cpython-313.pyc | Bin 2749 -> 0 bytes website/app.py | 280 -------- website/init_db.py | 144 ---- website/instance/mindmap.db | Bin 49152 -> 0 bytes website/requirements.txt | 6 - website/run.py | 20 - website/static/background.js | 108 --- website/static/background.mp4 | 1 - website/static/mindmap.js | 49 -- website/static/style.css | 27 - website/static/three.min.js | 0 website/templates/admin.html | 109 --- website/templates/base.html | 126 ---- website/templates/index.html | 38 -- website/templates/login.html | 41 -- website/templates/mindmap.html | 708 -------------------- website/templates/profile.html | 131 ---- website/templates/register.html | 47 -- website/test_app.py | 35 - 32 files changed, 2229 deletions(-) delete mode 100644 Dockerfile delete mode 100644 README.md rename website.zip => archiv_0.1.zip (100%) delete mode 100644 database/systades.db delete mode 100644 docker-compose.yml delete mode 100644 instance/mindmap.db delete mode 100644 requirements.txt delete mode 100644 start-flask-server.py delete mode 100644 start.sh delete mode 100644 start_server.bat delete mode 100644 static/neural-network-background.js delete mode 100644 test_server.py delete mode 100644 website/__pycache__/app.cpython-313.pyc delete mode 100644 website/__pycache__/init_db.cpython-313.pyc delete mode 100644 website/app.py delete mode 100644 website/init_db.py delete mode 100644 website/instance/mindmap.db delete mode 100644 website/requirements.txt delete mode 100644 website/run.py delete mode 100644 website/static/background.js delete mode 100644 website/static/background.mp4 delete mode 100644 website/static/mindmap.js delete mode 100644 website/static/style.css delete mode 100644 website/static/three.min.js delete mode 100644 website/templates/admin.html delete mode 100644 website/templates/base.html delete mode 100644 website/templates/index.html delete mode 100644 website/templates/login.html delete mode 100644 website/templates/mindmap.html delete mode 100644 website/templates/profile.html delete mode 100644 website/templates/register.html delete mode 100644 website/test_app.py diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 2b0a952..0000000 --- a/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -FROM python:3.11-slim - -WORKDIR /app - -# System dependencies -RUN apt-get update && apt-get install -y \ - gcc \ - python3-dev \ - libffi-dev \ - && rm -rf /var/lib/apt/lists/* - -# Clean up and install requirements -RUN rm -rf /app/* -COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt \ - && pip install --no-cache-dir wheel setuptools - -# Copy application files -COPY website/ ./website/ -COPY requirements.txt . - -EXPOSE 6000 - -# Verify installations -RUN pip list - -CMD ["python", "website/app.py"] \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 0519ecb..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/website.zip b/archiv_0.1.zip similarity index 100% rename from website.zip rename to archiv_0.1.zip diff --git a/database/systades.db b/database/systades.db deleted file mode 100644 index c8067b8502e4b715a1186004651e02033b7f6f5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122880 zcmeI*?Qh%09S3kSicMR#M8}D%rkWcDftzTJmnsi+Jh#}CSV;{(CAO2Uzy^V$&K4_* zR7om{Q(zBH(!JaMgT5Mu4SPAD7}jnW5MX;Vpct^XeYF8YvAx;5Vtuo_6Dg9iC_7EE zCBipAB8qoB-F<#{lt|qv>(`fbmnfT-T~}S@oG>PcqVR1+5d`4~{rfWg>;E}SHxBww z=%X0gj@vvUeB*=M0Lv_Y$?{}c4{_PC9|91700bZa0SG_<0uX=z1Rwx`Coga$onnQK zJ^7MRA_O1+0SG_<0uX=z1Rwwb2tWV=&yGNnRR!1o&rU#469_;60uX=z1Rwwb2tWV= z5P-l_5Ww~SQ$R(L5P$##AOHafKmY;|fB*y_0D)&rfX)A(Nd8@re=Gk$F3M8+H|h7& z#q@CM_o-THYV=>DzaFiQUKmY{{CVVqk=2poG%Nl<00Izz00bZa0SG|gnHHFvkc3xf zvsv*Pv7Lt>nTD=aYeaW1S5;fBxx^;=7BL;Is&2Z(JaPW)>})Z=sZKW?VvnCbA_>Q) zvXf%5Zn?T;67wqAeE3P#aBdUB4Ki1WYP;hX4%6H-H20#lW$G;dJTYs;RGMZ*d0Va8 zCaKoLuTi#D-5j4EmxL3`*%QJwXIraUhP9=WWnLv#SK=r)iCt9mLIO_$eJd7IcZ z5*$;utXg^@EeTmQdt6w2_z5kM@S3&i!kbiU8nhT*%|g?u*iEfQfpsTZRfD)LnMp~) z@tN!~v1pK*Yg?vXYj4pY5@mgxzCfMT;Nt8#*2X%iTlRKxW|aDzWBtIkwrsUt*NNRU zx7Mvq_qJ*iN_bn>Y6jgE9I9CrlAIrrgt=K3RbKg4D;G?cR+sghyTK;?DYa#lRzj!! zBq+qT%9fkFo}@u0*(qUzXjQWnYqmvSq_HqeDX!Cq zFPN=gaMNpV>kdVurP0o;REVw2tF+tPqG7Vjw9m7~oxgbL(#%EbVyF$*YD}{>4t#Tn z7Ih(eQe0NuDxp6Hr`HN)$K?Y=S$FMbjm3wK4*y_HHMFLox|Tg~UXp~#x$IHe@mkI5 zsDz^|kut4RaB#&`2j&JP;pid@M|GQax2wbJ`zLvSp8$@;+Z zfFw+5*-0V%QsM1ZkmhyguHG>;wY`r?*zv*Z0lX3 zxziP0WnFOg06lUxJ3U-e?tnHA^Z&!|Xna9O28QX|t2wI}l;?M~}d z;96BTEXQh8brNi{Lj0HKEnl?EyQJZUOJk=V_Wl1v`ePyerTn3MHvOsmC;1=p57VE? zugDwni}GjkPvvy_WBK3mujE4dpK?R~=$Ss%qjC^{00bZa0SG_<0uX=z1R&6V0*4c? zcHYsONG0fPA^%3*5%#QoBkr)AI3b4auZ@o&5P$## zAOHafKmY;|fB*y_0D(XN-~R^|*n$8AAOHafKmY;|fB*y_009W}s{p?L@7KtpT@Zi( z1Rwwb2tWV=5P$##AOL|t0N?)y7TAIS1Rwwb2tWV=5P$##AOHaf^s4~A|L@nxqFoSx z00bZa0SG_<0uX=z1Rwx`KmgzW2Nu|Z00bZa0SG_<0uX=z1Rwwb2=uD}zW?vn$f8{k zfB*y_009U<00Izz00bZafj}UY{;`lgUqNO(SiAgIVeQn# z*K&~zq^{~lJ2ii{Be|hE&TY%Cv~yg@pN$rv*+g|orKGybJgwHo!g7(luk5rUrBqiN9I1^SJ}OjT_&{$rKO~tej1FdQ zoaq?=n;2Z(sp<_+KD;Zn^YVz4Idew5R}09)8F=l(J4SaShm)CZL$!(NmSO<4s%})` z5+l0pa!xD$LA!L@c^=WXU0_&ucUY3SowcNt$!5j-?{lDrZM{o0*LxU=V0b%woG4t~ z4UNtGg^u$;g*ck6H`pjqHj3ZbU?VYR(3hJUyxdPPQj z*}ksbHuM^i1N{A7$K6Q`OPQlb#d|78b*uFBR%!j4jF7hW?OXKhYyVTxNN@GdocpFr z=I)IS@vim2@)Y>F(i`H#9S%J0t3zm(>C!>TyH(_^Ni93BP2WV?9j->U*?W-_yctnc z-V-guvP&90t+$hAc!Fa!ZH=Dmw;MqU?b_^^vaOn0wVglT8K0j0wflRXp*n7*qfXL?Yqu{r?4_{qF65 ztd8rJ{^wCPj`sN(AZQ&uGbeLr1_m>iC*wXV`I$?3e``?wLOjMV46^Oh0gFywT^KyZ zhyRm_!OYx5oF_kfon`+XJb7TxjCqzZL9Z%@*p(&b|M%1NHQE9J2tWV=5P$##AOHaf zKmY;|=q`Zy|J_}%7XlD~00bZa0SG_<0uX=z1R&5)0;!?z3n_6yNNyzuhyF73!QdZ; z<_`WYaY$S^@YnPwsUMBXthF=~{`3~OHISI(AoJ) z)70N<22;;l4OILYL_w8L^J)Eb>ej9aMM0j(3*m)m+?c z8UOWKRW0SC&$IV(FG!i`Y4L-BXdJz%-R<1o^P}Bk>819FrZCSa~=Z;{wp-ToZ# z=q%8DeqYNN{5VJE*F}0lw~&Wt+P1462|%xawVSi=BO#KaPo_Y30}v72R6;l?>4~^Y;Wv5VZZeqV=;aJ+&RpbR6ID=o;c`Ng|GME?epu+>M;@N47-w9kBICH zA{H4V9Wjoi-6=IJN9PL*t}Lw<_{xIqF8dr!r3)0=S=35p_oAan{5mRjTJd2!1J#l7 zX+(=Ih&j@0K}@6yyqXmoyWC1M@*;i^T#B|jOyJX)+;?1Iq~Y#chc}`8n&hT}r_UchVT{={}1#4Y8VNdjA4)g!_d1gd5 z2tWV=5P$##AOHafKmY;|fWUJsfb0L~IC!W!1Rwwb2tWV=5P$##AOHafKwzH&xc=WK z6tY180uX=z1Rwwb2tWV=5P$##o?`+0{@-&PJX9S55P$##AOHafKmY;|fB*y_uulPe z|G!TtWP<<%AOHafKmY;|fB*y_009U*#{#(ie~yEPszU$*5P$##AOHafKmY;|fB*#c hDS+$$eL^7{1Rwwb2tWV=5P$##AOHafK;StR_%AJ9$PoYl diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 0d82d19..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,16 +0,0 @@ -version: '3.8' - -services: - web: - build: - context: . - dockerfile: Dockerfile - ports: - - "6000:6000" - volumes: - - ./website:/app/website - environment: - - FLASK_ENV=development - - FLASK_DEBUG=1 - command: python website/app.py - restart: always \ No newline at end of file diff --git a/instance/mindmap.db b/instance/mindmap.db deleted file mode 100644 index 907f5c36fbc9cbe4fe8d103eb63ba6c6f9f99048..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 zcmeI)Pfyce9Ki8b#{MC~h3vrPNsMkw&;VWtgy_J6i(`{AR8CFVimRdPSWEN@7+;ES z!GkZt7vR;iXOH%2Hdv<}Mm?D2+t7c{zxMa}J?Yj2*xRkxz9o*_u4DS*fikP8s`5w( zMNyK$nhDnaG8r5s`X|9&9XO6VOe*)^7pG^wE9va2a_i&F=a~=FUv7S#`jlOrdL7q^ zas&`S009ILKmdXNQQ-VuDwSJbS1%mjJUq7AZqqXSmV5fDPYOOA+`<2Rq$Y%N%jH!O6mv>6~fq1GNh(d3i z1##7>D96~U=~{WaDjW6N6osyBX}VV3)b@m9x0{Azb__XyDA>)PdJPOX*s)g}cF7iN z>13|4t}4N3)?4r7IQZIan5VuQo`+-qiqBYzqsg4#O{Q}5^Xj|XVFDVi<5+FKw@XEM zdxcUnMylbq{h+s~YcB)cL1EjmJl}LW;&G6!dU;3t4fj*e>KZXuisadN zHiKIi8?{;T;_cc-I-%Z%LUl`s&5N>`VnOmESdv?gK# /dev/null 2>&1; then - echo -e "${RED}Error: Docker ist nicht gestartet${NC}" - exit 1 - fi -} - -case "$1" in - start) - check_docker - echo -e "${GREEN}Starte Container...${NC}" - docker-compose up -d - echo -e "${GREEN}Container erfolgreich gestartet!${NC}" - ;; - stop) - check_docker - echo -e "${YELLOW}Stoppe Container...${NC}" - docker-compose down - echo -e "${GREEN}Container erfolgreich gestoppt!${NC}" - ;; - restart) - check_docker - echo -e "${YELLOW}Neustart der Container...${NC}" - docker-compose down - docker-compose up -d - echo -e "${GREEN}Container erfolgreich neugestartet!${NC}" - ;; - rebuild) - check_docker - echo -e "${YELLOW}Baue Container neu...${NC}" - docker-compose down --rmi all - docker-compose build --no-cache - docker-compose up -d - echo -e "${GREEN}Container erfolgreich neu gebaut!${NC}" - ;; - clean) - check_docker - echo -e "${RED}Entferne alle Container und Images...${NC}" - docker-compose down --rmi all -v - echo -e "${GREEN}Aufräumen abgeschlossen!${NC}" - ;; - logs) - check_docker - echo -e "${YELLOW}Container-Logs:${NC}" - docker-compose logs -f - ;; - help|*) - show_help - ;; -esac \ No newline at end of file diff --git a/start_server.bat b/start_server.bat deleted file mode 100644 index f8c149e..0000000 --- a/start_server.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off -cd website -echo Starting Flask server on http://127.0.0.1:5000 -python run.py -pause \ No newline at end of file diff --git a/static/neural-network-background.js b/static/neural-network-background.js deleted file mode 100644 index 360a04c..0000000 --- a/static/neural-network-background.js +++ /dev/null @@ -1,88 +0,0 @@ -const canvas = document.getElementById('netcanvas'); -const ctx = canvas.getContext('2d'); - -let w = canvas.width = window.innerWidth; -let h = canvas.height = window.innerHeight; - -// Partikel-Definition -class Node { - constructor() { - this.x = Math.random() * w; - this.y = Math.random() * h; - this.vx = (Math.random() - 0.5) * 0.2; - this.vy = (Math.random() - 0.5) * 0.2; - } - move() { - this.x += this.vx; - this.y += this.vy; - if (this.x < 0 || this.x > w) this.vx *= -1; - if (this.y < 0 || this.y > h) this.vy *= -1; - } - draw() { - ctx.beginPath(); - ctx.arc(this.x, this.y, 2, 0, Math.PI * 2); - ctx.fill(); - } -} - -// Konfiguration -const config = { - nodeCount: 30, - connectDist: 80, - lineAlpha: 0.08, - glowColor: 'rgba(152, 165, 177, 0.4)', - nodeColor: 'rgba(135, 162, 184, 0.6)' -}; - -// Erzeuge Nodes -const nodes = []; -for (let i = 0; i < config.nodeCount; i++) { - nodes.push(new Node()); -} - -// Animation -function animate() { - ctx.clearRect(0, 0, w, h); - - // Linien zeichnen - ctx.strokeStyle = config.glowColor; - ctx.lineWidth = 0.8; - ctx.shadowBlur = 3; - ctx.shadowColor = config.glowColor; - - for (let i = 0; i < nodes.length; i++) { - const a = nodes[i]; - for (let j = i + 1; j < nodes.length; j++) { - const b = nodes[j]; - const dx = a.x - b.x, dy = a.y - b.y; - const dist = Math.hypot(dx, dy); - if (dist < config.connectDist) { - ctx.globalAlpha = config.lineAlpha * (1 - dist / config.connectDist); - ctx.beginPath(); - ctx.moveTo(a.x, a.y); - ctx.lineTo(b.x, b.y); - ctx.stroke(); - } - } - } - - // Nodes zeichnen - ctx.globalAlpha = 1; - ctx.fillStyle = config.nodeColor; - ctx.shadowBlur = 4; - ctx.shadowColor = config.nodeColor; - nodes.forEach(n => { - n.move(); - n.draw(); - }); - - requestAnimationFrame(animate); -} - -animate(); - -// Responsiv -window.addEventListener('resize', () => { - w = canvas.width = window.innerWidth; - h = canvas.height = window.innerHeight; -}); \ No newline at end of file diff --git a/test_server.py b/test_server.py deleted file mode 100644 index 8414ef2..0000000 --- a/test_server.py +++ /dev/null @@ -1,25 +0,0 @@ -import requests -import time - -def test_flask_server(): - """Test if the Flask server is accessible at http://127.0.0.1:5000""" - url = "http://127.0.0.1:5000" - - print(f"Testing connection to Flask server at {url}") - - for i in range(3): - try: - response = requests.get(url, timeout=5) - print(f"SUCCESS! Status code: {response.status_code}") - return True - except requests.exceptions.RequestException as e: - print(f"Attempt {i+1} failed: {e}") - if i < 2: - print("Waiting 2 seconds and trying again...") - time.sleep(2) - - print("Failed to connect to the Flask server after 3 attempts") - return False - -if __name__ == "__main__": - test_flask_server() \ No newline at end of file diff --git a/website/__pycache__/app.cpython-313.pyc b/website/__pycache__/app.cpython-313.pyc deleted file mode 100644 index 459cb20a6d76d4d5d4544bec64ccabe67a03b6c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18341 zcmd^neNY@nmS3X~j{65$ z+TF4DpL;K>tEyoNefVbn*(;mutjw30ud?#J-+M2!^vLaYFmP30H4nFk80LTBjdD4& znMZvFhWQr5F&ulIA^2-J&$hFK4PxGS-q3C&#iwVR2#-9jwwR$^_p5nH>R*eQ+a zyrbPoob4{+YIhTNdmhPa_YhCJmw0Kt`FwtR0V$w)%XwdWAt`L%Mz+y=_Iwd3>Mf{X zj%L{*#l6m)J3nXb^~VDW)10k@AtipMg5m5X4Cm-|^%jSZDYe?~QInh}Wt7$lv|CXc zvy|nO(hZb(TlA?=Zl{zUp!7b4atG8mYFsHfE+5L9l{@X1D}eGd+P#v4(z8ll`{jH` zS^17DL*ymB@nJas%IDh?RhKa(v=q<^4L%Vx-hc9YeDLF2{l>lF* zb;ckw#165cvd^%pGsH@^foPIX#zy#%RWi56qr!E`L-@o1Pa;WvWGoJ~l9lkUj`KoN zvJrkDM)>}uWF05*$lxfE%!ANoSh8LdMia5YiI7EdT^JpTB|4&s=nzjNd$+)oj@XS@ zLUP2hA~FsIk`wZy<4O4@Pp-gGp!WgE)jv*v2e}q_ba20Sp)uY+%#Tcj3{ue$pWq4b z6&Z^P!t0}CATo?B_<*4Q`ldoN?Ydu?2>i9dAI{{X56ld6)$=W;C;R3YrU#@?zLc3C z@$_U@FT;c_O0D)AwrhDM$FZE@Xtt*=Pnb%*QYZg%>>kK)#w}`1wAQ>utp#g)TuP5& zkCM}VyF3d2L8iy6ls}CU#`7t(+OMJu3=H(8jk-;vP;v@oklD`k6e*=)zmn5_!=+kY z$$@^e*0JGoJHv|oiYsy#tND{p8UyF4GjQGW#NenK`aVYn8BUL9ObtZci=C`Ae8W zI=5)QQyr~BYn5N_$`Xiq1o{+8x&OIPH4%auvb06!QVk0%cf@UI=b&QDAh3a`dvNxr_Ore-9T z7#N9;RS)z@#fTOcn$NX#T#1}%>}qUkFTj61)7#pX19{L%XWrLk_q8eG6Ou5 z3CTFbCnaMnkp#>%#0CW9CMcb2uJ1)Ep?46_b)@$UFI-QKj`bpNUyr=b_X#kEy|3py z?ZND9_9~Upv9ap03CSKGjSk3=UEWW4gkY>W5g+Z3#)XDzwHj5WfOg^(^T6Yqot&AR zeQV~e5Be7?zCD!o>=tdiAK{}-T52dfOUAP;U6Sdgi(D6QZXMy1!=nR2KawbyI+^S6 zP*0moj-|%YDnNwNo(Zckt`;$2b%M1rfbQ%|1UONPpSiVBZO!(ep+PS_6CmtXYPH{P zhBE;K>HxYb+JBw@Wo1| zC>at6t}lYifS{R3a1n=0lwX3FE19S*Y)96?ZXMzUT%XUUN+J~Dkyuk3-Z_*VUVea5#Z<=eCD z7kzs~AKaZz`A(;OP19$7;qfh)GXDK3|Nfr0FQ?0D=j?06I~MJk;K@I`w0tRj@MOBULG(7Px$?z=`W4sL);!x6-bi~6h_(X+ zm&v5PhVVl%0j5%4&MS@2D(7d}=&P{0p;P&KW?5CG;Qv|Dm7$+q%b1kaoiKbQJz;*b zo=_w)x&vlL)exL2hahRHHt5-=u&+s?!X3ydE?;^*vle4H+gIYwu8jH|+^O!@WtMZ) z84|{BV_0ZRrRZ*GiyDMp8+z1x6HbL+ zni}55G?BfX^OA6@G%TgF( z$qCw^I-Sf3)sM|^dRfd0;)sFVXQxb$wvK2YOxHbL{^Ea zhLl_ak4jMX=p_Rfa#n#CgxF|8GDZgmBuoG3$Ve1poNm$8tg_9M@$5=@b}d~NJ-bBD zv5e~@IT1(lMRkY=yjOSPi+aFJP zj&I%4SG?#?`Cgnpv+D9@T;(ZO`NHsuYtNc1Z?=7=eYSI^6I8b=n7x-NR$MzCxQgbI zE3UFNU+D*D7tf~44y1htMb|-8*f-Oj8qroGD{L#;Y7nx~SJw?Ni@A}MoJ9|cT)ui# z8<$f(hMa|L=%foOWF&b&uVLq1hB81QQL@NPNF{o&RIclQ)>-58v4yc0zUN-^6n|h{ zw5I)g)1HuM3(@{0wr0blAe$(Ok5IsKA4OvpED=NJq=VWR@@i-4N+d1NL}QXZhCXi7 zrW{ZUXeFR^ya^Usj3i2(YlAm$9!+m-4cHBftWq z$roqfj5NUV{AiFHV0m)uC)mB9J2ezjv6DKf1qzSgq<#&Z)GmXrC98u9oLRF`HJf>( z6Pr6OXMqrvK`Ut&^bHOVGL{Wspp|6xS3@%*kTee?(6SUB_%)eQ@$* zD?c0u!?cf&jRY@52lzw~?bME}UmI+SC6j#cHE`p`!QM;+xfmbhg&^3p{CKh&+$J-R zo@vM}Ik8PgbgUB%T|}H5oqGyzPh--ENfRb0m6E;XMn6B6L~V;A21YZvfaOLZNkT@+ zPDV$Qkp%Q8u{`MGu`vPVB^aEN#nPI65UEs8F0+-FpoQ=uB)^_w)=hT%B)jI{mGOsC z{!qq$B;`MHZ$R`P5&g{>e_P7mmiC{YZu^C=Y^`k1($!Si2{19e1-BgYj$3*2c?%OO z-ca^Fhhoh%(%)@t}=1QvF{7_UijW? z%fn*%sTJ30+C;3ok@8La*fsHw>t<~7rGW9jcbW`M7UsUi(d;zd_a17t7(ZcH$bVun zLpo`z86%_M4DcHy6(^HQ>MtPkG(R=0Dnua8UOj4%Ijl;HQU@Vplwf7ENGs0O25Jyf ztA3J4sVHDQKT^{RnzhIoz)LmO89*1BaR0!HE=(jgFzL!p2UU!BVPgTD`0=6Pq!4mQ z)-E}pvm7xhO)4RgY!Jbh9V$ESLkP*}$e3gr;DvrzXz{qLVJ`!v9M8xuxa?^93octZ zfQ>FfGQ|KA0C=CAKbi6EOZoPF|HKbYefN~;+b8;(GrkKc--W-ulbRQe=udU@ zr#twxZ!qJ#mhxRo`{L6!gu}P)*;1ZH(bgyfqN^r47JIU~W+2kjz+N@~4i&Z;qNxUq zY>t?_VdcHd3Wgd+F!-2ruuMQ1nkyJhwY_BM0NimhK_+2Huv#c#047P>1>uYshDaE{ zg6W@YD67j?*Kv5FvZq|DebunwB&q6OGvzDcIfL+*fT$uwD|3P1G(5Yh%kq_gK!ukr zfdF9OkZQqjwps-eOpPWA3GkZ(2@t$MNZ1e?#JQnr;twH%fZokulyLI}rLclFUr=h= zT!!8K#=AG@zk8f9j;%K4&L0>yca2mY35H-KTmNt@J^-;$>Yf7vn5gnM(_+cdHx9Lt zB;olDI6#K5?GZf;fY4+livwD~Q0rzC8VYF112+7sWc!^xxA&};1@E-oZd*Nl=C9rN z-RWTGefRSChb2obKiPTshwfCc^P$z`FIZH#Tk^pQ?XQ0LGQ$V-reomGd5p90~bNU{)K zfKaw%!U}@#p3WViwjr8m5CjSaPiNuPnZvuZ<0;d74O$CpkbHqKTWG()t_3PHfqkjK zzD%Gt6{x+J6a%$l;7lfPE)_VJ4zy3V|DDO~E_j&7)HbBIHT?VfrP}#xi-kWa+Wp=7 z=~i)D!!LY+wc?7Uyj1avbEaGrPOf+>H>2=RODY$;(k1)E!2UVQ17FF)vG-4ju8J={ z_b^4Le*M_Xcms&c7d9jF(eL-)+xfl0<;!Au!;0(F8niqsR-F+`ThhMPzcGrw^FMZ- zrwDxk5V{5)@DGnR9bx{WpsCvQLuX?J4 zj>uMif1QX$emI*yfnB%0_ShFGpDwvq$IXOu*057m+@*vJ9~ESzzW_1zehkXJD| zhzaf024?RdS|gG%&L=<{W(OexlHhBBy%%eC?NEu9JGLr|3l%gv#YMc*^4t5 zSBuJTU7NqQT3T`E)a_HNB|Gm_->%M-ypSq+VYR$6Q(m1aug;Xem@0o!Jl>WrZ(pmZ zS{%ykK9<^jEM4(pmj0pJTAug!jMeRVXk`3Vj|&-Z@!XBHCn(y2vf1O_AVeFCUlrBf z1Jrt&*r2niX8>!<4lERX3N@IAg0&as39l$<%^Zsc>oO->^;yGPl)J#@wm(q~sJg z0Gx0&c+hRqdnzccP+DofP+FNb_U zfdrbCAyn4UvHdcSLO<*l1<$}fX5zCs#CoGlK!qH=RWb@m$h=ukpo*ZHAXF^x7@6?& zlN{+p-Jq!+lEm9rFhR45;5w0e+hjnXS|a0^G-0BnlgMjWfvknh;2y!AGtnLiZ3;38 ziGVI8DxR$7aYE=+(LDN=Lk_|F*um$JP=Co=Jp0DX8=!0oif-+l-@8zkE~uKeZoK>7 zo}zy>ltt>JV(GE8@5OsQ(RV_0ozT}@4+;XSg{7;o^;9=sw^kUub#eY8*l|9`wDqxz zu{&oSGmhE3nY_8zS8O|0ZLV4Oj5}j1OWDd6F0I(A)@%->$k+lYTVTaj`oL4PS`fIk zZ+_n@?0VgtzllmPF`vj39ZVG+Tnz*jyXQzMa73(aNe5c96c3#izvB^O@jBNTi`^;f zw(V56Dau|p5VA`7H*5q%Y#;nRs{Ae32wT|)FN155b?455r2xCXdQkx=)w2`~dX|Eo zodE516qw#&FiklFs++)_1dyffq!C;+)rQb^H&hqHFbLAsN#*ITNl%_aPFYM)|Hx8v z19PZ2ww8u05IeMYM1?>CQ-K-<1p5$7kZ2M?u~>PS)exZCW)4;%~`SB5(b|LegMR8 zW7isghqo{o~p zf?n~?rvct?0p1?k&4_De#5J>mYnGbm00dt)s0cLWD1OyG1AZx1*#H=qdfRxpreTlj z%W7w-6b}*1ZWXC?(MdI{fxGObh!337P*Li++p;<4xQ_q)qzHK~vT?@C5H^MIC$h!35`&KvaVve}Ks}ChuYLJ|-L_0={ar zKyt3ra%4b#h_NxU2vlw)Up3G;=$gaxN49U)Of|3V*m-C2_T-(nZojn@7f*DgcXUoQ zzuW$H`}7+rQ`zc)CizbE>`j?Mt4EG2w>2r#p$8_*yXW6NKWAJq6|R}`Gp3T1sbt~E zifPBM?5^1zGdq54FL?k~HQ3qjdDab9`-wH*_KXkTXvSBa@>Sm}6n)jAuOZ_*lk%N` zP#l~L^A$gPIPf3x8As{k62{`on760Q+aDTO^PWdW#YpQPcTA4{q0Mm7#B> z&3-zl-TaF7kOA1Zh5Pj)#^sr6|Mg?eLc_T%EE_oLSNOvBcP&T1w;N6q7Sv~4U;B~k zYyY@zgvu}f!3V40C-#yr1(crqMcdj>81ElwJl^g$eCl?z*O@;pE^et`@Iy#@8X)qA$mTmIoVRBPW zHI<;X8O=#zf3EiGSy#2aBDtJL2W?AkF7Iq+rM!%BP_8+5dr7U9iFH1YJ4;L5K((#sBOjC~Sp~vn=C@7#v2I zY>DxBJlYrMKSLMnvnfcRi8XtIUp5S1g+gdz?ThwbC;Xsfibp3W`a$=pml1OK_oxz* z+%q}amS#7DF?#tLVhGqL&?iCLT5>C=$>{fCcMXzB;NyezaGZdnD93CYkT|~^Ai6sD z4B8_o77!4on6>gF%jeSNC#Ow6wv|v!+rTEG8)dT^G8@>`-@jv(?}RE8$6)sWToNMD3#n6szg(C zG8djL)s&8E2HKrU|JtwiNdSE^BgqFkJ>S+2ip&72%vEP1KF&=Fhw@-Q2(9POzJR2Q z{A);C;md)K;FtVcEFXa6OL~^2IyOMQiRI{AP8Prklml=QE6ykRgQH|@IGO-A_|LHZ z-$4SArl`=579=j+&d@e0X5>F${eQ&d2bi3~!hd47UW=lid)3biZwPnc|y9qKD!f=?{`2_##} zPM&u*HWOPg+_B!aE>%s(#JodOXIJ5@m3`j6P;qDf?fpwPzH{^L%{ja1JvG&~>h{cD znYl7YZcWTjEc)JmYuP+~MRXsVYF$-(a@=+-Hht9bVaIYPU3uc;aqP4MI#op|^l_#5 z(f~>k|IRsCbdcE%qNC#cd;fGrM}P6_Ve>|T0)&1}fzs6ZELJTzj zr_hFii{z&V0+h`N_>^I^KSoU;G7mIh>e>Y!q89^TH0KIJ{xb{0U*b?G$b>HX63kH; zpkjp>CL3CMfPjxm<0SaF^mM_NE8pp!t(&Qv3*Wjje`P^<|LPJyT_-wgr_N}guBP7+J^>m2oB?ul2iUTmPVh56RB`D z%io^hK^qz`W;1wpZq@?Yo4^+|qw2z(0o=PY8$3F?#(V3Z+Km{6+# zfm!*7F@errdD8WXiq5_&+!G7+KHbH!Lpr#Cy69%Q& z>*A4?bXBX^b$O~yG+j|h;tNf8+Hbcn8NTDb>t2qh_cn{a*Nqe}KQbH33?k!ScQ7W` q^kmu?_^G4tn+K+vS54M;&%S+jF0fd*)HQYXN2bH;X2vADb^jN~S{XY4 diff --git a/website/__pycache__/init_db.cpython-313.pyc b/website/__pycache__/init_db.cpython-313.pyc deleted file mode 100644 index 3803438fdaf74a122588b739dbbfb62f79caa554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2749 zcmb7FO>7&-6`mz$e@L$QD~q&DiEFowsz##fD5`5gHd0HD6v|WsGC@&v0d}b!i3^dt z#OyMbcnG94fRbLUO935v=uy4(ROHwqhvX6-uJ$FvwJZ# zRXS^!V%2*K<-K!UC$c@m-UUf9626L~zh=(rsJuX|f-T{0y zl$*L5(Z_^{P%iyHJR*QOln>@Z`S4vYO{j_7?A3^Tq+bW{tiH;4uHKvY1Z;eB5jlV?B@qW&%((RKN)CbvtEHJGXPj2AH_>fjaY?`FCqQ8ypn=7}GMD`)>e?IJ2D;}>p$$Np zLYMaz-VPfcH$rJ==y*(~zIIctO>zvstvRK7%rI?7GuO#X#W3}XR!!^0x_`jF@t72C z!yz-@1VpY8P$QI<4^m_^OpnpbMqVf{@~Dif*{iBVCyKBn@XWh!;g zyuzejib;Wa^dj@GQvv`5ty*RHU7JuA$O6f%R$a4n!o+t}erOi~-jo=&G3ujxRt9%&D6kZr9}EtB-RRe5L9%cL5hn_7i1o>VlW3{>nw+mlJ{ z;r45@O#X#o+r)&zv<=449ODtxbb4VX;IiF#5Bg zH=sMlR(*WQAhu%IjzSDmc|Z)iYLN2uGSNXRlKvXb4goE3-7-NyhY3XrXH;UM%d=qU z^&ed-t30kzohXEESmjMhjP;UYn1*9$Wy3ZIb#B%te&$v_{eYM?rw;0qj!4eD(k^YL zS77~DIm>dUU2T<#!CEISLzIf)DDMI%x&;TbX;Fii^GZj7DWzBPl+r1AO6iw8`90>b zZ05ChY$jGgiLz0o-nL?Psphzn>&1e*0sCEx31k~IvKe2chN}W473)31d=IzRN!2kd zlW~N}y{;+f24zx3+ah2*b-(E!B4=#1T$1DIYg|^1qaAG>Oss*iF z?)P1}Oarc;Y!e5#+4f_L>P)nWZM(_6nyxcUK{N>I>0vXeYws}8>2|2pHEbq8N@D6v zfX)Lk|A;Oi0b-99=T*1EZFR$dD%B-oZ#h;~-6(7JR-t>#)W-u2INiN+YH!m$^@3hZ zS9h4SP_gt{ncSy$0o-jSTZWg-nU~|ZXUO*q`Tvd*&(P4hgm~YvZ~O$Oo?_{vu z@!0pu37%*hV<&k0%*V@~UFjl>!inAGmKfZBfA9TMF@7S(&pg<7|EU}~9-cT7|FCl$ zz1@^wYstYUZ~gYIgUv7G@pB&pokvl4_#krez1BV zH}TkW0dY&*DO&tW2>+(M>;00K_6vK3zwyAyckF+qi6^@5A7))6`$6`@pPvh8C~`P) zJh|`}ry)Pueb~ajQ#{hZBM0>+zUBI5_A>ixdus=CO?(~P<@n)RBk=0((%|0fO`HHR ze8Y!{qwhDQnWs|haP(-YA>DSZ{#x=#Z%DJCNL1L(T*&BJ>LaNo`Jebd_CE=J96Z?m zLQ>AXunb_KkyiM}t', methods=['GET']) - def get_thoughts(node_id): - node = MindMapNode.query.get_or_404(node_id) - thoughts = [] - - for thought in node.thoughts: - thoughts.append({ - 'id': thought.id, - 'content': thought.content, - 'author': thought.author.username, - 'timestamp': thought.timestamp.strftime('%d.%m.%Y, %H:%M'), - 'comments_count': len(thought.comments), - 'branch': thought.branch - }) - - return jsonify(thoughts) - - @app.route('/api/thoughts', methods=['POST']) - @login_required - def add_thought(): - data = request.json - node_id = data.get('node_id') - content = data.get('content') - - if not node_id or not content: - return jsonify({'error': 'Fehlende Daten'}), 400 - - node = MindMapNode.query.get_or_404(node_id) - - thought = Thought( - content=content, - branch=node.name, - user_id=current_user.id - ) - - db.session.add(thought) - node.thoughts.append(thought) - db.session.commit() - - return jsonify({ - 'id': thought.id, - 'content': thought.content, - 'author': thought.author.username, - 'timestamp': thought.timestamp.strftime('%d.%m.%Y, %H:%M'), - 'branch': thought.branch - }) - - @app.route('/api/comments/', methods=['GET']) - def get_comments(thought_id): - thought = Thought.query.get_or_404(thought_id) - comments = [ - { - 'id': comment.id, - 'content': comment.content, - 'author': comment.author.username, - 'timestamp': comment.timestamp.strftime('%d.%m.%Y, %H:%M') - } - for comment in thought.comments - ] - return jsonify(comments) - - @app.route('/api/comments', methods=['POST']) - @login_required - def add_comment(): - data = request.json - thought_id = data.get('thought_id') - content = data.get('content') - - if not thought_id or not content: - return jsonify({'error': 'Fehlende Daten'}), 400 - - thought = Thought.query.get_or_404(thought_id) - - comment = Comment( - content=content, - thought_id=thought_id, - user_id=current_user.id - ) - - db.session.add(comment) - db.session.commit() - - return jsonify({ - 'id': comment.id, - 'content': comment.content, - 'author': comment.author.username, - 'timestamp': comment.timestamp.strftime('%d.%m.%Y, %H:%M') - }) - - @app.route('/admin') - @login_required - def admin(): - if not current_user.is_admin: - flash('Zugriff verweigert') - return redirect(url_for('index')) - - users = User.query.all() - nodes = MindMapNode.query.all() - thoughts = Thought.query.all() - - return render_template('admin.html', users=users, nodes=nodes, thoughts=thoughts) - - return app - -# Database Models -class User(UserMixin, db.Model): - id = db.Column(db.Integer, primary_key=True) - username = db.Column(db.String(80), unique=True, nullable=False) - email = db.Column(db.String(120), unique=True, nullable=False) - password_hash = db.Column(db.String(128)) - is_admin = db.Column(db.Boolean, default=False) - thoughts = db.relationship('Thought', backref='author', lazy=True) - - def set_password(self, password): - self.password_hash = generate_password_hash(password) - - def check_password(self, password): - return check_password_hash(self.password_hash, password) - -class Thought(db.Model): - id = db.Column(db.Integer, primary_key=True) - content = db.Column(db.Text, nullable=False) - timestamp = db.Column(db.DateTime, default=datetime.utcnow) - branch = db.Column(db.String(100), nullable=False) - user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) - comments = db.relationship('Comment', backref='thought', lazy=True, cascade="all, delete-orphan") - -class Comment(db.Model): - id = db.Column(db.Integer, primary_key=True) - content = db.Column(db.Text, nullable=False) - timestamp = db.Column(db.DateTime, default=datetime.utcnow) - thought_id = db.Column(db.Integer, db.ForeignKey('thought.id'), nullable=False) - user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) - author = db.relationship('User', backref='comments') - -class MindMapNode(db.Model): - id = db.Column(db.Integer, primary_key=True) - name = db.Column(db.String(100), nullable=False) - parent_id = db.Column(db.Integer, db.ForeignKey('mind_map_node.id'), nullable=True) - children = db.relationship('MindMapNode', backref=db.backref('parent', remote_side=[id])) - thoughts = db.relationship('Thought', secondary='node_thought_association', backref='nodes') - -# Association table for many-to-many relationship between MindMapNode and Thought -node_thought_association = db.Table('node_thought_association', - db.Column('node_id', db.Integer, db.ForeignKey('mind_map_node.id'), primary_key=True), - db.Column('thought_id', db.Integer, db.ForeignKey('thought.id'), primary_key=True) -) - -if __name__ == '__main__': - app = create_app() - app.run(host="0.0.0.0", port=5000, debug=True) \ No newline at end of file diff --git a/website/init_db.py b/website/init_db.py deleted file mode 100644 index aa75353..0000000 --- a/website/init_db.py +++ /dev/null @@ -1,144 +0,0 @@ -import os -import sys -from pathlib import Path -import shutil - -# Pfade zu möglichen Datenbankdateien -db_paths = [ - Path("instance/mindmap.db"), - Path("mindmap.db"), - Path("website/instance/mindmap.db"), - Path("website/mindmap.db") -] - -# Lösche bestehende Datenbankdateien -for db_path in db_paths: - if db_path.exists(): - try: - print(f"Lösche Datenbank: {db_path}") - os.remove(db_path) - except Exception as e: - print(f"Fehler beim Löschen von {db_path}: {e}") - -# Stelle sicher, dass das instance-Verzeichnis existiert -instance_dir = Path("instance") -if not instance_dir.exists(): - os.makedirs(instance_dir) - -# Importiere Datenbankmodelle und erstelle die Datenbank -from app import db, create_app, User, MindMapNode, Thought, Comment - -app = create_app() - -with app.app_context(): - print("Erstelle neue Datenbank...") - db.drop_all() # Stelle sicher, dass alle Tabellen gelöscht sind - db.create_all() # Erstelle Tabellen basierend auf den Modellen - - # Erstelle einen Admin-Benutzer - admin = User(username="admin", email="admin@example.com", is_admin=True) - admin.set_password("admin123") - db.session.add(admin) - - # Erstelle Root-Node - root = MindMapNode(name="Wissenschaft") - db.session.add(root) - - # Hauptkategorien erstellen - naturwissenschaften = MindMapNode(name="Naturwissenschaften", parent=root) - geisteswissenschaften = MindMapNode(name="Geisteswissenschaften", parent=root) - sozialwissenschaften = MindMapNode(name="Sozialwissenschaften", parent=root) - ingenieurwissenschaften = MindMapNode(name="Ingenieurwissenschaften", parent=root) - medizin = MindMapNode(name="Medizin", parent=root) - informatik = MindMapNode(name="Informatik", parent=root) - - db.session.add_all([naturwissenschaften, geisteswissenschaften, sozialwissenschaften, - ingenieurwissenschaften, medizin, informatik]) - - # Unterkategorien für Naturwissenschaften - physik = MindMapNode(name="Physik", parent=naturwissenschaften) - chemie = MindMapNode(name="Chemie", parent=naturwissenschaften) - biologie = MindMapNode(name="Biologie", parent=naturwissenschaften) - astronomie = MindMapNode(name="Astronomie", parent=naturwissenschaften) - geologie = MindMapNode(name="Geologie", parent=naturwissenschaften) - - # Unterkategorien für Physik - quantenphysik = MindMapNode(name="Quantenphysik", parent=physik) - relativitätstheorie = MindMapNode(name="Relativitätstheorie", parent=physik) - thermodynamik = MindMapNode(name="Thermodynamik", parent=physik) - - # Unterkategorien für Geisteswissenschaften - philosophie = MindMapNode(name="Philosophie", parent=geisteswissenschaften) - geschichte = MindMapNode(name="Geschichte", parent=geisteswissenschaften) - linguistik = MindMapNode(name="Linguistik", parent=geisteswissenschaften) - literaturwissenschaft = MindMapNode(name="Literaturwissenschaft", parent=geisteswissenschaften) - religionswissenschaft = MindMapNode(name="Religionswissenschaft", parent=geisteswissenschaften) - - # Unterkategorien für Sozialwissenschaften - soziologie = MindMapNode(name="Soziologie", parent=sozialwissenschaften) - psychologie = MindMapNode(name="Psychologie", parent=sozialwissenschaften) - politikwissenschaft = MindMapNode(name="Politikwissenschaft", parent=sozialwissenschaften) - wirtschaftswissenschaften = MindMapNode(name="Wirtschaftswissenschaften", parent=sozialwissenschaften) - - # Unterkategorien für Ingenieurwissenschaften - maschinenbau = MindMapNode(name="Maschinenbau", parent=ingenieurwissenschaften) - elektrotechnik = MindMapNode(name="Elektrotechnik", parent=ingenieurwissenschaften) - bauingenieurwesen = MindMapNode(name="Bauingenieurwesen", parent=ingenieurwissenschaften) - verfahrenstechnik = MindMapNode(name="Verfahrenstechnik", parent=ingenieurwissenschaften) - - # Unterkategorien für Medizin - humanmedizin = MindMapNode(name="Humanmedizin", parent=medizin) - zahnmedizin = MindMapNode(name="Zahnmedizin", parent=medizin) - pharmazie = MindMapNode(name="Pharmazie", parent=medizin) - neurologie = MindMapNode(name="Neurologie", parent=medizin) - onkologie = MindMapNode(name="Onkologie", parent=medizin) - - # Unterkategorien für Informatik - künstliche_intelligenz = MindMapNode(name="Künstliche Intelligenz", parent=informatik) - datenbanken = MindMapNode(name="Datenbanken", parent=informatik) - softwareentwicklung = MindMapNode(name="Softwareentwicklung", parent=informatik) - computergrafik = MindMapNode(name="Computergrafik", parent=informatik) - cybersicherheit = MindMapNode(name="Cybersicherheit", parent=informatik) - - # Alle Nodes zur Session hinzufügen - all_nodes = [physik, chemie, biologie, astronomie, geologie, - quantenphysik, relativitätstheorie, thermodynamik, - philosophie, geschichte, linguistik, literaturwissenschaft, religionswissenschaft, - soziologie, psychologie, politikwissenschaft, wirtschaftswissenschaften, - maschinenbau, elektrotechnik, bauingenieurwesen, verfahrenstechnik, - humanmedizin, zahnmedizin, pharmazie, neurologie, onkologie, - künstliche_intelligenz, datenbanken, softwareentwicklung, computergrafik, cybersicherheit] - - db.session.add_all(all_nodes) - - # Füge einen Beispiel-Gedanken hinzu - thought = Thought( - content="Dies ist ein Beispiel-Gedanke zur Wissenschaft allgemein.", - branch="Wissenschaft", - user_id=1 # Admin-Benutzer - ) - db.session.add(thought) - root.thoughts.append(thought) - - # Füge weitere Beispiel-Gedanken hinzu - thought_ai = Thought( - content="Künstliche Intelligenz transformiert viele Bereiche der Wissenschaft und Gesellschaft.", - branch="Künstliche Intelligenz", - user_id=1 - ) - db.session.add(thought_ai) - künstliche_intelligenz.thoughts.append(thought_ai) - - thought_physik = Thought( - content="Die Quantenphysik stellt unser Verständnis der Realität grundlegend in Frage.", - branch="Quantenphysik", - user_id=1 - ) - db.session.add(thought_physik) - quantenphysik.thoughts.append(thought_physik) - - db.session.commit() - - print("Datenbank wurde erfolgreich initialisiert!") - print(f"Admin-Benutzer erstellt: admin/admin123") - print(f"Root-Node 'Wissenschaft' erstellt mit mehreren Hauptkategorien und Unterkategorien") \ No newline at end of file diff --git a/website/instance/mindmap.db b/website/instance/mindmap.db deleted file mode 100644 index 1db9c4d6eef2c9847f9474421a3f2b90b30ce84e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 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 NdG}wM3X8HV{R{2Crgs1U diff --git a/website/requirements.txt b/website/requirements.txt deleted file mode 100644 index dda7386..0000000 --- a/website/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -flask -flask-login -flask-wtf -email-validator -python-dotenv -flask-sqlalchemy \ No newline at end of file diff --git a/website/run.py b/website/run.py deleted file mode 100644 index 986fff9..0000000 --- a/website/run.py +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import logging -from app import create_app - -# Configure logging -logging.basicConfig(level=logging.DEBUG) -logger = logging.getLogger(__name__) - -app = create_app() - -if __name__ == "__main__": - logger.info("Starting Flask server on http://127.0.0.1:5000") - try: - # Use threaded=True for better request handling - app.run(host="127.0.0.1", port=5000, debug=True, use_reloader=False, threaded=True) - except Exception as e: - logger.error(f"Error starting Flask server: {e}") - sys.exit(1) \ No newline at end of file diff --git a/website/static/background.js b/website/static/background.js deleted file mode 100644 index bbab5ef..0000000 --- a/website/static/background.js +++ /dev/null @@ -1,108 +0,0 @@ -// Background animation with Three.js -let scene, camera, renderer, stars = []; - -function initBackground() { - // Setup scene - scene = new THREE.Scene(); - - // Setup camera - camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000); - camera.position.z = 100; - - // Setup renderer - renderer = new THREE.WebGLRenderer({ alpha: true }); - renderer.setSize(window.innerWidth, window.innerHeight); - renderer.setClearColor(0x000000, 0); // Transparent background - - // Append renderer to DOM - const backgroundContainer = document.getElementById('background-container'); - if (backgroundContainer) { - backgroundContainer.appendChild(renderer.domElement); - } - - // Add stars - for (let i = 0; i < 1000; i++) { - const geometry = new THREE.SphereGeometry(0.2, 8, 8); - const material = new THREE.MeshBasicMaterial({ color: 0xffffff, transparent: true, opacity: Math.random() * 0.5 + 0.1 }); - const star = new THREE.Mesh(geometry, material); - - // Random position - star.position.x = Math.random() * 600 - 300; - star.position.y = Math.random() * 600 - 300; - star.position.z = Math.random() * 600 - 300; - - // Store reference to move in animation - star.velocity = Math.random() * 0.02 + 0.005; - stars.push(star); - - scene.add(star); - } - - // Add large glowing particles - for (let i = 0; i < 15; i++) { - const size = Math.random() * 5 + 2; - const geometry = new THREE.SphereGeometry(size, 16, 16); - - // Create a glowing material - const color = new THREE.Color(); - color.setHSL(Math.random(), 0.7, 0.5); // Random hue - - const material = new THREE.MeshBasicMaterial({ - color: color, - transparent: true, - opacity: 0.2 - }); - - const particle = new THREE.Mesh(geometry, material); - - // Random position but further away - particle.position.x = Math.random() * 1000 - 500; - particle.position.y = Math.random() * 1000 - 500; - particle.position.z = Math.random() * 200 - 400; - - // Store reference to move in animation - particle.velocity = Math.random() * 0.01 + 0.002; - stars.push(particle); - - scene.add(particle); - } - - // Handle window resize - window.addEventListener('resize', onWindowResize); - - // Start animation - animate(); -} - -function animate() { - requestAnimationFrame(animate); - - // Move stars - stars.forEach(star => { - star.position.z += star.velocity; - - // Reset position if star moves too close - if (star.position.z > 100) { - star.position.z = -300; - } - }); - - // Rotate the entire scene slightly for a dreamy effect - scene.rotation.y += 0.0003; - scene.rotation.x += 0.0001; - - renderer.render(scene, camera); -} - -function onWindowResize() { - camera.aspect = window.innerWidth / window.innerHeight; - camera.updateProjectionMatrix(); - renderer.setSize(window.innerWidth, window.innerHeight); -} - -// Initialize background when the DOM is loaded -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', initBackground); -} else { - initBackground(); -} \ No newline at end of file diff --git a/website/static/background.mp4 b/website/static/background.mp4 deleted file mode 100644 index 050b743..0000000 --- a/website/static/background.mp4 +++ /dev/null @@ -1 +0,0 @@ -C:\Users\firem\Downloads\background.mp4 diff --git a/website/static/mindmap.js b/website/static/mindmap.js deleted file mode 100644 index 15d2732..0000000 --- a/website/static/mindmap.js +++ /dev/null @@ -1,49 +0,0 @@ -// Erstelle eine einfache Mindmap-Struktur mit D3.js -const data = { - name: "Wissenschaftliche Mindmap", - children: [ - { name: "Forschung", children: [{ name: "Theorie" }, { name: "Experimente" }] }, - { name: "Technologie", children: [{ name: "Datenbanken" }, { name: "Cloud Computing" }] } - ] -}; - -// D3.js-Setup für die Darstellung der Mindmap -const width = 800; -const height = 600; -const margin = 50; - -const svg = d3.select("#mindmap") - .append("svg") - .attr("width", width) - .attr("height", height); - -const root = d3.hierarchy(data); -const treeLayout = d3.tree().size([width - margin, height - margin]); -treeLayout(root); - -const links = svg.selectAll(".link") - .data(root.links()) - .enter() - .append("line") - .attr("class", "link") - .attr("x1", d => d.source.x + margin) - .attr("y1", d => d.source.y + margin) - .attr("x2", d => d.target.x + margin) - .attr("y2", d => d.target.y + margin) - .attr("stroke", "#2c3e50"); - -const nodes = svg.selectAll(".node") - .data(root.descendants()) - .enter() - .append("g") - .attr("class", "node") - .attr("transform", d => `translate(${d.x + margin},${d.y + margin})`); - -nodes.append("circle") - .attr("r", 20) - .attr("fill", "#3498db"); - -nodes.append("text") - .attr("dx", 25) - .attr("dy", 5) - .text(d => d.data.name); \ No newline at end of file diff --git a/website/static/style.css b/website/static/style.css deleted file mode 100644 index 6dc98ff..0000000 --- a/website/static/style.css +++ /dev/null @@ -1,27 +0,0 @@ -/* Grundlegendes Styling für die Seite */ -body { - font-family: Arial, sans-serif; - margin: 0; - padding: 0; - background-color: #f0f0f0; -} - -/* Styling für den Header */ -h1 { - text-align: center; - color: #2c3e50; - margin-top: 50px; -} - -/* Button für die Navigation */ -button { - padding: 10px 20px; - background-color: #3498db; - color: white; - border: none; - cursor: pointer; -} - -button:hover { - background-color: #2980b9; -} \ No newline at end of file diff --git a/website/static/three.min.js b/website/static/three.min.js deleted file mode 100644 index e69de29..0000000 diff --git a/website/templates/admin.html b/website/templates/admin.html deleted file mode 100644 index 3726b05..0000000 --- a/website/templates/admin.html +++ /dev/null @@ -1,109 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Admin | Wissenschaftliche Mindmap{% endblock %} - -{% block content %} -
-
-

Admin Bereich

-

Verwalte Benutzer, Gedanken und die Mindmap-Struktur.

-
- -
- -
-
-

Benutzer

- {{ users|length }} -
- -
- - - - - - - - - - - {% for user in users %} - - - - - - - {% endfor %} - -
IDBenutzernameEmailRolle
{{ user.id }}{{ user.username }}{{ user.email }} - {% if user.is_admin %} - Admin - {% else %} - Benutzer - {% endif %} -
-
-
- - -
-
-

Mindmap Struktur

- {{ nodes|length }} -
- -
-
- {% for node in nodes %} -
-
- {{ node.name }} - ID: {{ node.id }} -
- {% if node.parent %} -

Eltern: {{ node.parent.name }}

- {% else %} -

Hauptknoten

- {% endif %} -
- {% endfor %} -
-
- -
- -
-
- - -
-
-

Gedanken

- {{ thoughts|length }} -
- -
-
- {% for thought in thoughts %} -
-
- {{ thought.branch }} - {{ thought.timestamp.strftime('%d.%m.%Y') }} -
-

{{ thought.content }}

-
- Von: {{ thought.author.username }} - {{ thought.comments|length }} Kommentar(e) -
-
- {% endfor %} -
-
-
-
-
-{% endblock %} \ No newline at end of file diff --git a/website/templates/base.html b/website/templates/base.html deleted file mode 100644 index 5231846..0000000 --- a/website/templates/base.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - {% block title %}Wissenschaftliche Mindmap{% endblock %} - - - - - {% block extra_head %}{% endblock %} - - - -
- -
- - - - - {% with messages = get_flashed_messages() %} - {% if messages %} -
- {% for message in messages %} -
- {{ message }} -
- {% endfor %} -
- {% endif %} - {% endwith %} - - -
- {% block content %}{% endblock %} -
-
- - - - - {% block scripts %}{% endblock %} - - \ No newline at end of file diff --git a/website/templates/index.html b/website/templates/index.html deleted file mode 100644 index 55e5b10..0000000 --- a/website/templates/index.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -
-
-

Willkommen zur Wissenschafts-Mindmap

-

Verknüpfe Wissen in neuronalen Strukturen und teile deine Gedanken mit der Community.

- -
- - Zum Netzwerk - - {% if not current_user.is_authenticated %} - - Registrieren - - {% endif %} -
-
- -
-
-

Visualisiere Wissen

-

Erkenne Zusammenhänge zwischen verschiedenen Wissensgebieten durch intuitive Mindmaps.

-
- -
-

Teile Gedanken

-

Füge deine eigenen Gedanken zu bestehenden Themen hinzu und bereichere die Community.

-
- -
-

Interaktive Vernetzung

-

Beteilige dich an Diskussionen und sieh wie sich Ideen gemeinsam entwickeln.

-
-
-
-{% endblock %} \ No newline at end of file diff --git a/website/templates/login.html b/website/templates/login.html deleted file mode 100644 index 471d79b..0000000 --- a/website/templates/login.html +++ /dev/null @@ -1,41 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Anmelden | Wissenschaftliche Mindmap{% endblock %} - -{% block content %} -
-
-

Anmelden

- -
-
- - -
- -
- - -
- -
- -
-
- -
-

- Noch kein Konto? - - Registrieren - -

-
-
-
-{% endblock %} \ No newline at end of file diff --git a/website/templates/mindmap.html b/website/templates/mindmap.html deleted file mode 100644 index 5c27249..0000000 --- a/website/templates/mindmap.html +++ /dev/null @@ -1,708 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Mindmap | Wissenschaftliche Mindmap{% endblock %} - -{% block extra_head %} - -{% endblock %} - -{% block content %} -
- -
-
-

Wissenschaftliche Mindmap

-
- - -
- - - -
- - -
-

Kategorien

-
-
- - Naturwissenschaften -
-
- - Geisteswissenschaften -
-
- - Technologie -
-
- - Künste -
-
-
- - -
-
- - -
-
-
-

Keine Auswahl

- -
- - {% if current_user.is_authenticated %} -
-

Teile deinen Gedanken

- - -
- {% else %} -
-

Melde dich an, um deine Gedanken zu teilen

- Anmelden -
- {% endif %} - -

Community Gedanken

-
-
-

Wähle einen Knoten aus, um Gedanken zu sehen

-
-
-
-
-
- - - -{% endblock %} - -{% block scripts %} - - -{% endblock %} \ No newline at end of file diff --git a/website/templates/profile.html b/website/templates/profile.html deleted file mode 100644 index da208e1..0000000 --- a/website/templates/profile.html +++ /dev/null @@ -1,131 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Profil | Wissenschaftliche Mindmap{% endblock %} - -{% block content %} -
-
-
-
-

Hallo, {{ current_user.username }}

-

{{ current_user.email }}

-
- - -
-
- -
-

Deine Gedanken

- - {% if thoughts %} -
- {% for thought in thoughts %} -
-
- {{ thought.branch }} - {{ thought.timestamp.strftime('%d.%m.%Y, %H:%M') }} -
-

{{ thought.content }}

- -
-
- {{ thought.comments|length }} Kommentar(e) -
- - Details anzeigen -
-
- {% endfor %} -
- {% else %} -
-

Du hast noch keine Gedanken geteilt.

- Zur Mindmap gehen und mitmachen -
- {% endif %} -
-
- - - -{% endblock %} - -{% block scripts %} - -{% endblock %} \ No newline at end of file diff --git a/website/templates/register.html b/website/templates/register.html deleted file mode 100644 index b4d6671..0000000 --- a/website/templates/register.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Registrieren | Wissenschaftliche Mindmap{% endblock %} - -{% block content %} -
-
-

Registrieren

- -
-
- - -
- -
- - -
- -
- - -
- -
- -
-
- -
-

- Bereits registriert? - - Anmelden - -

-
-
-
-{% endblock %} \ No newline at end of file diff --git a/website/test_app.py b/website/test_app.py deleted file mode 100644 index 0f9cdc0..0000000 --- a/website/test_app.py +++ /dev/null @@ -1,35 +0,0 @@ -from flask import Flask - -app = Flask(__name__) - -@app.route('/') -def hello(): - return """ - - - - Test Seite - - - -
-

Test Seite funktioniert!

-

Wenn Sie diese Seite sehen können, funktioniert der grundlegende Flask-Server korrekt.

-

Server-Status:

-
    -
  • Flask läuft auf Port 5000
  • -
  • Keine Datenbankverbindung erforderlich
  • -
  • Keine Templates erforderlich
  • -
-

Versuchen Sie, diese URL in verschiedenen Browsern zu öffnen.

-
- - - """ - -if __name__ == '__main__': - app.run(host='0.0.0.0', port=5000, debug=True) \ No newline at end of file