feat(discord): Kunden-Kontoverknüpfung per Discord-OAuth
Erster Teil des größeren Discord-Ausbaus (Konto verknüpfen, Tickets über Discord sehen/beantworten). Dieser Schritt: Kunden können unter "Mein Konto" ihr Discord-Konto per OAuth verknüpfen/trennen. - Migration 027: discord_settings um client_id/client_secret_enc/ ticket_channel_id erweitert; users um discord_user_id/ discord_username (unique); discord_oauth_states (kurzlebiger CSRF-Schutz für den Redirect-Flow, 10 Min. gültig); neue Tabelle ticket_discord_threads für den nächsten Schritt (Ticket-Threads). - Neue Routen: GET/POST /discord/link, /discord/unlink, GET /discord/oauth/start (leitet zu Discord weiter), GET /discord/oauth/callback (tauscht Code gegen Discord-Nutzer-ID, verknüpft das Konto, verhindert doppelte Verknüpfung). - Einstellungen > Discord: neue Felder für Client ID/Secret, Anzeige der einzutragenden Redirect-URI, aktualisierte Anleitung inkl. OAuth-Einrichtung und Hinweis auf die Message Content Intent (für den nächsten Schritt: Ticket-Threads). Noch offen (nächster Schritt): Ticket-Threads je Ticket, bidirektionale Synchronisierung der Nachrichten. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
c8da9362a7
commit
fcbd34b0c6
4 changed files with 153 additions and 33 deletions
23
migrations/027_discord_linking.sql
Normal file
23
migrations/027_discord_linking.sql
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
-- Discord-OAuth: Kunden verknüpfen ihr Discord-Konto mit ihrem Kundencenter-Konto (für Ticket-Kanäle je Ticket).
|
||||
ALTER TABLE discord_settings
|
||||
ADD COLUMN client_id VARCHAR(32) NULL,
|
||||
ADD COLUMN client_secret_enc TEXT NULL,
|
||||
ADD COLUMN ticket_channel_id VARCHAR(32) NULL;
|
||||
|
||||
ALTER TABLE users
|
||||
ADD COLUMN discord_user_id VARCHAR(32) NULL UNIQUE,
|
||||
ADD COLUMN discord_username VARCHAR(100) NULL;
|
||||
|
||||
-- Kurzlebiger Zustand für den OAuth-Redirect (CSRF-Schutz), wird beim erfolgreichen Callback gelöscht.
|
||||
CREATE TABLE discord_oauth_states (
|
||||
state CHAR(43) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL REFERENCES users(id),
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Ticket <-> Discord-Thread-Zuordnung.
|
||||
CREATE TABLE ticket_discord_threads (
|
||||
ticket_id CHAR(36) PRIMARY KEY REFERENCES tickets(id),
|
||||
thread_id VARCHAR(32) NOT NULL UNIQUE,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
Loading…
Add table
Add a link
Reference in a new issue