Гардероб¶
Обзор¶
Гардероб — ключе��ая функциональность приложения. Пользователь добавляет вещи по фотографии, ML-модель автоматически определяет категорию, цвет и сезон. Вещи отображаются сеткой с фильтрацией по слотам, категориям, цветам, сезонам и стилям.
Страницы модуля¶
| Страница | Маршрут | Назнач��ние |
|---|---|---|
| WardrobePage | /wardrobe |
Список всех вещей с фильтр��цией |
| AddItemSourcePage | /add |
Выбор источника фото (камера / галер��я) |
| AddItemDetailsPage | /add/details |
Форма атрибутов вещи + ML-предсказания |
| WardrobeItemPage | /wardrobe/:itemId |
Детальная карточка вещи, редактирование, удаление |
Sequence diagram: добавление вещи¶
sequenceDiagram
participant U as Пользователь
participant Source as AddItemSourcePage
participant Dtls as AddItemDetailsPage
participant Media as mediaApi
participant ML as ML Pipeline
participant Items as offlineItemsService
participant DB as Backend
U->>Source: Нажимает "Камера" / "Галерея"
Source->>Source: Выбор файла через input[type=file]
Source->>Dtls: navigate to /add/details with file state
Note over Dtls, ML: Online-режим
Dtls->>Media: mediaApi.upload(file, item_photo)
Media->>ML: Сжатие + отправка на сервер
ML-->>Media: id, url, predictions
Media-->>Dtls: MediaUploadResponse
Dtls->>Dtls: applyPredictions(predictions)
Note over Dtls: Автозаполнение category, color, season, title
U->>Dtls: Проверяет/корректирует поля
U->>Dtls: Нажимает Добавить в гардероб
Dtls->>Items: offlineItemsService.create(data, file)
Items->>DB: POST /items
DB-->>Items: Item
Items-->>Dtls: Успех
Dtls->>U: navigate to /wardrobe
Sequence diagram: просмотр и фильтрация гардероба¶
sequenceDiagram
participant U as ��ользователь
participant Page as WardrobePage
participant Local as useLocalItems
participant IDB as IndexedDB/API
U->>Page: Открывает /wardrobe
Page->>Local: useLocalItems({})
Local->>IDB: Загрузка вещей (offline-first)
IDB-->>Local: { items, total }
Local-->>Page: Рендер сетки
U->>Page: Выбирает фильтр "Верх" (slot_id=1)
Page->>Page: setSlotId(1), useDebounce(400ms)
Page->>Local: useLocalItems({ slot_id: 1 })
Local->>IDB: Фильтрация
IDB-->>Page: Отфильтрованные вещи
U->>Page: Открывает BottomSheet "Фильтры"
U->>Page: Выбирает категорию + цвет + сезон
Page->>Local: useLocalItems({ category_id, color_id, season })
Local-->>Page: Результат фильтрации

ML-предсказания и маппинг атрибутов¶
ML-модель возвращает предсказания в формате англоязычных меток. Маппинг выполняется через config/attrMappings.ts:
articleTypeToCategoryName— English label → русское название категории (30 маппингов)colourToColorName— English colour → русское название цвета (18 маппингов)seasonToValue— English season → значение enum Season
Пороги уверенности:
- ML_MIN_ARTICLE_TYPE_CONF = 0.4 — минимальная уверенность для подсказки категории
- ML_MIN_BASE_COLOUR_CONF = 0.24 — минимальная уверенность для подсказки цвета
API-модули¶
// mediaApi (frontend/src/api/media.ts)
mediaApi.upload(file, kind) // POST /media (multipart/form-data, сжатие до 896x896)
mediaApi.get(id) // GET /media/:id
// itemsApi (frontend/src/api/items.ts)
itemsApi.list(params) // GET /items
itemsApi.get(id) // GET /items/:id
itemsApi.create(data) // POST /items
itemsApi.update(id, data) // PATCH /items/:id
itemsApi.delete(id) // DELETE /items/:id
Навигация¶
- → Поток добавления: add-item-flow.md
- → Детали вещи: item-details.md
- → Список гардероба: wardrobe-list.md