- Server: ORM-Modelle Kontaktadresse (kontaktadressen) und CallLog (call_logs) mit FK projekt_id - Server: Geschäftslogik kontaktadresse.py und call_log.py (get/create/update/delete) - Server: DB-Migration V01_03 (kontaktadressen + call_logs Tabellen) - Server: REST-Endpunkte /xhr/kontaktadresse/* und /xhr/calllog/* mit Autorisierung - Server: CLI init-db legt Muster-Kontaktadressen (1-3/Projekt) und Muster-Gesprächsnotizen (2-5/Projekt) an - Client: kontaktadresse.ts auf REST umgestellt, snake_case, In-Memory entfernt - Client: call_log.ts auf REST umgestellt, snake_case, In-Memory entfernt, Submit-Handler implementiert - Client: projekt.ts In-Memory vollständig entfernt (keine weiteren Verbraucher) - Client: Route-Params projektId → projekt_id korrigiert (3 Stellen in projekt.ts) - Client: addCallLog in projekt.ts Route-Params auf snake_case angepasst - AGENTS.md: Erinnerung client-build-Skill nach .ts-Änderungen hinzugefügt Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
101 lines
3.0 KiB
Python
101 lines
3.0 KiB
Python
"""
|
|
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 _db_V01_01():
|
|
"""
|
|
Legt die Tabelle 'kontakte' an. Bei bestehenden Datenbanken, die mit
|
|
Version 01.00 initialisiert wurden, fehlt diese Tabelle, da das
|
|
Kontakt-Modell erst nachträglich ergänzt wurde. create_all erzeugt
|
|
nur fehlende Tabellen, bestehende bleiben unangetastet.
|
|
"""
|
|
dbapp.create_all(bind_key=BINDKEY)
|
|
_updatesysteminfo('01.01')
|
|
session.commit()
|
|
|
|
|
|
def _db_V01_02():
|
|
"""
|
|
Legt die Tabelle 'projekte' an. Bei bestehenden Datenbanken, die mit
|
|
Version 01.01 initialisiert wurden, fehlt diese Tabelle, da das
|
|
Projekt-Modell erst nachträglich ergänzt wurde. create_all erzeugt
|
|
nur fehlende Tabellen, bestehende bleiben unangetastet.
|
|
"""
|
|
dbapp.create_all(bind_key=BINDKEY)
|
|
_updatesysteminfo('01.02')
|
|
session.commit()
|
|
|
|
|
|
def _db_V01_03():
|
|
"""
|
|
Legt die Tabellen 'kontaktadressen' und 'call_logs' an. Bei bestehenden
|
|
Datenbanken, die mit Version 01.02 initialisiert wurden, fehlen diese
|
|
Tabellen, da die Modelle erst nachträglich ergänzt wurden.
|
|
"""
|
|
dbapp.create_all(bind_key=BINDKEY)
|
|
_updatesysteminfo('01.03')
|
|
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')
|