Skip to content

Web API: публичный Customer DTO и allowlist полей профиля - #475

Open
Ibochkarev wants to merge 2 commits into
betafrom
feat/issue-424-customer-public-dto
Open

Web API: публичный Customer DTO и allowlist полей профиля#475
Ibochkarev wants to merge 2 commits into
betafrom
feat/issue-424-customer-public-dto

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Единый публичный контракт покупателя для Web API и явный allowlist редактируемых полей вместо blacklist по fieldMeta.

  • CustomerPublicDto — allowlist ответа (PUBLIC_FIELDS + active msExtraField), core editable fields и editableFieldKeys() с dynamic extra columns
  • POST /customer/add и PUT /customer/profile принимают только allowlist; системные/GDPR поля отклоняются
  • Login, Register, VerifyEmail processor и JSON-ответ email verify отдают CustomerPublicDto::fromCustomer()
  • Smoke-тесты на DTO, allowlist и auth processors

Closes #424

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Breaking: в ответах login/register/verify вместо customer.email_verified: bool теперь email_verified_at в составе полного public DTO. Расширен payload (stats, timestamps) — без секретов.

Связанные Issues

Closes #424

Как это было протестировано?

cd core/components/minishop3
composer ci:php
# exit 0 — php -l (377 files) + 19 smoke tests
  • Ручное тестирование
  • Автоматические тесты (composer ci:php, npm run lint:ci / GitHub Actions CI)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: branch feat/issue-424-customer-public-dto
  • MODX: n/a (smoke без MODX)
  • PHP: 8.2+

Скриншоты (если применимо)

До После
n/a n/a

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность (кроме задокументированного API контракта)
  • Лексиконы добавлены на двух языках (ru/en) — не требуется
  • PHPStan проходит без новых ошибок (локально; в CI пока нет)
  • ESLint проходит без ошибок (npm run lint:ci для Vue) — Vue не затронут
  • Обновлён CHANGELOG.md (для значимых изменений) — по политике репо, при релизе

Дополнительные заметки

@Ibochkarev
Ibochkarev requested a review from biz87 July 29, 2026 03:31
@Ibochkarev Ibochkarev added enhancement New feature or request priority: medium Средний приоритет labels Jul 29, 2026
@Ibochkarev
Ibochkarev force-pushed the feat/issue-424-customer-public-dto branch from dc9c86c to 3a7afcc Compare July 29, 2026 11:31
Replace blacklist-based profile updates with an explicit allowlist and
serialize all Web customer responses through CustomerPublicDto.
Address #424 review findings:

- Extract CustomerExtraFieldRegistry from CustomerPublicDto for the
  msExtraField DB lookup; CustomerPublicDto now delegates to it
- fromCustomer() requires modX + ms3 (remove silent null mode that
  returned no extra keys)
- update() supports partial updates: validate only core rules for fields
  present in $data instead of rejecting when any core field is missing
- Replace grep-only CustomerAuthProcessorsDtoTest with a behavior test
  that exercises fromCustomer() serialization (extra-field allowlist +
  secret/system fields never leak); update ProfileQuickUpdateForbiddenTest
  to assert partial-update contract
@Ibochkarev
Ibochkarev force-pushed the feat/issue-424-customer-public-dto branch from 4f2314e to bfc1865 Compare July 29, 2026 17:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: medium Средний приоритет

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Web API: публичный Customer DTO + allowlist полей для /customer/add

1 participant