Rollen neu geschnitten, Seitenzahl korrigiert, frühere Konten
Der Forums-Abgleich las von 25 Archivseiten nur zwei. WoltLab verlinkt in der Blätterleiste nur die Nachbarseiten und führt die Gesamtzahl in einem eigenen Element; ausgewertet wurden aber die Links. Alles jenseits von Seite zwei war damit unsichtbar - etwa ein Antrag auf Seite vier, der deshalb nie ankam. Die Rollen verlaufen jetzt zwischen erfassen und gewähren statt zwischen Alltag und Verwaltung: Editoren erfassen Käufe und führen Datei-Import, GExtension- und Forums-Abgleich samt Entscheidung über Anträge durch. Kulanz zu vergeben bleibt Administratoren, ebenso das Auflösen unklarer Pakete, weil dabei Kulanz entstehen kann. Dazu lassen sich frühere Steam- und Forumskonten am Spieler hinterlegen. Abgleich und Import prüfen sie mit, sodass ein Kontowechsel die Zuordnung nicht abreißen lässt. Steam-Kennungen werden dabei auf dieselbe Form gebracht wie die Hauptangabe, und eine Kennung kann nicht zwei Spielern gehören.
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
-- Frühere Steam- und Forumskonten eines Spielers.
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE "AliasType" AS ENUM ('STEAM_ID', 'FORUM_NAME');
|
||||
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "PlayerAlias" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"playerId" INTEGER NOT NULL,
|
||||
"type" "AliasType" NOT NULL,
|
||||
"value" TEXT NOT NULL,
|
||||
"note" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "PlayerAlias_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "PlayerAlias_type_value_key" ON "PlayerAlias"("type", "value");
|
||||
CREATE INDEX IF NOT EXISTS "PlayerAlias_playerId_idx" ON "PlayerAlias"("playerId");
|
||||
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "PlayerAlias" ADD CONSTRAINT "PlayerAlias_playerId_fkey"
|
||||
FOREIGN KEY ("playerId") REFERENCES "Player"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
EXCEPTION WHEN duplicate_object THEN NULL; END $$;
|
||||
@@ -61,6 +61,11 @@ enum ForumClassification {
|
||||
IGNORE
|
||||
}
|
||||
|
||||
enum AliasType {
|
||||
STEAM_ID
|
||||
FORUM_NAME
|
||||
}
|
||||
|
||||
enum ImportStatus {
|
||||
PENDING
|
||||
COMMITTED
|
||||
@@ -121,6 +126,7 @@ model Player {
|
||||
orders ImportedOrder[]
|
||||
unmatched UnmatchedPackage[]
|
||||
forumThreads ForumThread[]
|
||||
aliases PlayerAlias[]
|
||||
|
||||
@@index([displayName])
|
||||
}
|
||||
@@ -361,3 +367,20 @@ model ForumThreadBoard {
|
||||
|
||||
@@index([threadId])
|
||||
}
|
||||
|
||||
/// Frühere Steam- oder Forumskonten eines Spielers. Wer den Account wechselt,
|
||||
/// soll seine Ansprüche behalten - Abgleich und Import prüfen deshalb neben
|
||||
/// den Hauptangaben auch diese Einträge.
|
||||
model PlayerAlias {
|
||||
id Int @id @default(autoincrement())
|
||||
playerId Int
|
||||
player Player @relation(fields: [playerId], references: [id], onDelete: Cascade)
|
||||
type AliasType
|
||||
value String
|
||||
note String?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
/// Dieselbe Kennung darf nicht zwei Spielern gehören.
|
||||
@@unique([type, value])
|
||||
@@index([playerId])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user