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>
23 lines
1 KiB
SQL
23 lines
1 KiB
SQL
-- 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;
|