- 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
43 lines
2.5 KiB
Markdown
43 lines
2.5 KiB
Markdown
# 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** привязка снимается, и объекты аватара освобождаются сборкой мусора
|