170 похожих чатов

Не подскажите как мне сократить и оптимизировать данный код? Не

по душе ом не что то
https://www.toptal.com/developers/hastebin/uherozizam.kotlin

65 ответов

19 просмотров

на котлин переписать

Jack- Автор вопроса
Ruslan Ilmerainen
на котлин переписать

Не я выбирал какой язык сайт орпределить для моего кода))

Единственное, можно сделать отдельный сервис, который проверяет есть или нет похожих username/email, и который также сам создаёт объект в базе. То есть, если вы поменяете базу, то контроллеры не сломаются если API от сервиса останется такое же. И тестировать будет легче

Bruto
Единственное, можно сделать отдельный сервис, кото...

запросить за один раз все, что тебе нужно

Bruto
Единственное, можно сделать отдельный сервис, кото...

это судя по всему его сервис. просто он там юзает почему-то DTO

Jack- Автор вопроса
Jack
nestjs по умолчанию его создает

а. просто сервис не должно знать вообще о слое контроллера

Выкинуть проверки, потому что они лишены смысла: между проверкой и созданием записи кто-то другой может уже создать запись с таким имейлом или неймом

Алексей Попов
Выкинуть проверки, потому что они лишены смысла: м...

может. но это корнер кейс. так хотя бы юзер френдли ошибки отдаются

Ruslan Ilmerainen
может. но это корнер кейс. так хотя бы юзер френдл...

Вообще никакой связи между проверками и тем, что отдаётся на фронт

Алексей Попов
Вообще никакой связи между проверками и тем, что о...

ок. а как ты тогда скажешь фронту, что имейл уже используется?

Ruslan Ilmerainen
ок. а как ты тогда скажешь фронту, что имейл уже и...

Проанализирую исключение и сформирую нужный ответ

Jack- Автор вопроса
Алексей Попов
Проанализирую исключение и сформирую нужный ответ

Т.е. ты делаешь запрос к бд, она выдает тебе ошибку и только потом ты ее анализируешь?😳

Jack
Т.е. ты делаешь запрос к бд, она выдает тебе ошибк...

Ты понимаешь что между твоим запросом, в котором ты проверяешь никнейм, и добавлением записи, может прилететь другой запрос который добавит этот никнейм? И ты получишь такую ситуация - проверка показала что никнейм не занят, но запрос на создание записи отвалился И тебе по любому надо ловить вот это исключение Пока всё понятно?

нельзя проверки сделать в одном месте? типа сразу выбрать юзера и посмотреть емел и юзернейм? завернуть в транзакцию

Jack- Автор вопроса
Алексей Попов
Ты понимаешь что между твоим запросом, в котором т...

Так за уникальность поля будет отвечать констрейнт в бд. А у него проверка только для того чтобы выкинуть ошибку. Это же разные вещи. А парсить текст ошибки такое себе. Там эти тексты вообще не стандартизированы и нет гарантии что при обновлении бд это не сломается

Alexander
Так за уникальность поля будет отвечать констрейнт...

Зачем эта проверка нужна, если при добавлении записи всё равно можно словить исключение?

Alexander
Второй абзац про это

Нет, второй абзац просто какая-то жалоба на жизнь, а не ответ на вопрос

Алексей Попов
Нет, второй абзац просто какая-то жалоба на жизнь,...

Ну если у тебя друг аргументов нет, то хз как это обсуждать с тобой

Ты как поймешь, что выкинутое сообщение касается занятости юзернейма а не чего-то другого?

Ты не понимаешь вопрос, или игнорируешь неудобную для тебя часть про нарушение уникальности при записи?

Alexander
Ты как поймешь, что выкинутое сообщение касается з...

Самый тупой вариант - в ошибке будет указан нарушенный constraint

Алексей Попов
Ты не понимаешь вопрос, или игнорируешь неудобную ...

Меня смущал парсинг текста исключения. Но вот джек показал, что там стандартизированные коды могут быть и массив с полями

Jack- Автор вопроса
Alexander
Меня смущал парсинг текста исключения. Но вот джек...

Да все равно, ловить исключение с бд и потом их парсить, это бред. Лучше сделать лишний запрос, чем парсить ошибки

Jack
Да все равно, ловить исключение с бд и потом их па...

Ну парсить текст да, бред. А если там есть строгий контракт, на который можно положиться, то почему бы и нет

да нет чувак. Алексей прав. этот твой лишний запрос до одного места. правильно делать, как он написал. единственное, что меня смущает, парсинг ошибок. если он стандартизирован, то все ок вообще

Jack- Автор вопроса
Alexander
Ну парсить текст да, бред. А если там есть строгий...

прикол в том, что если бд ловит ошибку, она прерывает транзу. а id Добавляется bи получается так id: 1,2,3,4,6,8,12,45,77

Jack- Автор вопроса
Ruslan Ilmerainen
да нет чувак. Алексей прав. этот твой лишний запро...

Я также парсил ошибки, пока один senior мне звиздюлей за это не дал

userundef
С автосгенерированным нечитаемым именем

Это уже другой вопрос. Но я предпочитаю давать индексам читаемые имена

Алексей Попов
Самый тупой вариант - в ошибке будет указан наруше...

ну вот это плохо. с какого хрена там вообще речь идет о каком-то нарушенном constraint. по сути ты выплювываешь наружу детали реализации

Jack
прикол в том, что если бд ловит ошибку, она прерыв...

Ну если таблицу полностью не лочить, то ты с предварительным запросом ты тоже не защищен от увеличения id

Jack
Да все равно, ловить исключение с бд и потом их па...

Как ты обрабатываешь ситуацию успешной проверки с последующей ошибкой при записи из-за того, что между проверкой и записью пролетел другой запрос, который сощдал запись с таким юзернеймом?

Ruslan Ilmerainen
ну вот это плохо. с какого хрена там вообще речь и...

Наружу не надо отдавать это Речь о анализе ошибки бд на сервере

Jack- Автор вопроса
Alexander
Так за уникальность поля будет отвечать констрейнт...

Зато есть стандартизированный в пределах бд код ошибки

🅰️nimeCoder
Зато есть стандартизированный в пределах бд код ош...

он показывает какой колонке какой констрейнт нарушен?

Alexander
Меня смущал парсинг текста исключения. Но вот джек...

Кстати А если этого контракта нет? Предположим, прилетает строка с каким-то текстом Мой вопрос остаётся актуальным: что делать при возникновении этого исключения? То есть совершенно тупиковая ситуация: проверили, юзернейм свободен. Пытаемся писать, но юзернейм уже заняли

Алексей Попов
Кстати А если этого контракта нет? Предположим, пр...

onConflict можно заюзать. причем если таких полей несколько, то открыть транзакцию и сохранять данные по частям

Тогда зачем делать проверки перед созданием, если клиенту всё равно тупо отдают bad request? Для ui Типа "иногда мы можем отдать читаемую ошибку, а иногда - ну сорян"? Да, так и есть

Alexander
Тогда зачем делать проверки перед созданием, если ...

А тебе такой подход не кажется ужасным? Мало того что лишние запросы к бд, так и они в ряде случаев оказываются просто бессмысленны У вас такой код пройдёт ревью?

Алексей Попов
А тебе такой подход не кажется ужасным? Мало того ...

так чувак, много кто так и делает и не видет в этом ничего плохого. хуяк-хуяк и круды готовы

Алексей Попов
А тебе такой подход не кажется ужасным? Мало того ...

Ну не идеальный. Но парсить текстовую ошибку тоже такое себе. Если на это тесты написать, то уже получше

Почему бессмысленные и лишние, если есть смысл для ui? Те случаи, когда будет эксепшен из бд, редко будут происходить. ui просто попросит юзера повторить запрос и всё

а что такое круды?

это пост пут гет делит

John Doe
а что такое круды?

круды это апи для создания графических редакторов баз данных. приложений то есть, что пилят каждый день большая часть из нас :)

Ruslan Ilmerainen
круды это апи для создания графических редакторов ...

В почти любом приложении есть стейт, который надо изменять и где-то хранить. Что в этом плохого?

John Doe
Почему бессмысленные и лишние, если есть смысл для...

Сложно оценить частоту таких событий. Это всё гадание Бессмысленные проверки потому что по хорошему в данном кейсе проверять надо результат добавления в базу, а не возможность добавления

Alexander
Ну не идеальный. Но парсить текстовую ошибку тож...

А почему парсить текст ошибки плохо? Всегда ли парсинг строки это плохо? Если да, то какие методы сериализации допустимы?

Алексей Попов
А почему парсить текст ошибки плохо? Всегда ли пар...

это непросто плохо, а хуево. как минимум, интуитивно это вызывает отторжение. а объективно, апнешь версию субд, и пиши свои парсеры снова

Алексей Попов
А почему парсить текст ошибки плохо? Всегда ли пар...

Это не плохо. Есть свои минусы, как и с вариантом с несколькими запросами к бд

Ruslan Ilmerainen
это непросто плохо, а хуево. как минимум, интуитив...

От смены версии бд вряд ли изменится то, что в тексте будет код ошибки и название нарушенного constraint Есть ещё аргументы кроме этого?

Ruslan Ilmerainen
> вряд ли вот тебе самый сильный аргумент

после круда я уже не ставил на тебя, но ты вывез

Ruslan Ilmerainen
это непросто плохо, а хуево. как минимум, интуитив...

так мажорные версии не совместимы как минимум

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Всем привет! Кто пользуется DevExpress, подскажите пожалуйста, реализован ли в TcxGrid в новых версиях поиск по датам как в Экселе (ну т.е. не просто список чекбоксов со значе...
A Z
4
Карта сайта