chore: добавить каркас image-platform
- добавлен базовый pnpm workspace для будущих приложений - добавлена dev-инфраструктура PostgreSQL и MinIO - добавлены env-пример и базовые правила репозитория - зафиксированы архитектура, data model и API-контракт - описан контракт с внешним imgproxy
This commit is contained in:
102
docs/data-model.md
Normal file
102
docs/data-model.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# Черновик Data Model
|
||||
|
||||
Это черновик для будущих миграций PostgreSQL. Реальные таблицы добавим вместе с API.
|
||||
|
||||
## allowed_image_hosts
|
||||
|
||||
```text
|
||||
id
|
||||
hostname
|
||||
enabled
|
||||
description nullable
|
||||
created_at
|
||||
updated_at
|
||||
```
|
||||
|
||||
Правила normalization:
|
||||
|
||||
- lowercase;
|
||||
- без protocol;
|
||||
- без path;
|
||||
- без trailing slash;
|
||||
- без wildcard на первом этапе;
|
||||
- source URL должен быть `http` или `https`;
|
||||
- запрещены localhost, private IP, loopback, link-local.
|
||||
|
||||
## image_assets
|
||||
|
||||
```text
|
||||
id
|
||||
source_url
|
||||
source_host
|
||||
source_hash
|
||||
original_s3_key nullable
|
||||
status
|
||||
width nullable
|
||||
height nullable
|
||||
content_type nullable
|
||||
size_bytes nullable
|
||||
created_at
|
||||
updated_at
|
||||
```
|
||||
|
||||
## image_variants
|
||||
|
||||
```text
|
||||
id
|
||||
asset_id
|
||||
preset
|
||||
variant_hash
|
||||
format
|
||||
width
|
||||
height nullable
|
||||
quality
|
||||
s3_key
|
||||
status: pending | processing | ready | failed
|
||||
size_bytes nullable
|
||||
error nullable
|
||||
created_at
|
||||
updated_at
|
||||
last_accessed_at nullable
|
||||
```
|
||||
|
||||
## Unique constraints
|
||||
|
||||
```text
|
||||
allowed_image_hosts(hostname)
|
||||
image_assets(source_hash)
|
||||
image_variants(asset_id, variant_hash, format)
|
||||
```
|
||||
|
||||
## S3 layout
|
||||
|
||||
```text
|
||||
originals/{assetId}/source
|
||||
variants/{assetId}/{variantHash}.{format}
|
||||
```
|
||||
|
||||
## Presets
|
||||
|
||||
Клиент не должен передавать произвольные трансформации. Сначала нужны ограниченные presets.
|
||||
|
||||
Пример:
|
||||
|
||||
```text
|
||||
avatar:
|
||||
widths: 128, 256, 512
|
||||
formats: avif, webp, jpg
|
||||
quality: 80
|
||||
resize: fill
|
||||
|
||||
card:
|
||||
widths: 320, 640, 960
|
||||
formats: avif, webp, jpg
|
||||
quality: 80
|
||||
resize: fit
|
||||
|
||||
hero:
|
||||
widths: 1280, 1920
|
||||
formats: avif, webp, jpg
|
||||
quality: 80
|
||||
resize: fit
|
||||
```
|
||||
Reference in New Issue
Block a user