feat(seed): add API test-data seeding script and make testdata target

- scripts/seed.py: stdlib HTTP client, JPEG+EXIF via optional Pillow (PNG fallback), additive-only, dry-run
- Makefile: testdata target with ALBUMS/PHOTOS/SEED/TIMEOUT and boolean flags
- README: usage section; new dev-seed-data capability spec
This commit is contained in:
iu
2026-10-11 13:27:21 +03:00
parent b1b0b4a83e
commit 36e96cd519
8 changed files with 891 additions and 6 deletions
@@ -0,0 +1,40 @@
# Proposal
## Why
Наполнить приложение тестовыми данными можно только вручную: сейчас в локальной базе
один пользователь, один альбом и 15 фото, появившихся через UI. Чтобы проверять сетку,
лайтбокс, cursor-пагинацию, асинхронную генерацию трёх превью, извлечение EXIF,
share-ссылки и SSE-события, нужны повторяемые объёмы данных. Нужен dev-инструмент,
который наполняет систему через публичный API, не трогая БД и хранилище напрямую.
## What Changes
- Новый standalone-скрипт `scripts/seed.py` на Python: ввод через переменные окружения
(базовый URL, email, пароль владельца) и параметры командной строки.
- Создание заданного числа альбомов и фотографий от одной учётки-владельца через
существующие эндпоинты (`POST /api/albums`, `POST /api/albums/:id/photos`).
- Изображения генерируются на лету: при доступной Pillow — JPEG с EXIF
(`DateTimeOriginal`, опционально GPS); при отсутствии Pillow — PNG без EXIF на stdlib.
- HTTP-клиент — только стандартная библиотека (`urllib`), без обязательных pip-зависимостей.
- Опциональные сопутствующие сущности (по флагам, по умолчанию выключены): теги,
комментарии, лайки, share-ссылки, инвайты.
- Опциональное ожидание генерации вариантов (опрос `GET /api/photos/:id` до `thumb_url`).
- Режим только-добавления: скрипт ничего не удаляет и не изменяет; повторные запуски
добавляют данные, различимые по метке прогона в названии альбома. Есть `--dry-run`.
- Секреты читаются только из окружения и не принимаются аргументами и не логируются.
## Capabilities
### New Capabilities
- `dev-seed-data`: dev-инструмент наполнения приложения тестовыми данными через публичный API.
### Modified Capabilities
<!-- Нет: поведение системы для клиента не меняется, API не расширяется; добавляется отдельный dev-инструмент. -->
## Impact
- Новый файл `scripts/seed.py`; новый раздел в `README.md` с запуском и параметрами.
- Backend, frontend, API и хранилище не меняются — используются только существующие эндпоинты.
- Опциональная внешняя зависимость Pillow (для JPEG+EXIF); ядро работает на стандартной
библиотеке. Требуется запущенный инстанс с существующим пользователем-владельцем.