API User Addresses - rubyhat/fastyshop-backend GitHub Wiki
🏠 Адреса доставки пользователя (UserAddresses API)
Контроллер: Api::V1::UserAddressesController
Версия: v1
Слой: Аутентифицированный API
Все методы требуют access-токен
📘 Общая логика
- Каждый пользователь может создать до 10 адресов доставки
- Один из адресов может быть установлен как адрес по умолчанию (
is_default: true)
- Адрес используется при оформлении заказа
- Адрес принадлежит пользователю, CRUD только для владельца
📄 Методы
🆕 POST /api/v1/user_addresses
Создание нового адреса
🔹 Входные параметры
| Поле |
Тип |
Обязательный |
Пример |
| label |
string |
✅ |
Дом |
| country_code |
string |
✅ |
KZ |
| city |
string |
✅ |
Алматы |
| street |
string |
✅ |
Абая |
| house |
string |
✅ |
10 |
| apartment |
string |
❌ |
15 |
| postal_code |
string |
❌ |
050000 |
| contact_name |
string |
✅ |
Алексей |
| contact_phone |
string |
✅ |
77001112233 |
| description |
string |
❌ |
Вход со двора |
| is_default |
boolean |
❌ |
true |
✅ Ответ
{
"id": "addr-uuid",
"label": "Дом",
"city": "Алматы",
"street": "Абая",
"is_default": true
}
✅ Чек-лист
| Пункт |
Значение |
| 🔒 Требуется access token |
✅ Да |
| 🔐 Политики доступа |
Только владелец |
| 🔗 Зависимости |
У пользователя < 10 адресов |
📋 Валидации
- Поля:
label, city, street, contact_phone, contact_name, house
- Проверка, что адресов не более 10
is_default: true может быть только у одного экземпляра
📚 Кейсы использования
- Добавление первого адреса (он станет
is_default)
- Добавление адреса офиса
- Добавление больше 10 адресов — ошибка
📂 GET /api/v1/user_addresses
Получить все адреса текущего пользователя
✅ Ответ
[
{
"id": "addr-1",
"label": "Дом",
"city": "Алматы",
"is_default": true
},
{
"id": "addr-2",
"label": "Офис",
"city": "Алматы",
"is_default": false
}
]
✅ Чек-лист
| Пункт |
Значение |
| 🔒 Требуется access token |
✅ Да |
| 🔐 Политики доступа |
Только владелец |
| 🔗 Зависимости |
- |
🔍 GET /api/v1/user_addresses/:id
Получить один адрес по ID
✅ Ответ
{
"id": "addr-1",
"label": "Дом",
"city": "Алматы",
"contact_name": "Алексей",
"contact_phone": "77001112233"
}
✅ Чек-лист
| Пункт |
Значение |
| 🔒 Требуется access token |
✅ Да |
| 🔐 Политики доступа |
Только владелец |
| 🔗 Зависимости |
ID в params |
📚 Кейсы использования
- Отображение адреса для редактирования
- Ошибка 404, если адрес чужой или не существует
✏️ PATCH /api/v1/user_addresses/:id
Обновление адреса
✅ Ответ
{
"id": "addr-1",
"label": "Дом",
"city": "Астана",
"is_default": true
}
✅ Чек-лист
| Пункт |
Значение |
| 🔒 Требуется access token |
✅ Да |
| 🔐 Политики доступа |
Только владелец |
| 🔗 Зависимости |
ID адреса |
📚 Кейсы использования
- Пользователь меняет адрес или номер телефона
- Установка адреса как
is_default заменяет предыдущий основной
🗑 DELETE /api/v1/user_addresses/:id
Удаление адреса
✅ Ответ
{
"message": "Адрес успешно удален"
}
✅ Чек-лист
| Пункт |
Значение |
| 🔒 Требуется access token |
✅ Да |
| 🔐 Политики доступа |
Только владелец |
| 🔗 Зависимости |
ID адреса |
📚 Кейсы использования
- Удаление старого или неверного адреса
- Удаление единственного адреса — без ошибок
🧩 Связанные сущности
| Сущность |
Назначение |
UserAddress |
Адрес доставки |
UserAddressPolicy |
Контроль доступа |
User |
Владелец адреса |
Order |
Использует UserAddress при оформлении |
📄 TODO / Идеи
- Геолокация по адресу
- Выбор адреса на карте
- Ограничение по стране
- Массовое удаление или экспорт