Typeorm PrimaryGeneratedColumn не доступен только для чтения - PullRequest
0 голосов
/ 22 апреля 2020

Проблема:

Украшенный идентификатор объекта @PrimaryGeneratedColumn() перезаписывается по запросу put.

Ожидаемое поведение:

Идентификатор, украшенный @PrimaryGeneratedColumn(), не должен обновляться.

Шаги для воспроизведения:

  1. Создать запись с этим запросом на публикацию:
curl --location --request POST 'https://q6zre.sse.codesandbox.io/tests' \
--header 'Content-Type: application/json' \
--data-raw '{"name": "acme"}'
Скопируйте id из ответа, добавьте его в URL-адрес запроса на добавление и добавьте случайное число wishedId в теле:
curl --location --request PUT 'https://q6zre.sse.codesandbox.io/tests/{id}' \
--header 'Content-Type: application/json' \
--data-raw '{"id": "{wishedId}"}'

Запись обновляется с помощью wishedId.

Рабочий пример: https://codesandbox.io/s/github/desirelabs/nest-typeorm

Есть ли способ предотвратить это? Спасибо

1 Ответ

0 голосов
/ 27 апреля 2020

Я бы сказал, что это не проблема TypeORM, а проблема архитектуры. Вам следует рассмотреть возможность добавления Антикоррупционного слоя или DDD: Антикоррупционный слой , et c. к вашей архитектуре. Этот паттерн взят из Domain Driven Design, и основная идея заключается в том, что ваш уровень REST не должен напрямую зависеть от уровня базы данных, и между ними должно происходить отображение, чтобы помочь обеспечить соблюдение бизнес-требований. Вы используете TypeORM для этого сопоставления, и я предлагаю вам написать собственное сопоставление для защиты целостности данных от внешнего мира.

...