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 и скрытие без удаления