feat(export): download project photos as a grouped zip

Add POST /api/export {projectIds}: one folder per project (named after it),
photos named <lastname-firstname>.<ext>, with a generated initials SVG for
Members without a Slack photo. Dedupe image fetches, bounded concurrency, fflate
zip. Factor data.ts so routes + export share one fixtures/live gating path.
Frontend: Export-photos button downloads the zip.
This commit is contained in:
Julien Calixte
2026-06-26 16:29:05 +01:00
parent 30b96ecf64
commit 2b4d056ab8
8 changed files with 241 additions and 20 deletions

View File

@@ -11,6 +11,9 @@ importers:
'@hono/node-server':
specifier: ^2.0.6
version: 2.0.6(hono@4.12.27)
fflate:
specifier: ^0.8.3
version: 0.8.3
hono:
specifier: ^4.12.27
version: 4.12.27
@@ -33,6 +36,9 @@ packages:
'@types/node@26.0.1':
resolution: {integrity: sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==}
fflate@0.8.3:
resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==}
hono@4.12.27:
resolution: {integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==}
engines: {node: '>=16.9.0'}
@@ -55,6 +61,8 @@ snapshots:
dependencies:
undici-types: 8.3.0
fflate@0.8.3: {}
hono@4.12.27: {}
typescript@6.0.3: {}