py app init + zitadel doku
This commit is contained in:
1 parent
5b649f96f2
commit
5a0260e4fd
23 files changed
+1071
-1
No files matched your search
@@ -0,0 +1,96 @@
|
||||
"""
|
||||
Application Factory der OIDC Flask Showcase App.
|
||||
|
||||
Initialisiert Flask, SQLAlchemy und Authlib. Registriert alle Blueprints
|
||||
und stellt den CLI-Befehl ``flask seed-db`` bereit.
|
||||
|
||||
:author: <Vorname Nachname>
|
||||
:date: 2026-06-17
|
||||
:version: 0.1
|
||||
"""
|
||||
|
||||
import logging
|
||||
import click
|
||||
from flask import Flask
|
||||
|
||||
from .config import Config
|
||||
from .database import db
|
||||
from .auth import oauth, init_oauth
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
|
||||
def create_app(config_class=Config):
|
||||
app = Flask(__name__)
|
||||
app.config.from_object(config_class)
|
||||
|
||||
db.init_app(app)
|
||||
init_oauth(app)
|
||||
|
||||
from .routes import main
|
||||
app.register_blueprint(main)
|
||||
|
||||
_register_cli(app)
|
||||
|
||||
return app
|
||||
|
||||
|
||||
def _register_cli(app):
|
||||
@app.cli.command("seed-db")
|
||||
def seed_db():
|
||||
"""Initialisiert das Schema und befüllt die DB mit Testdaten."""
|
||||
from datetime import datetime
|
||||
from .models import (
|
||||
User, Client, Project,
|
||||
ProjectMitarbeiterMapping, ProjectKundenMapping, Note,
|
||||
)
|
||||
|
||||
db.drop_all()
|
||||
db.create_all()
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# PLATZHALTER – nach Zitadel-Setup durch echte sub-Werte ersetzen.
|
||||
# Anleitung: ZITADEL-SETUP.md, Schritt 6
|
||||
# ------------------------------------------------------------------
|
||||
ADMIN_ID = "ZITADEL_SUB_ADMIN"
|
||||
MITARBEITER_ID = "ZITADEL_SUB_MITARBEITER"
|
||||
KUNDE_ID = "ZITADEL_SUB_KUNDE"
|
||||
|
||||
db.session.add_all([
|
||||
User(zitadel_user_id=ADMIN_ID, email="admin@test.local", global_role="Admin"),
|
||||
User(zitadel_user_id=MITARBEITER_ID, email="ma@test.local", global_role="Mitarbeiter"),
|
||||
User(zitadel_user_id=KUNDE_ID, email="kunde@test.local", global_role="Kunde"),
|
||||
])
|
||||
|
||||
firma = Client(name="Firma Müller")
|
||||
db.session.add(firma)
|
||||
db.session.flush()
|
||||
|
||||
p1 = Project(name="Akquise Landkreis", client_id=firma.id)
|
||||
p2 = Project(name="Akquise Bundesstaat", client_id=firma.id)
|
||||
p3 = Project(name="Spezielle Produktpalette", client_id=firma.id)
|
||||
db.session.add_all([p1, p2, p3])
|
||||
db.session.flush()
|
||||
|
||||
# Mitarbeiter → Projekte 1 + 2 (nicht 3 → Failure-Test-Button)
|
||||
db.session.add_all([
|
||||
ProjectMitarbeiterMapping(user_id=MITARBEITER_ID, project_id=p1.id),
|
||||
ProjectMitarbeiterMapping(user_id=MITARBEITER_ID, project_id=p2.id),
|
||||
])
|
||||
|
||||
# Kunde → Projekt 1 (nicht 2 + 3 → Failure-Test-Button)
|
||||
db.session.add(ProjectKundenMapping(user_id=KUNDE_ID, project_id=p1.id))
|
||||
|
||||
db.session.add_all([
|
||||
Note(text="Erstkontakt aufgenommen.", project_id=p1.id,
|
||||
user_id=MITARBEITER_ID, created_at=datetime.utcnow()),
|
||||
Note(text="Angebot versendet.", project_id=p1.id,
|
||||
user_id=MITARBEITER_ID, created_at=datetime.utcnow()),
|
||||
Note(text="Folgetermin vereinbart.", project_id=p2.id,
|
||||
user_id=MITARBEITER_ID, created_at=datetime.utcnow()),
|
||||
])
|
||||
|
||||
db.session.commit()
|
||||
click.echo("Datenbank initialisiert und mit Testdaten befüllt.")
|
||||
click.echo(f" → Platzhalter-IDs aktiv: {ADMIN_ID}, {MITARBEITER_ID}, {KUNDE_ID}")
|
||||
click.echo(" → Echte IDs aus ZITADEL-SETUP.md Schritt 6 eintragen, dann erneut seeden.")
|
||||
Reference in new issue
Block a user