Der Katalog bleibt gemeinsam - ein Set existiert einmal, unabhaengig davon, wer es hat. Besitz und Wunschlisten gehoeren dagegen je einem Sammler. Damit beantwortet "hat er das schon?" jetzt die Frage "hat *er* das schon?": ein Set, das nur die Schwester besitzt, faellt fuer den Bruder wieder unter "fehlt noch" und darf auf seine Wunschliste. Wichtig fuer den Alltag: Solange es nur einen Sammler gibt, taucht die Unterscheidung nirgends in der Oberflaeche auf. Kein Umschalter, keine Abfrage beim Hinzufuegen, keine Badges - die App bleibt exakt so einfach wie vorher. Erst der zweite Sammler schaltet all das frei. Die Besitzlogik liegt weiterhin an genau einer Stelle (src/lib/ownership.ts) und hat nur eine Dimension dazubekommen. Das automatische "erfuellt" auf Wunschlisten fragt jetzt ebenfalls je Liste: ein Wunsch auf Max' Liste ist erfuellt, wenn Max das Set bekommt - nicht wenn Mia es hat. Listen ohne Sammler verhalten sich wie bisher. Die Migration legt einen Sammler "Sammlung" an und ordnet ihm alles Vorhandene zu; umbenennen laesst er sich unter Verwaltung -> Sammler. Der Seed uebernimmt ihn statt einen dritten anzulegen. Refs Phase 3 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import type { Metadata } from 'next';
|
||
import { CollectorList, type CollectorRowItem } from '@/components/verwaltung/collector-list';
|
||
import { formatDate, pluralize } from '@/lib/format';
|
||
import { COLLECTOR_COLOR_LABELS } from '@/lib/collector-colors';
|
||
import { listCollectors } from '@/lib/queries/collectors';
|
||
import { requireUser } from '@/lib/session';
|
||
|
||
export const metadata: Metadata = { title: 'Sammler' };
|
||
|
||
export default async function SammlerPage() {
|
||
await requireUser();
|
||
|
||
const collectors = listCollectors();
|
||
const rows: CollectorRowItem[] = collectors.map((row) => ({
|
||
id: row.id,
|
||
title: row.name,
|
||
subtitle: [
|
||
pluralize(row.itemCount, 'Set', 'Sets'),
|
||
COLLECTOR_COLOR_LABELS[row.color],
|
||
row.birthday ? `geboren am ${formatDate(row.birthday)}` : null,
|
||
]
|
||
.filter(Boolean)
|
||
.join(' · '),
|
||
color: row.color,
|
||
birthday: row.birthday,
|
||
notes: row.notes,
|
||
itemCount: row.itemCount,
|
||
}));
|
||
|
||
return (
|
||
<div className="space-y-4">
|
||
<p className="rounded-lg border border-dashed border-border p-4 text-sm text-muted-foreground">
|
||
Der Katalog ist gemeinsam: Ein Set existiert einmal, unabhängig davon, wer es hat.
|
||
Sammlung und Wunschlisten gehören dagegen je einem Sammler. Solange es nur einen gibt,
|
||
taucht die Unterscheidung nirgends in der App auf – sie erscheint erst mit dem zweiten.
|
||
</p>
|
||
<CollectorList collectors={rows} />
|
||
</div>
|
||
);
|
||
}
|