feat(profile): add round avatar with upload and cropping
- backend: user_avatar_objects binding (PG+SQLite), GC preserves avatar blobs, avatar service (EXIF-stripping WebP 128/512), public avatar read route - web: avatar upload/crop on profile, round avatar in header/members/comments/author - android: avatar upload/crop, round avatar on profile and albums header - openspec: add-user-avatar proposal/design/specs/tasks
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# Spec Delta
|
||||
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: Сборка мусора по ссылкам
|
||||
Объект хранилища SHALL удаляться только когда на него не ссылается ни одно фото и ни один
|
||||
аватар пользователя; удаление альбома и попадание фото в корзину SHALL сохранять объекты.
|
||||
|
||||
#### Scenario: Последняя ссылка удалена
|
||||
- **WHEN** фото удаляется навсегда и больше ни одно фото не ссылается на его объекты
|
||||
- **THEN** объекты удаляются из хранилища
|
||||
|
||||
#### Scenario: Остались ссылки
|
||||
- **WHEN** на объект ссылается другое фото
|
||||
- **THEN** объект сохраняется в хранилище
|
||||
|
||||
#### Scenario: Удаление альбома
|
||||
- **WHEN** владелец удаляет альбом
|
||||
- **THEN** объекты хранилища не удаляются
|
||||
|
||||
#### Scenario: Ссылка аватара
|
||||
- **WHEN** на объект ссылается аватар пользователя
|
||||
- **THEN** объект сохраняется в хранилище, пока ссылка существует
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Аватар пользователя как объект журнала
|
||||
Аватар пользователя SHALL храниться как объект журнала, привязанный к пользователю по ролям,
|
||||
соответствующим нарезкам аватара. Замена и удаление аватара SHALL менять привязку, а объекты
|
||||
без ссылок SHALL освобождаться сборкой мусора.
|
||||
|
||||
#### Scenario: Привязка аватара
|
||||
- **WHEN** пользователь устанавливает аватар
|
||||
- **THEN** объекты нарезок привязываются к пользователю по своим ролям
|
||||
|
||||
#### Scenario: Замена аватара
|
||||
- **WHEN** пользователь заменяет аватар
|
||||
- **THEN** привязка указывает на новые объекты, а старые освобождаются сборкой мусора
|
||||
|
||||
#### Scenario: Удаление аватара
|
||||
- **WHEN** пользователь удаляет аватар
|
||||
- **THEN** привязка снимается, и объекты аватара освобождаются сборкой мусора
|
||||
Reference in New Issue
Block a user