feat(teams): helper resolve_channel_for_server (server > application > default)
This commit is contained in:
parent
de9704facf
commit
6839b3e59d
@ -76,6 +76,50 @@ def _adaptive_card(title: str, body_lines: list, color: str = "good") -> Dict[st
|
||||
}
|
||||
|
||||
|
||||
def resolve_channel_for_server(db, server_id: int) -> Dict[str, Any]:
|
||||
"""Résout le canal Teams à utiliser pour un serveur donné.
|
||||
Priorité :
|
||||
1. servers.teams_channel_id (override par serveur)
|
||||
2. applications.teams_channel_id (canal de l'app rattachée)
|
||||
3. teams_channels.is_default = true (canal global)
|
||||
Retourne {ok, channel_id, name, webhook_url, source} ou {ok: False, msg}."""
|
||||
from sqlalchemy import text as sqlt
|
||||
if not server_id:
|
||||
return {"ok": False, "msg": "server_id manquant"}
|
||||
# 1) Override par serveur
|
||||
row = db.execute(sqlt("""
|
||||
SELECT tc.id, tc.name, tc.webhook_url, 'server' AS source
|
||||
FROM servers s
|
||||
JOIN teams_channels tc ON tc.id = s.teams_channel_id
|
||||
WHERE s.id = :sid AND tc.is_active = true
|
||||
"""), {"sid": server_id}).fetchone()
|
||||
if row:
|
||||
return {"ok": True, "channel_id": row.id, "name": row.name,
|
||||
"webhook_url": row.webhook_url, "source": row.source}
|
||||
# 2) Canal de l'application
|
||||
row = db.execute(sqlt("""
|
||||
SELECT tc.id, tc.name, tc.webhook_url, 'application' AS source
|
||||
FROM servers s
|
||||
JOIN applications a ON a.id = s.application_id
|
||||
JOIN teams_channels tc ON tc.id = a.teams_channel_id
|
||||
WHERE s.id = :sid AND tc.is_active = true
|
||||
"""), {"sid": server_id}).fetchone()
|
||||
if row:
|
||||
return {"ok": True, "channel_id": row.id, "name": row.name,
|
||||
"webhook_url": row.webhook_url, "source": row.source}
|
||||
# 3) Canal défaut global
|
||||
row = db.execute(sqlt("""
|
||||
SELECT id, name, webhook_url, 'default' AS source
|
||||
FROM teams_channels
|
||||
WHERE is_default = true AND is_active = true
|
||||
ORDER BY id LIMIT 1
|
||||
""")).fetchone()
|
||||
if row:
|
||||
return {"ok": True, "channel_id": row.id, "name": row.name,
|
||||
"webhook_url": row.webhook_url, "source": row.source}
|
||||
return {"ok": False, "msg": "Aucun canal Teams configuré (ni serveur, ni app, ni défaut)"}
|
||||
|
||||
|
||||
def send_test_message(webhook_url: str, channel_name: str, sender: str) -> Dict[str, Any]:
|
||||
"""Envoie un message de test pour valider la config du webhook."""
|
||||
payload = _adaptive_card(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user