Compare commits

...

4 Commits

Author SHA1 Message Date
Hördle Bot
7879b63498 fix: TypeScript-Fehler in batch route korrigiert
- Verwende lokale Variable curatorAssignments statt nullable assignments
- TypeScript erkennt jetzt korrekt, dass die Variable nicht null ist
2025-12-04 00:57:02 +01:00
Hördle Bot
91ebaa0e44 fix: TypeScript-Fehler in batch route behoben
- Non-Null-Assertion für assignments hinzugefügt
- assignments ist innerhalb des curator-Blocks garantiert nicht null
2025-12-04 00:52:16 +01:00
Hördle Bot
a61caa2d13 feat: README.md um Batch-Edit-Funktionalität für Kuratoren erweitert
- Beschreibung der neuen Batch-Edit-Optionen hinzugefügt, einschließlich der Möglichkeit, mehrere Titel gleichzeitig zu bearbeiten.
- Details zu Genre/Special Toggle, Artist-Änderung und Exclude Global Flag für globale Kuratoren ergänzt.
2025-12-04 00:45:08 +01:00
Hördle Bot
52a15b7504 chore: Version auf v0.1.6.1 erhöht 2025-12-04 00:43:27 +01:00
3 changed files with 12 additions and 4 deletions

View File

@@ -57,6 +57,7 @@ Eine Web-App inspiriert von Heardle, bei der Nutzer täglich einen Song anhand k
- **Global-Kuratoren:** Optionale globale Kuratoren, die für alle Rätsel zuständig sind. - **Global-Kuratoren:** Optionale globale Kuratoren, die für alle Rätsel zuständig sind.
- **Kurator-Dashboard:** Eigene Dashboard-Seite (`/curator` oder `/de/curator`, `/en/curator`) für Kuratoren. - **Kurator-Dashboard:** Eigene Dashboard-Seite (`/curator` oder `/de/curator`, `/en/curator`) für Kuratoren.
- **Song-Verwaltung:** Kuratoren können Songs hochladen, bearbeiten und Genres/Specials zuweisen. - **Song-Verwaltung:** Kuratoren können Songs hochladen, bearbeiten und Genres/Specials zuweisen.
- **Batch-Edit:** Mehrere Titel gleichzeitig bearbeiten (Genre/Special Toggle, Artist ändern, Exclude Global Flag setzen).
- **Kommentar-Verwaltung:** Kuratoren können Spieler-Kommentare zu ihren Rätseln einsehen, als gelesen markieren und archivieren. - **Kommentar-Verwaltung:** Kuratoren können Spieler-Kommentare zu ihren Rätseln einsehen, als gelesen markieren und archivieren.
- **Spieler-Kommentare:** - **Spieler-Kommentare:**
- **Feedback an Kuratoren:** Spieler können nach Abschluss eines Rätsels optional eine Nachricht an die Kuratoren senden. - **Feedback an Kuratoren:** Spieler können nach Abschluss eines Rätsels optional eine Nachricht an die Kuratoren senden.
@@ -179,6 +180,12 @@ Das Projekt ist für den Betrieb mit Docker optimiert.
- URL: `/de/curator` oder `/en/curator` - URL: `/de/curator` oder `/en/curator`
- Kurator-Accounts werden vom Admin erstellt und verwaltet. - Kurator-Accounts werden vom Admin erstellt und verwaltet.
- Kuratoren können Songs hochladen und verwalten, sowie Kommentare von Spielern einsehen. - Kuratoren können Songs hochladen und verwalten, sowie Kommentare von Spielern einsehen.
- **Batch-Edit-Funktionalität:**
- Mehrere Titel über Checkboxen auswählen
- Genre/Special Toggle (hinzufügen/entfernen)
- Artist-Änderung für alle ausgewählten Titel
- Exclude Global Flag setzen/entfernen (nur für Global-Kuratoren)
- Toolbar erscheint automatisch bei Auswahl von Titeln
6. **Special Curation & Scheduling verwenden:** 6. **Special Curation & Scheduling verwenden:**
- Erstelle ein Special im Admin-Dashboard: - Erstelle ein Special im Admin-Dashboard:

View File

@@ -81,11 +81,12 @@ export async function POST(request: Request) {
let assignments: { genreIds: Set<number>; specialIds: Set<number> } | null = null; let assignments: { genreIds: Set<number>; specialIds: Set<number> } | null = null;
if (context.role === 'curator') { if (context.role === 'curator') {
assignments = await getCuratorAssignments(context.curator.id); const curatorAssignments = await getCuratorAssignments(context.curator.id);
assignments = curatorAssignments;
// Validate genre/special toggles are within curator's assignments // Validate genre/special toggles are within curator's assignments
if (hasGenreToggle) { if (hasGenreToggle) {
const invalidGenre = genreToggleIds.some((id: number) => !assignments.genreIds.has(id)); const invalidGenre = genreToggleIds.some((id: number) => !curatorAssignments.genreIds.has(id));
if (invalidGenre) { if (invalidGenre) {
return NextResponse.json( return NextResponse.json(
{ error: 'Curators may only toggle their own genres' }, { error: 'Curators may only toggle their own genres' },
@@ -95,7 +96,7 @@ export async function POST(request: Request) {
} }
if (hasSpecialToggle) { if (hasSpecialToggle) {
const invalidSpecial = specialToggleIds.some((id: number) => !assignments.specialIds.has(id)); const invalidSpecial = specialToggleIds.some((id: number) => !curatorAssignments.specialIds.has(id));
if (invalidSpecial) { if (invalidSpecial) {
return NextResponse.json( return NextResponse.json(
{ error: 'Curators may only toggle their own specials' }, { error: 'Curators may only toggle their own specials' },

View File

@@ -1,6 +1,6 @@
{ {
"name": "hoerdle", "name": "hoerdle",
"version": "0.1.6.0", "version": "0.1.6.1",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",