Server: CRM-Domain mit REST-API, Autorisierung und CLI
Neues crm-Paket mit Datenmodell, Geschäftslogik und REST-Endpunkten
für die Entität Kunde (/xhr/kunde/{list,get,create,update,delete}).
authorisation_required-Decorator: app-spezifische Rollenprüfung via
has_permission(appid, ...). SysAdmin systemweit, AppAdmin implizit in
seiner Anwendung, User (Mitarbeiter) als Basis-Rolle, Zusatz-Rollen
wie KundenManager additiv.
Flask CLI: init-db (Schema + Musterdaten + App-Rollen) und reset-db
(Bestätigung, behält SysAdmin).
config.ini: Neuer appid-Eintrag (KBPlusCRM), getrennt vom technischen
PROJEKTNAME. checkdb: appid aus config, Migration _db_V01_02 für
bestehende DBs.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
1 parent
65f81a0ee8
commit
13eaaec9c1
12 files changed
+627
-8
No files matched your search
@@ -0,0 +1,65 @@
|
||||
"""
|
||||
DB-Versionierung für die CRM-Datenbank (kbp_crm.db).
|
||||
|
||||
Analog zu auth/model/checkdb.py: Beim Start wird checkupdates() aufgerufen und
|
||||
führt alle _db_Vxx_xx-Funktionen aus, deren Versionsnummer größer ist als die
|
||||
in der Systeminfo-Tabelle vermerkte. Neue Migrationen werden als weitere
|
||||
_db_Vxx_xx-Funktionen ergänzt.
|
||||
|
||||
:author: Mistral Vibe <vibe@mistral.ai>
|
||||
:date: 2026-09-02
|
||||
:version: 1.0
|
||||
"""
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy.exc import OperationalError
|
||||
|
||||
from db import dbapp
|
||||
from crm.model import CrmSysteminfo
|
||||
|
||||
BINDKEY = "appdb"
|
||||
session = dbapp.session
|
||||
|
||||
|
||||
def _updatesysteminfo(versionnr: str):
|
||||
"""Aktualisiert Versionsnummer und Zeitstempel in der Systeminfo-Tabelle."""
|
||||
s: CrmSysteminfo = CrmSysteminfo.query.get(1)
|
||||
s.version = versionnr
|
||||
s.lastupdate = datetime.now()
|
||||
|
||||
|
||||
def _db_V01_00():
|
||||
"""
|
||||
Ersteinrichtung: Alle CRM-Tabellen anlegen und Systeminfo-Datensatz
|
||||
schreiben.
|
||||
"""
|
||||
dbapp.create_all(bind_key=BINDKEY)
|
||||
systeminfo = CrmSysteminfo()
|
||||
systeminfo.id = 1
|
||||
systeminfo.version = "01.00"
|
||||
systeminfo.lastupdate = datetime.now()
|
||||
systeminfo.initialinstall = datetime.now()
|
||||
session.add(systeminfo)
|
||||
session.commit()
|
||||
|
||||
|
||||
def checkupdates():
|
||||
"""
|
||||
Ermittelt die aktuelle DB-Version aus der Systeminfo-Tabelle und führt alle
|
||||
_db_Vxx_xx-Funktionen aus, deren Versionsnummer größer ist. Ist die
|
||||
Datenbank noch leer (Tabelle fehlt), wird die Ersteinrichtung ausgeführt.
|
||||
"""
|
||||
curr_dbversion = '_db_V01_00'
|
||||
try:
|
||||
systeminfo: CrmSysteminfo = CrmSysteminfo.query.get(1)
|
||||
curr_dbversion = "_db_V" + systeminfo.version.replace(".", "_")
|
||||
except (OperationalError, AttributeError):
|
||||
_db_V01_00()
|
||||
|
||||
versionen = sorted(filter(lambda f: f.startswith("_db_V"), globals()))
|
||||
|
||||
for v in versionen:
|
||||
if v > curr_dbversion:
|
||||
globals()[v]()
|
||||
|
||||
print('########## crm Database updated')
|
||||
Reference in new issue
Block a user