Size: a a a

TypeORM - Русскоязычное сообщество

2019 July 22

КБ

Константин Брызгалин in TypeORM - Русскоязычное сообщество
в данном случае емейл уже занят и правильным было бы сначала проверить это, перед тем как делать инсерт… тогда орм-ке не нужно будет выбрасывать ошибку, ты её заранее обработаешь и вернёшь клиенту…
источник

VS

Vladyslav Siroshtan in TypeORM - Русскоязычное сообщество
@constb
У меня в текущем запросе может быть не одна ошибка, я хотел все ошибки из бд собрать в одном месте для форматирования и отправки на клиент.
Допустим у меня в том же запросе есть еще и такая ошибка:
insert or update on table "user" violates foreign key constraint "FK_974590e8d8d4ceb64e30c38e051"

При этом мне нужно сделать запрос на проверку нету ли такого email и проверку если ли id для связи в другой таблице.

По этому поводу есть несколько вопросов:
1. В итоге перед инсертом сделать 2 запроса в бд(ради валидации) - это нормальная практика ?
2. Доводить orm до выбрасывания exception - плохая практика ?
источник

КБ

Константин Брызгалин in TypeORM - Русскоязычное сообщество
1) нормальная
2) тоже нормально – но сложнее обрабатывать чем первый вариант…
источник

КБ

Константин Брызгалин in TypeORM - Русскоязычное сообщество
обычно такие проверки делаются как часть валидации входящих данных
источник

VS

Vladyslav Siroshtan in TypeORM - Русскоязычное сообщество
@constb спасибо, пошел ковыряться)
источник

И

Игорь «InoY» Звягинцев in TypeORM - Русскоязычное сообщество
А чо-чо upsert сюда не завезли?
источник

С

Сын маминой подруги in TypeORM - Русскоязычное сообщество
мб из за того что очень субд зависимая хрень
источник

КБ

Константин Брызгалин in TypeORM - Русскоязычное сообщество
если речь о регистрации пользователя – апсерт тут как бы совсем не в тему 🙂 функционал «угона аккаунта» штатно реализовывать в системе – несколько непрактично будет 🙂
источник

LK

L K in TypeORM - Русскоязычное сообщество
Vladyslav Siroshtan
@constb
У меня в текущем запросе может быть не одна ошибка, я хотел все ошибки из бд собрать в одном месте для форматирования и отправки на клиент.
Допустим у меня в том же запросе есть еще и такая ошибка:
insert or update on table "user" violates foreign key constraint "FK_974590e8d8d4ceb64e30c38e051"

При этом мне нужно сделать запрос на проверку нету ли такого email и проверку если ли id для связи в другой таблице.

По этому поводу есть несколько вопросов:
1. В итоге перед инсертом сделать 2 запроса в бд(ради валидации) - это нормальная практика ?
2. Доводить orm до выбрасывания exception - плохая практика ?
ну тут надо смотреть за и против
везде есть компромиссы
обычно надо делать до базы валидацию что бы туда попадали только валидные данные

а бывает и пофиг на данные если не будут записаны
источник

И

Игорь «InoY» Звягинцев in TypeORM - Русскоязычное сообщество
Константин Брызгалин
если речь о регистрации пользователя – апсерт тут как бы совсем не в тему 🙂 функционал «угона аккаунта» штатно реализовывать в системе – несколько непрактично будет 🙂
Я не заметил, что речь про регистрацию
источник

VS

Vladyslav Siroshtan in TypeORM - Русскоязычное сообщество
@jashka_jashka
Ну я для себя выбрал с помощью class-validator насобирать кастомных правил для валидации.
т.к. хочу организовать обработку ошибок для graphql как в статье у Паши. (https://github.com/nodkz/conf-talks/tree/master/articles/graphql/errors) - очень уж красиво.

И не все ошибки могу красиво отдать из-за отсутствия некоторых данных в ошибках возвращенных базой(хз, ORM не всё отдает или не неё проблема).
источник

LK

L K in TypeORM - Русскоязычное сообщество
Vladyslav Siroshtan
@jashka_jashka
Ну я для себя выбрал с помощью class-validator насобирать кастомных правил для валидации.
т.к. хочу организовать обработку ошибок для graphql как в статье у Паши. (https://github.com/nodkz/conf-talks/tree/master/articles/graphql/errors) - очень уж красиво.

И не все ошибки могу красиво отдать из-за отсутствия некоторых данных в ошибках возвращенных базой(хз, ORM не всё отдает или не неё проблема).
есть валидация входных запросов, есть инварианты, есть бизнес правила
я типа не юзаю декораторы для валидации, @hapi/joi хватает с головой, схема отдельно лежит
источник

VS

Vladyslav Siroshtan in TypeORM - Русскоязычное сообщество
L K
есть валидация входных запросов, есть инварианты, есть бизнес правила
я типа не юзаю декораторы для валидации, @hapi/joi хватает с головой, схема отдельно лежит
у меня type-graphql и nestjs там красиво с class-validator 🙂
источник

LK

L K in TypeORM - Русскоязычное сообщество
Vladyslav Siroshtan
у меня type-graphql и nestjs там красиво с class-validator 🙂
я отказался от type-graphql в пользу схемы
потому что как ты добавишь кастомные директивы и навесишь на них обработчик ?
источник

КБ

Константин Брызгалин in TypeORM - Русскоязычное сообщество
class-validator накидыватся на input-типы и валидирует входные данные без особых проблем. мне в class-validator показались ограниченными стандартный набор валидаторов и возможности их комбинирования тоже как-то не очень… при этом кастомные писать не сказать чтобы удобно… но жить можно…
источник

КБ

Константин Брызгалин in TypeORM - Русскоязычное сообщество
если на вход залетают обычные объекты или их нужно отдельно конвертировать в валидируемые классы – class-transformer плюс class-transformer-validator решают эту задачу…
источник

LK

L K in TypeORM - Русскоязычное сообщество
ну с class-validator ты не сделаешь каких-то сложных валидаций, по группам, от чего-то зависимым полям и т.д.
источник

VS

Vladyslav Siroshtan in TypeORM - Русскоязычное сообщество
L K
я отказался от type-graphql в пользу схемы
потому что как ты добавишь кастомные директивы и навесишь на них обработчик ?
еще не успел задаться этим вопросом 🙂
источник

КБ

Константин Брызгалин in TypeORM - Русскоязычное сообщество
вообще кастомные валидаторы умеют делать условную валидацию по соседним полям. да там вроде и среди стандартных что-то такое было… другое дело что могут быть сложные условия, которые вообще применяются не к конкретным полям – но тут наверное надо помнить что class-validator не совсем уж универсальный комбайн для всего – какие-то вещи быстрее и проще сделать уже как часть логики обработчиков…
источник

КБ

Константин Брызгалин in TypeORM - Русскоязычное сообщество
вообще наверное надо быть проще. если не можешь вспомнить что и как делается с декораторами валидатора, наверное быстрее будет просто дописать пару строк в отдельный класс и не заниматься оверинжинирингом… а ещё в пакете class-validator полезно заглядывать в файлик validation/validator.ts – некоторые валидаторы имеют интересные побочные эффекты или способы реализации или ограничения, которые могут оказаться сюрпризом 🙂
источник