Skip to content

Web API: отсутствуют маршруты customer/add и customer/changeAddress (CustomerAPI → 404) #241

@Ibochkarev

Description

@Ibochkarev

Источник

Обсуждение: комментарий на modx.pro

Проблема

Фронтенд (публичный Web API) вызывает endpoints, которые не зарегистрированы в core/components/minishop3/config/routes/web.php:

  1. CustomerAPI.add()POST /api/v1/customer/add

    • Используется в CustomerUI.handleAdd() при изменении полей формы профиля (initInputhandleAdd).
    • Документация в JSDoc класса CustomerAPI также ссылается на этот путь.
  2. CustomerAPI.changeAddress()POST /api/v1/customer/changeAddress

    • Используется в CustomerUI.handleChangeAddress().

В web.php для группы /customer есть login, register, profile (PUT), CRUD адресов и др., но нет /add и нет /changeAddress.

Воспроизведение

Например (как в комментарии к новости):

await ms3.customerUI.handleAdd("email", "user@example.com")

или любое автосохранение поля формы клиента, которое идёт через CustomerUI.initInputcustomer.add().

Ожидается успешный ответ API; фактически запрос уходит на несуществующий маршрут (404 / ошибка маршрутизации).

Причина

Расхождение контракта: методы и комментарии в assets/components/minishop3/js/web/core/CustomerAPI.js описывают маршруты, которые на бэкенде не добавлены. Либо маршруты не были реализованы, либо клиент должен вызывать другие существующие endpoints.

Замечания по возможному решению (на обсуждение)

  • Регистрация пользователя — уже есть POST /api/v1/customer/register (CustomerAPI.register / AuthUI.handleRegister); сценарий «только email» через handleAdd семантически ближе не к register, а к частичному обновлению профиля (если клиент уже в сессии).
  • Обновление профиляPUT /api/v1/customer/profile (CustomerProfileController::update) сейчас валидирует все поля (first_name, last_name, email, phone) разом, поэтому напрямую заменить add(key, value) на одиночный PUT без доработки бэкенда нельзя.
  • Варианты фикса:
    1. Добавить в web.php обработчики POST /customer/add и при необходимости POST /customer/changeAddress с логикой частичного обновления / делегированием в существующие сервисы.
    2. Либо изменить CustomerAPI / CustomerUI: для пошагового сохранения полей использовать согласованный с бэкендом контракт (например, PATCH/profile с частичной валидацией или иной уже существующий процессор), и обновить JSDoc/документацию.

Дополнительно: для заказа похожий паттерн order.add реализован (POST /api/v1/order/add); для выбора сохранённого адреса в заказе используется POST /api/v1/order/address/set, а не customer changeAddress.

Файлы

  • Клиент: assets/components/minishop3/js/web/core/CustomerAPI.js (методы add, changeAddress)
  • UI: assets/components/minishop3/js/web/ui/CustomerUI.js (handleAdd, handleChangeAddress)
  • Маршруты: core/components/minishop3/config/routes/web.php (группа /customer)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions