feat: LT Wahl controls (open/close, Force-Zuteilung, CSV) + file upload
Backend: - PATCH /api/wahl/:wahlId (isOpen) to open/close a Wahl. - GET /api/wahl/:wahlId/teilnehmer (LT): participants with their priorities and any existing Force-Zuteilung. - Verified against local Postgres: PATCH toggles isOpen, teilnehmer list returns, CSV export works. (A stale dev server on :3000 masked this at first — real routes are fine.) Client (client/app/): - Wahl detail: open/close switch, participant list with a "Zuteilen" (Force-Zuteilung) action, CSV export via a browser download (browser.downloadText). - files_admin_screen.dart: LT file upload — browser.pickFile() + visibility picker -> multipart POST /api/files/:kcId; list existing files. Reachable from KcDetailScreen. - browser_web.dart gains pickFile()/downloadText() (native <input file> + Blob), with throwing stubs for the VM. - Dropped the file_picker package again (heavy transitive deps, and the native web input is enough); disk on this box is nearly full. flutter analyze/test/build web green; backend npm test 56. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,3 +7,8 @@ void removeSession(String key) => throw UnsupportedError(_msg);
|
||||
Never redirect(String url) => throw UnsupportedError(_msg);
|
||||
Map<String, String> currentQueryParameters() => const {};
|
||||
void clearQuery() {}
|
||||
|
||||
Future<({String name, List<int> bytes})?> pickFile() async =>
|
||||
throw UnsupportedError(_msg);
|
||||
void downloadText(String filename, String content, {String mime = 'text/plain'}) =>
|
||||
throw UnsupportedError(_msg);
|
||||
|
||||
Reference in New Issue
Block a user