API Product Property Values - rubyhat/fastyshop-backend GitHub Wiki
🎯 Значения свойств товара (ProductPropertyValues API)
Контроллер: Api::V1::ProductPropertyValuesController
Версия: v1
Слой: Аутентифицированный API
Все действия доступны только продавцу, владеющему магазином и соответствующим ProductProperty.
📘 Общая логика
Значения свойств — это конкретные варианты характеристики товара, которые создаются вручную продавцом и затем прикрепляются к товарам.
Например:
- Свойство: Цвет
- Значения: Красный, Синий, Зелёный
- Свойство: Объём
- Значения: 250 мл, 500 мл, 1 л
Значения принадлежат ProductProperty и через них могут использоваться многократно разными товарами.
📄 Методы
🆕 POST /api/v1/product_property_values
Создание значения свойства
🔹 Входные параметры
| Поле | Тип | Обязательный | Пример |
|---|---|---|---|
| value | string | ✅ | Красный |
| product_property_id | UUID | ✅ | uuid-свойства |
✅ Ответ (201 Created)
{
"id": "1a2b...",
"value": "Красный",
"product_property_id": "property-uuid"
}
✅ Чек-лист
| Пункт | Значение |
|---|---|
| 🔒 Требуется access token | ✅ Да |
| 🔐 Политики доступа | Только владелец свойства |
| 🔗 Зависимости | ProductProperty должен принадлежать магазину продавца |
📋 Валидации
value: обязательный, уникальный в рамках одного свойстваvalue: длина ≤ 100 символов
💼 Бизнес-логика
- Значение создаётся только в контексте
ProductProperty - Может быть прикреплено к множеству товаров
- Используется в отображении характеристик товара
📚 Кейсы использования
🎨 Кейс 1: Продавец добавляет "Красный" в список цветов
Продавец открывает раздел характеристик и добавляет новое значение для свойства "Цвет".
➕ Кейс 2: Подготовка к массовой загрузке
Сначала создаются все нужные значения, а потом товары массово прикрепляются к ним.
📂 GET /api/v1/product_property_values
Получение всех значений для одного свойства
🔹 Параметры запроса
| Параметр | Тип | Обязательный | Пример |
|---|---|---|---|
| product_property_id | UUID | ✅ | uuid-свойства |
✅ Ответ
[
{
"id": "val-1",
"value": "Красный"
},
{
"id": "val-2",
"value": "Синий"
}
]
📚 Кейсы использования
🧾 Кейс 1: Отображение выпадающего списка в форме
Фронтенд показывает значения для выбора при добавлении товара.
✏️ PATCH /api/v1/product_property_values/:id
Редактирование значения
🔹 Поддерживаемые поля:
- value
✅ Ответ
{
"id": "val-1",
"value": "Бордовый"
}
📚 Кейсы использования
🖊 Кейс 1: Исправление описки
Продавец случайно ввёл "Серыйй" вместо "Серый" и правит значение.
🗑 DELETE /api/v1/product_property_values/:id
Удаление значения (если не используется товарами)
✅ Ответ
{
"message": "Значение удалено"
}
💼 Бизнес-логика
- Удаление возможно только если значение не прикреплено к товарам
- В будущем возможен soft-delete
📚 Кейсы использования
🧹 Кейс 1: Удаление устаревшего значения
Продавец больше не использует "Фиолетовый" и удаляет его.
⚠️ Кейс 2: Ошибка при наличии связи с товаром
Если хотя бы один товар использует это значение — сервер вернёт ошибку 422.
🧩 Связанные сущности
| Сущность | Назначение |
|---|---|
ProductPropertyValue |
Конкретное значение свойства |
ProductProperty |
Родительское свойство |
Product |
Использует значения через product_property_value_ids |
📄 TODO / Идеи
- Поддержка сортировки значений
- Возможность указывать цвет/иконку (для визуализации)
- Soft-delete и скрытие без удаления