Jede Liste gehoert einem Spieler, CC-Guthaben wird umgewandelt

Ein Gruppen-CC wird fuer jeden Nutzer einzeln gerechnet: fuer den einen
kann er der gekaufte Platz sein, fuer den anderen ein Redesign seines
vorherigen CCs. Dafuer haengt die Liste jetzt an der Mitgliedschaft
statt am CC, und verschieben ordnet nur die eigene Liste.

Ein Redesign wird nie aus dem CC-Topf bezahlt. Wer sein CC-Guthaben
dafuer einsetzt, wandelt es um: ein Platz weniger, ein bezahltes
Redesign mehr. Damit entfaellt die Ausnahme, die sich bisher durch
Slot-Pruefung und Kettenrechnung zog.

Beim Start werden Buchungen einmalig an die Listen angeglichen.
This commit is contained in:
2026-09-22 12:21:53 +02:00
parent 9b024d343d
commit 1f4034b397
17 changed files with 1172 additions and 340 deletions
+13 -5
View File
@@ -30,6 +30,9 @@ enum CreditSource {
CC_GRANT
KULANZ
ADJUSTMENT
/// Ein CC-Guthaben, das in ein Redesign-Guthaben umgewandelt wurde.
/// Immer ein Paar: eine Zeile ab im CC-Topf, eine Zeile zu im Redesign-Topf.
CONVERSION
CONSUME
REVERSAL
}
@@ -227,11 +230,6 @@ model CreditLedger {
/// hier eingetippt hat.
occurredAt DateTime @default(now())
/// Von Hand so entschieden. Das Ausrichten der Buchungen an den Ketten
/// lässt solche Zeilen in Ruhe - sonst würde jede Ausnahme beim nächsten
/// Umsortieren wieder eingeebnet.
fundingPinned Boolean @default(false)
@@index([playerId])
@@index([playerId, kind])
@@index([groupId])
@@ -473,6 +471,15 @@ model CharacterMember {
paidWith CreditKind?
note String?
/// Die Liste dieses Spielers, in der der CC für ihn steht, und seine
/// Stelle darin.
///
/// Ein Gruppen-CC wird für jeden Nutzer einzeln gerechnet: Für den einen
/// kann er der gekaufte Platz sein, für den anderen ein Redesign seines
/// vorherigen CCs. Deshalb hängt die Kette am Nutzer, nicht am CC.
lineageId String @default(uuid())
chainPosition Int @default(0)
/// Der eigene CC, den der Spieler für diesen Platz aufgegeben hat. Nur
/// gesetzt, wenn der Beitritt über ein Redesign lief - dann gilt dieselbe
/// Regel wie sonst: ein Redesign ersetzt einen CC, es kommt keiner dazu.
@@ -491,6 +498,7 @@ model CharacterMember {
@@unique([characterId, playerId])
@@index([playerId])
@@index([characterId])
@@index([lineageId])
}
/// Wann ein wiederkehrender Lauf zuletzt lief. Der Zeitplan steht im Code,