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,71 @@
|
||||
"""
|
||||
REST-Endpunkte für die CRM-Domain.
|
||||
|
||||
Die Endpunkte orientieren sich 1:1 an den clientseitig definierten Pfaden
|
||||
(siehe Client/models/*.ts). Pro Entität gibt es einen zusammenhängenden Block
|
||||
mit den Aktionen list/get/create/update/delete.
|
||||
|
||||
Die Autorisierung erfolgt über den Decorator authorisation_required; AppAdmin
|
||||
und SysAdmin sind darin implizit immer erlaubt. Die Rollen Mitarbeiter und
|
||||
KundenManager werden aus crm.model importiert.
|
||||
|
||||
:author: Mistral Vibe <vibe@mistral.ai>
|
||||
:date: 2026-09-02
|
||||
:version: 1.0
|
||||
"""
|
||||
from flask import current_app as app
|
||||
from flask import jsonify, request
|
||||
|
||||
from auth.decorators import authorisation_required
|
||||
from crm.model import KUNDEN_MANAGER, MITARBEITER
|
||||
from crm.model import kunde as kunden
|
||||
|
||||
print("crm-routes")
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Kunde #
|
||||
# --------------------------------------------------------------------------- #
|
||||
|
||||
|
||||
@app.get("/xhr/kunde/list")
|
||||
@authorisation_required([MITARBEITER, KUNDEN_MANAGER])
|
||||
def kunde_list():
|
||||
"""Liefert alle Kunden als Liste."""
|
||||
result = [k.to_dict() for k in kunden.get_kunden()]
|
||||
return jsonify(result), 200
|
||||
|
||||
|
||||
@app.get("/xhr/kunde/get")
|
||||
@authorisation_required([MITARBEITER, KUNDEN_MANAGER])
|
||||
def kunde_get():
|
||||
"""Liefert einen einzelnen Kunden anhand seiner ID (Query-Param id)."""
|
||||
kunde = kunden.get_kunde(int(request.args.get("id")))
|
||||
return jsonify(kunde.to_dict()), 200
|
||||
|
||||
|
||||
@app.post("/xhr/kunde/create")
|
||||
@authorisation_required([KUNDEN_MANAGER])
|
||||
def kunde_create():
|
||||
"""Legt einen neuen Kunden an. ID wird serverseitig vergeben."""
|
||||
kunde = kunden.create_kunde(request.json)
|
||||
return jsonify(kunde.to_dict()), 200
|
||||
|
||||
|
||||
@app.put("/xhr/kunde/update")
|
||||
@authorisation_required([KUNDEN_MANAGER])
|
||||
def kunde_update():
|
||||
"""Aktualisiert einen bestehenden Kunden."""
|
||||
kunde = kunden.update_kunde(request.json)
|
||||
return jsonify(kunde.to_dict()), 200
|
||||
|
||||
|
||||
@app.delete("/xhr/kunde/delete")
|
||||
@authorisation_required([KUNDEN_MANAGER])
|
||||
def kunde_delete():
|
||||
"""Löscht einen Kunden anhand seiner ID (Query-Param id)."""
|
||||
kunden.delete_kunde(int(request.args.get("id")))
|
||||
return jsonify({}), 200
|
||||
|
||||
|
||||
print("########## crm.routes importiert")
|
||||
Reference in new issue
Block a user