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 / Идеи

  • Геолокация по адресу
  • Выбор адреса на карте
  • Ограничение по стране
  • Массовое удаление или экспорт