Size: a a a

2020 July 08

IK

Ihor Katkov in pro.elixir
Igor A.
провалидировать input, перобразовать в формат для сохранения. если в фениксе это ложится (как общая практика) на плечи экто, то я видимо не разобрался как это проделать для юзкейса выше
Так, у тебя должно быть две валидации. Первая, на входе в контроллер. Вторая, при создании твоей структуры.

В мире OTP принято доверять данным, которые уже внутри, поэтому нужно валидировать с особым пристрастием на входе
источник

IA

Igor A. in pro.elixir
понимаю
источник

IK

Ihor Katkov in pro.elixir
И то что структура в API и структура сущности отличается это нормально. Мы не экспозим базу наружу, мы моделируем бизнес модели
источник

IA

Igor A. in pro.elixir
меня смутило, что в различного рода примерах это происходит в changeset
источник

IA

Igor A. in pro.elixir
даже в тех же гайдлайнах на официальном сайте фрэймворка
источник

IA

Igor A. in pro.elixir
я не нашел решения “из коробки”, которое валидирует внешние данные (вложенной структуры)
источник

IA

Igor A. in pro.elixir
ну или плохо искал)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Так а в чем проблема валидировать в changeset?
источник

IA

Igor A. in pro.elixir
решил обратиться сюда, возможно я что-то упускаю или недопонимаю как принято в экосистеме
источник

AN

Alexey Novoselov in pro.elixir
Igor A.
меня смутило, что в различного рода примерах это происходит в changeset
ну вообще за консистентость данных должна отвечать БД, поэтому в идеальном мире все ограничения прописываются в констрэйнтах и чэнджсет только проверяет эти констрейнты. Особенно это актуально если в одну БД пишут разные приложения. Но входящие данные лучше всего валидировать как можно ближе ко входу, т.е. клиентский ввод лучше прямо на клиенте проверять. Остальные варианты как тебе удобнее...
источник

AN

Alexey Novoselov in pro.elixir
changeset офигенная структура специально заточенная для валидаций, так что лучше начинать с нее
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Igor A.
меня смутило, что в различного рода примерах это происходит в changeset
Так что, custom validation не гуглится?
источник

IA

Igor A. in pro.elixir
конечно же гуглится
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Если бизнес логика «положить данные в базу»
источник

IA

Igor A. in pro.elixir
их там всякие есть
источник

ŹR

Źmićer Rubinštejn in pro.elixir
То в контроллере должно быть написано «положить данные в базу»
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Поэтому чуваки придумали экто
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Если бы эти данные валидировал сторонний микросервис, который бы проверял что по указанным координатам нету секретных объектов КГБ, то эта бизнеслогика была бы в контроллере
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Anastasiya Dyachenko
в резолвере либо в модели. я бы сначала преобразовала в резолвере и потом валидировала в модели
Резолвер - это профессиональная травма графкуэльщиков? Выглядит забавно конечно ;)
источник

IK

Ihor Katkov in pro.elixir
Igor A.
их там всякие есть
Мы используем https://github.com/vic/params
источник