From c51a8e23cac4760785f4d3e046375ea86e181b90 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Sat, 10 May 2025 23:15:45 +0200 Subject: [PATCH] =?UTF-8?q?chore:=20Aktualisierung=20der=20Codebasis=20und?= =?UTF-8?q?=20Verbesserung=20der=20Struktur=20f=C3=BCr=20bessere=20Wartbar?= =?UTF-8?q?keit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/app.cpython-313.pyc | Bin 123073 -> 123139 bytes __pycache__/models.cpython-313.pyc | Bin 26990 -> 29306 bytes app.py | 7 ++++--- database/systades.db | Bin 131072 -> 143360 bytes logs/app.log | 6 ++++++ models.py | 31 ++++++++++++++++++++++++++++- 6 files changed, 40 insertions(+), 4 deletions(-) diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index a39f09ab24e10b872e6e0df4873e5fd06f330c33..7cd674d2b6f5972bc46f8af88152e8cea3c519bc 100644 GIT binary patch delta 19650 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 delta 19706 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 bmKC_jeD)$MeSejd7R*WhDlaWqp8S6RS&d|M diff --git a/__pycache__/models.cpython-313.pyc b/__pycache__/models.cpython-313.pyc index f8a220e898d561375e6a745d14c84eab6268676a..f8687256cf1317b47446ff3bd00bcf557f8016b4 100644 GIT binary patch delta 1504 zcmY*ZOH3PA6rHh+Kf(Bezx=|`mb8XY7Xl?tNg{*!Six58vD9EtEMq^+AZ(L2wkl{P zELEb7QmM9P0of!(RTUytjS*7IqEe{3aoa_o%L3P%ZmKT2sE{C=E~?&V2%@8z<2&!3 zcix@z?(^Tjvj6W&&3E--NY{(bxW*JA~po&9P1%?C=(&b-F(?=>_0(2Qn4P8ke? zyK1A?Vf2Qyq-d|}PADBWcfL`U@7iJ~loMo6UyeAbSJg2NELBx^8{woNib6UST3$jz z5=bi=e-`&lA`zvk7lu(3&mtiMaf3Ua6jFki!O=__V*|+f9cpQN*lemQf}?IvRWa)E zhN^XLkI(Cu%9kx33&>##R97^@j5VfGZ_Rls^)>))%g3X*6-H~E{}rowRqVezdp-TE zlDW(K$MP55G>+0jzf`h-+G8C~M%qZkPyd`5PReg{||n@2dqc~f&~oQ!5* zLr{wQ;k#LcxjCRFPy)@O6yi<=L@t|(bHfOu*nCDvWK#*03gHgWTE$&}W7q|VdjK3V zJV@hrC^#vM15}kFtwF?II&zD`ClvZ=`Xmlf@5!8#~=W2pL8N5AEio1!*(bA*uaMtW3Jd zS!F?`WYk+mfzsSyx9g(AM}fU`Ts* zYs_+f{@alVMoTynS%XO;^(e^m|LDQs}@JE&HMe zzPYk*j!Y&Cawc%w$=26C#o&oJ~z16Ndl3BK)f7?=LKR#(upE@@L|qdX*91p3(n0;yE-yBP6GTvV7eTbCNuXA8D^Os zmXW|TL_u~$mUlv6de^#|&fvbtqsl5|}o?)Qnhg{bcw%4Jq%&i_)))-Avx zrAAWg9GAbikJz5tzgEppLoGw04WOzXN~Yu4MRWuA0UK^ctn7R>w<~+=m}z9YkGte- bYd&<$z|XPP%r3C`zV)kxt1lTE*OvJYQd=iXZ8`ZnnSkl=vtv7#TyBNo$skJyak5O3w tsHjK=M92b(TO2mI`6;D2sdh!Oj0_Aw#8A9z^Q`8CjNJ5$aH~+VdB~AQXK#r&+ zkPzW*64)ld$fCf^%iKSm-GEV%g~5~2c%q~1c6Dz?Q^v`6nUc0YFl1EZGv-!j;9*|Q zz?aR-!?T*ZjOz}k9M?>CY1Vw^<*Y`0dw3Li6hU^t0h=7#b`uB2&s;1(A^+*x-i+R; zW^Q2IzSob@dE=r90-Fx72nevTKV#rK${Wn1$7RH!$o_1zpui<|HcNRnabNYxA9*Db zax?Q%auW;Ui!&07QsWI#xJoU2a_r*j>WuBtC5cHnsVI^t97X3KSH}=ng%C$4A6Err zsmTr8GSer!Gs<&T$hf`Hm(iLL04mCs AfdBvi delta 169 zcmZp8z|qjaF+o~ThJk@W0f=EhWTK9-s0@Q%n`y{NJ5nVH_ye5B~AQXMa&R| zA_7eU+XNU{6qp4V>!!0CFekg+J z*GzV4)_msWtVVo$cpI5ad14qWCpwC6w{&29$F<$lfYFq3yPgh{8sqk3dQ4V~+xPe} Hx@-gh4SOPU diff --git a/logs/app.log b/logs/app.log index 49be42e..3d3804f 100644 --- a/logs/app.log +++ b/logs/app.log @@ -13,3 +13,9 @@ 2025-05-10 23:14:44,251 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:75] 2025-05-10 23:14:46,088 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:75] 2025-05-10 23:14:46,088 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:75] +2025-05-10 23:15:14,106 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:75] +2025-05-10 23:15:15,855 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:75] +2025-05-10 23:15:15,855 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:75] +2025-05-10 23:15:30,739 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:76] +2025-05-10 23:15:32,667 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:76] +2025-05-10 23:15:32,667 INFO: Anwendung gestartet [in C:\Users\TTOMCZA.EMEA\Dev\website\app.py:76] diff --git a/models.py b/models.py index e275d1b..ca8573a 100644 --- a/models.py +++ b/models.py @@ -359,4 +359,33 @@ class ForumPost(db.Model): replies = db.relationship('ForumPost', backref=db.backref('parent', remote_side=[id]), lazy=True) def __repr__(self): - return f'' \ No newline at end of file + return f'' + +# Berechtigungstypen für Mindmap-Freigaben +class PermissionType(Enum): + READ = "Nur-Lesen" + EDIT = "Bearbeiten" + ADMIN = "Administrator" + +# Freigabemodell für Mindmaps +class MindmapShare(db.Model): + """Speichert Informationen über freigegebene Mindmaps und Berechtigungen""" + id = db.Column(db.Integer, primary_key=True) + mindmap_id = db.Column(db.Integer, db.ForeignKey('user_mindmap.id'), nullable=False) + shared_by_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + shared_with_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) + permission_type = db.Column(db.Enum(PermissionType), nullable=False, default=PermissionType.READ) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + last_accessed = db.Column(db.DateTime, nullable=True) + + # Beziehungen + mindmap = db.relationship('UserMindmap', backref=db.backref('shares', lazy='dynamic')) + shared_by = db.relationship('User', foreign_keys=[shared_by_id], backref=db.backref('shared_mindmaps', lazy='dynamic')) + shared_with = db.relationship('User', foreign_keys=[shared_with_id], backref=db.backref('accessible_mindmaps', lazy='dynamic')) + + __table_args__ = ( + db.UniqueConstraint('mindmap_id', 'shared_with_id', name='unique_mindmap_share'), + ) + + def __repr__(self): + return f'' \ No newline at end of file