40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
"""In-App-Benachrichtigungen erzeugen (v1: kein Push/E-Mail, siehe CLAUDE.md).
|
||
|
||
Kleine Helfer, die Benachrichtigungs-Datensätze anlegen. Sie committen NICHT –
|
||
das übernimmt der aufrufende Request, damit die Auslöser-Aktion und ihre Hinweise
|
||
in einer Transaktion landen. Immer team-gescoped.
|
||
"""
|
||
|
||
from . import db
|
||
from .models import Benachrichtigung, User
|
||
from .team_scope import get_active_team_id, team_query
|
||
|
||
|
||
def benachrichtigen(user_id, text, url=None, typ=Benachrichtigung.TYP_DIENST):
|
||
"""Einen Hinweis an genau eine Person anlegen."""
|
||
db.session.add(
|
||
Benachrichtigung(
|
||
team_id=get_active_team_id(),
|
||
user_id=user_id,
|
||
typ=typ,
|
||
text=text,
|
||
url=url,
|
||
)
|
||
)
|
||
|
||
|
||
def benachrichtigen_team(text, url=None, typ=Benachrichtigung.TYP_NACHRICHT, ausser_user_ids=()):
|
||
"""Einen Hinweis an alle Team-Mitglieder anlegen (optional einige auslassen)."""
|
||
ausgenommen = set(ausser_user_ids)
|
||
for user in team_query(User).all():
|
||
if user.id in ausgenommen:
|
||
continue
|
||
db.session.add(
|
||
Benachrichtigung(
|
||
team_id=user.team_id,
|
||
user_id=user.id,
|
||
typ=typ,
|
||
text=text,
|
||
url=url,
|
||
)
|
||
)
|