feat: добавить генерацию image variants
- добавлен shared config presets, custom transforms и allowlist hosts - реализованы Backend endpoints для assets, presets и variants - добавлена orchestration через PostgreSQL, RabbitMQ, S3 и worker - обновлён Gateway read-through flow с L1 cache и корректным Vary: Accept - добавлена миграция resize_mode для variants lookup - обновлены dev scripts, env template, lockfile и документация
This commit is contained in:
30
README.md
30
README.md
@@ -4,7 +4,7 @@ Image Platform - отдельная площадка для управления
|
||||
|
||||
## Статус
|
||||
|
||||
Сейчас создан базовый monorepo, dev-инфраструктура, NestJS backend с Swagger, чистый Vite React TS admin, Fastify gateway skeleton, Drizzle database package, shared queue/storage packages и worker skeleton.
|
||||
Сейчас создан базовый monorepo, dev-инфраструктура, NestJS backend с Swagger, чистый Vite React TS admin, Fastify gateway, Drizzle database package, shared queue/storage packages и worker. Минимальный read-through flow уже реализован для dev.
|
||||
|
||||
## Целевая схема
|
||||
|
||||
@@ -39,7 +39,7 @@ client
|
||||
- Fastify gateway
|
||||
- worker
|
||||
|
||||
Gateway уже добавлен как JS/Fastify skeleton. Сейчас `/images/*` возвращает `501`, пока не подключены DB/S3/imgproxy.
|
||||
Gateway принимает `/images/{assetId}/v{version}/{preset}?w={width}&q={quality}&f=auto`, выбирает фактический формат по `Accept`, вызывает Backend ensure endpoint и кэширует готовые bytes в L1 memory cache.
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
@@ -53,6 +53,32 @@ pnpm gateway:dev
|
||||
pnpm worker:dev
|
||||
```
|
||||
|
||||
`.env` игнорируется git. Runtime-код не содержит dev credentials fallback: для production нужно передать реальные `DATABASE_URL`, `RABBITMQ_URL`, `S3_*` и `IMGPROXY_UPSTREAM` через окружение.
|
||||
|
||||
Минимальный smoke flow:
|
||||
|
||||
```bash
|
||||
curl -sS -X POST http://localhost:3001/api/assets \
|
||||
-H 'content-type: application/json' \
|
||||
-d '{"sourceUrl":"https://storage.yandexcloud.net/shared1318/img/1.jpg","publicId":"asset_demo"}'
|
||||
|
||||
curl -i "http://localhost:8888/images/asset_demo/v1/card?w=640&q=80&f=auto"
|
||||
curl -i "http://localhost:8888/images/asset_demo/v1/avatar?f=auto"
|
||||
```
|
||||
|
||||
Сейчас доступны static presets из `packages/image-config`: `card`, `hero`, `avatar`. Произвольный single-image режим доступен через `/images/{assetId}/v{version}/custom?...`, если включён `IMAGE_ALLOW_CUSTOM_TRANSFORMS=true`.
|
||||
|
||||
Business API без админки:
|
||||
|
||||
```bash
|
||||
curl -sS http://localhost:3001/api/presets
|
||||
curl -sS http://localhost:3001/api/assets
|
||||
curl -sS http://localhost:3001/api/assets/asset_demo/variants
|
||||
curl -sS -X POST http://localhost:3001/api/assets/asset_demo/variants \
|
||||
-H 'content-type: application/json' \
|
||||
-d '{"preset":"card","mode":"family"}'
|
||||
```
|
||||
|
||||
Порты по умолчанию:
|
||||
|
||||
| Сервис | URL |
|
||||
|
||||
Reference in New Issue
Block a user