Spicy Media sieht die Zahlen wieder -- und eine Creator-Liste enthaelt nur Creator

Zwei Dinge, das zweite habe ich nur gefunden, weil das erste eine
Pruefung rot gemacht hat.

1) DIE SPICY-SPERRE IST AUFGEHOBEN.
Filipe: "jetzt soll jede rolle diese kachel sehen. spicy, dogfather,
manager, scout und creator ... der manager scout dogfather oder spicy
koennen eintragen."

Kachel und Tuer hatte ich schon geoeffnet -- es reichte nicht. In
workspace-leistung.js sass eine dritte Schranke, die Spicy Media mit
404 abwies (Rest des Wunsches vom 07.09.). Folge: Die Seite lud, das
Auswahlfeld blieb leer, und es sah aus wie ein Fehler. Drei Schichten
mussten zustimmen, und die dritte stand woanders als die beiden
ersten.

Nebenwirkung, ausdruecklich: Damit stehen im Dashboard wieder
Diamanten, LIVE-Tage und Verweildauer je Creator-Karte. Das war der
zweite Teil der damaligen Entscheidung und faellt mit ihr weg.

Die Pruefung in pruef-spicy wurde nicht geloescht, sondern GEDREHT --
sie schlaegt jetzt an, wenn jemand die Sperre versehentlich wieder
einbaut.

2) EINE LISTE VON CREATOR-NUMMERN ENTHIELT KEINE CREATOR.
Beim Drehen fiel auf: Spicy Media bekam "Agentur, Filipe, Luna, Max,
NeuerCreator, NeuerManager" -- DogFather nur "Luna, NeuerCreator".

Ursache: `ohneVerborgene` schreibt ein `null` ("sieht alles") zu einer
echten Liste aus, sobald es etwas zu verbergen gibt -- zur Liste ALLER
Personen, weil sie nicht wissen kann, wovon "alles" gerade handelt.
Bei DogFather greift das nie (er verbirgt nichts vor sich selbst), bei
Spicy Media schon. Der Aufrufer baut daraus ein `IN (...)` OHNE
Rollenfilter, und damit wurden Manager und Scouts zu Creators.

Repariert an der Wurzel, nicht beim Aufrufer: Es gibt zehn Aufrufer,
und neun richtig plus einen vergessen sieht man nie. Der Name der
Funktion ist das Versprechen -- es wird jetzt dort eingeloest, wo der
Name steht.

AUFGEFALLEN IST ES, WEIL EINE PRUEFUNG DIE BEIDEN LISTEN VERGLICHEN
HAT, statt bei jeder einzeln "ist nicht leer" zu sagen. Genau dieser
Unterschied steht jetzt als eigene Aussage drin.

Gemessen: pruef-backstage-import 50 -> 63 (Manager und Spicy Media
kamen dazu, inklusive der Aussage, dass Spicy Media MEHR Creator sieht
als ein Manager), pruef-spicy 60 -> 62. Dazu gruen: betreuung,
manager-sicht, verborgen, haus-trennung, sicht, aufgabenbrett,
schulung, steckbrief, uebersicht, leistung, tiktok-datei,
fremde-sicht, personen-liste, creator-anlegen, ampel, tagesblick.

NICHT von mir: pruef-agentur meldet 31 Fehler (HTTP 503). Gegen den
Stand ohne meine Aenderungen nachgemessen -- dort dieselben 31. Ein
aelterer, eigener Befund, unangetastet.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-11 14:19:43 +02:00
co-authored by Claude Opus 5
parent 8d3a79ed2a
commit 915a4ae07c
4 changed files with 138 additions and 34 deletions
+32 -1
View File
@@ -4750,7 +4750,38 @@ export function hausBedingung(person, spalte = "rolle") {
return ` AND ${spalte} IN (${liste})`;
}
export const sichtbareCreatorIds = (person) => nurHaus(ohneVerborgene(sichtbareCreatorIdsRoh(person), person), person);
/* EINE LISTE VON CREATOR-NUMMERN DARF NUR CREATOR ENTHALTEN (11.09.2026).
Klingt selbstverstaendlich, war es nicht. `ohneVerborgene` schreibt
ein `null` ("sieht alles") zu einer echten Liste aus, sobald es etwas
zu verbergen gibt -- und zwar zur Liste ALLER Personen, weil sie
nicht wissen kann, wovon "alles" gerade handelt. Fuer DogFather
greift das nie (er verbirgt nichts vor sich selbst), fuer Spicy
Media schon: Bei ihr kam die Liste mit Admins, Managern und Scouts
darin zurueck.
GEMESSEN, NICHT VERMUTET: Am 11.09.2026 bekam Spicy Media auf der
Zahlen-Seite "Agentur, Filipe, Luna, Max, NeuerCreator,
NeuerManager" zur Auswahl -- DogFather dagegen nur "Luna,
NeuerCreator". Aufgefallen ist es, weil eine Pruefung die beiden
Listen VERGLICHEN hat, statt bei jeder einzeln "ist nicht leer" zu
sagen.
WARUM DIE REPARATUR HIER STEHT UND NICHT BEIM AUFRUFER: Es gibt
zehn Aufrufer. Jeder von ihnen baut daraus ein `IN (...)`, und jeder
haette die Rolle selbst danebenschreiben muessen -- neun Stellen
richtig und eine vergessen sieht man nie. Der Name der Funktion ist
das Versprechen; es gehoert dorthin eingeloest, wo der Name steht. */
const nurCreatorIds = (ids) => {
if (ids === null || !ids.length) return ids;
try {
return db().prepare(
`SELECT id FROM personen WHERE rolle = 'creator' AND id IN (${ids.map(() => "?").join(",")})`)
.all(...ids).map((z) => z.id);
} catch { return ids; }
};
export const sichtbareCreatorIds = (person) => nurCreatorIds(nurHaus(ohneVerborgene(sichtbareCreatorIdsRoh(person), person), person));
export const sichtbarePersonenIds = (person) => nurHaus(ohneVerborgene(sichtbarePersonenIdsRoh(person), person), person);
export const betreuerIds = (person) => nurHaus(ohneVerborgene(betreuerIdsRoh(person), person), person);
export const einladbareIds = (person) => nurHaus(ohneVerborgene(einladbareIdsRoh(person), person), person);