Ketten mit der Maus ordnen, Verweise an CCs, Umzug per Tabelle
Die Spielerseite zeigt CCs nicht mehr als zwei Listen "aktiv" und "inaktiv", sondern als das, was sie sind: je Platz eine Kette, von unten nach oben gelesen. Unten der erste CC, darueber seine Redesigns. Gefunden wird selten alles auf einmal. Ein Redesign taucht Jahre spaeter auf, weil sein Antrag in einem anderen Board lag oder weil der Spieler es fuer den Beitritt zu einem fremden Gruppen-CC benutzt hat. Dann steht in der Kette schon "3 auf 5", und 4 fehlt. Deshalb laesst sich jeder Eintrag mit der Maus an seinen Platz ziehen - auch mitten in eine Kette und in jede andere Kette desselben Spielers. Das Verschieben ordnet nur ein: es bucht nichts und aendert keinen Status. Dafuer traegt jeder CC jetzt eine Position in seiner Kette. Sie laesst sich verschieben, ohne die ganze Kette neu zu haengen; der Vorgaenger-Verweis, an dem der Rest der Anwendung haengt, wird danach aus den Positionen neu abgeleitet. So koennen beide Sichten nicht auseinanderlaufen. Der Bestand bekommt seine Positionen in der Migration aus der vorhandenen Verkettung. An jedem CC haengen jetzt beliebig viele Verweise: ein Name und eine Adresse, der Name wird zum Link. Nur http und https - ein "javascript:"-Link in einer Oberflaeche, die mehrere Leute bedienen, waere ein offenes Scheunentor. Die SteamID fuehrt auf der Spielerseite zum GExtension-Profil, der Forum-Name zum Forumsprofil. Dessen Adresse kommt aus dem Abgleich: die Profile liegen nicht unter dem Forums-Pfad, sondern eine Ebene darueber, und das laesst sich nicht verlaesslich erraten - also wird uebernommen, worauf das Forum selbst verweist. Zuletzt der Umzug: unter Import gibt es fuer Administratoren den gesamten Bestand als eine Tabelle - Spieler, Guthaben, CCs samt Ketten, frueherer Konten, Mitgliedschaften und Verweise. Eingespielt wird ergaenzend: was da ist, bleibt unangetastet, zweimal dieselbe Datei aendert nichts, und krumme Zeilen werden mit Zeilennummer gemeldet statt den Lauf abzubrechen. Ein Test spielt den vollen Weg durch - exportieren, Bestand loeschen, zurueckholen.
This commit is contained in:
@@ -120,6 +120,9 @@ model Player {
|
||||
steamId String? @unique
|
||||
forumName String?
|
||||
notes String?
|
||||
/// Sein Forumsprofil. Kommt aus dem Abgleich und überlebt eine spätere
|
||||
/// Namensänderung, weil die Nummer darin steht und nicht der Name.
|
||||
forumProfileUrl String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@ -232,12 +235,17 @@ model Character {
|
||||
|
||||
/// Alle CCs einer Redesign-Kette teilen sich die lineageId.
|
||||
lineageId String @default(uuid())
|
||||
/// Platz in der Kette, aufsteigend vom ersten CC zum jüngsten Redesign.
|
||||
/// Lücken sind erlaubt und nützlich: ein später gefundenes Redesign lässt
|
||||
/// sich dazwischenschieben, ohne die übrigen anzufassen.
|
||||
chainPosition Int @default(0)
|
||||
predecessorId Int?
|
||||
predecessor Character? @relation("CharacterLineage", fields: [predecessorId], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||
successors Character[] @relation("CharacterLineage")
|
||||
|
||||
ledgerEntries CreditLedger[]
|
||||
forumThreads ForumThread[]
|
||||
links CharacterLink[]
|
||||
members CharacterMember[]
|
||||
/// Beitritte, für die dieser CC aufgegeben wurde.
|
||||
givenUpFor CharacterMember[] @relation("MemberPredecessor")
|
||||
@@ -252,6 +260,7 @@ model Character {
|
||||
@@index([playerId])
|
||||
@@index([playerId, status])
|
||||
@@index([lineageId])
|
||||
@@index([lineageId, chainPosition])
|
||||
}
|
||||
|
||||
model Import {
|
||||
@@ -354,6 +363,8 @@ model ForumThread {
|
||||
authorName String?
|
||||
/// Überlebt Namensänderungen im Forum, anders als der Anzeigename.
|
||||
authorForumId Int?
|
||||
/// Das Profil des Erstellers, wie das Forum selbst darauf verweist.
|
||||
authorProfileUrl String?
|
||||
/// Labels des Threads, kommagetrennt. Reiner Kontext für die Entscheidung.
|
||||
labels String?
|
||||
|
||||
@@ -477,3 +488,21 @@ model ScheduledRun {
|
||||
lastNote String?
|
||||
updatedAt DateTime @updatedAt
|
||||
}
|
||||
|
||||
/// Beliebige Verweise an einem CC: das Steam-Addon des Erstellers, ein
|
||||
/// Modell, ein Absprache-Dokument. Der Name wird zum Link, damit in der Liste
|
||||
/// steht, worum es geht, und nicht eine nackte Adresse.
|
||||
model CharacterLink {
|
||||
id Int @id @default(autoincrement())
|
||||
characterId Int
|
||||
character Character @relation(fields: [characterId], references: [id], onDelete: Cascade)
|
||||
|
||||
label String
|
||||
url String
|
||||
|
||||
createdById Int?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@index([characterId])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user