0: За последние несколько видео мы написали довольно много однотипного кода, и речь идёт про http эксепшн, то есть про ошибки, которые мы отдаём в случае каких-то ошибок клиентских, когда у них неверный токен, когда у них неверный пароль или
1: Что-то такое и пришла пора их вынести в отдельный файл, потому что, ну, действительно, с ними уже сложно работать, особенно, когда мы давайте посмотрим в зависимости сделали вот очень много вот таких ошибок.
2: И причём они все выглядят одинаково непонятно для пользователя, какая из ошибок на самом деле, почему она возникает, как её исправить. Давайте поможем пользователям, давайте поможем себе, создадим файл эксепшенс точка пай, да, на том же уровне, что и
3: Main пай и data base пай давайте 1, что сделаем это зайдём в поиск здесь вобьём эйчтитипи эксепшн и исключим папку виэн, в которой хранятся, собственно разные библиотеки, чтобы они нас не отвлекали и увидим у нас 9.
4: Раз используется. Ну, на самом деле, 7 раз, http эксепшн, начнём с самого 1. У нас здесь, если существует пользователь, то возвращается ошибка 500. Это неверно. Здесь должен быть код 409, например, который
5: Означает, что у нас есть конфликт давайте импортируем вот все, что необходимо, нам не нужен тут только api, роутер, депендс и response, а статусы эксепшен можно использовать, и здесь мы будем выносить новые ошибки давайте назовём 1 юзер.
6: Already exists.
7: Да, потому что если пользователь существует, то вернуть ошибку, и она будет http, эксепшн, статус, код у неё будет статус. Точка http, 409. Conflict, да, то есть конфликт какой-то реально возникает, потому что у нас уже такой пользователь есть, мы не
8: Можем его зарегистрировать и какие-то дитейл можно передать. Например, пользователь уже существует, и все. И пользователь, который будет пытаться зарегистрироваться, увидит нормальную ошибку.
9: Человеческую. И здесь, конечно, давайте дописывать везде эксепшн, чтобы было понятно, что это не просто какая-то переменная, а это именно исключение и импортировать её из этого файлика. Дальше мы пытаемся залогиниться. У нас ошибка 400
10: 1 ну в целом верно, давайте даже скопируем, но что здесь не так, здесь либо неправильная почта, либо неправильный пароль давайте так и напишем incorrect.
11: Login incorrect, username, да, user name or паспорт, да и, конечно, у нас не user name, а почта, прошу прощения, и это тоже эксепшн мы вот это дело уже скопировали, статус, код есть, остал.
12: Какие-то детали написать, и мы можем написать детейл неверная почта или пароль, и все, и пользователь поймёт, что ошибка там не на стороне сервера, да 500 это сторона.
13: Сервера её, конечно, я по ошибке туда внедрил. Так делать нельзя. Если ошибка на стороне клиента, то это 400 четырехсотые коды, да, например, не авторизован. 401. Нет прав 403 или вот конфликт 400.
14: 9 или там неверные данные вы ввели 404, или там пайдентик отвечает 422 и так далее. В общем, вы как будете? Ой, тут, конечно, емейл, давайте немножко изменим, как вы будете часто с ними работать, вы запомните,
15: Постепенно. Какой код за что отвечает? Так, емейл? И здесь нужно импорт сменить. Далее у нас есть ещё ряд ошибок. Здесь мы уже с тип эксепшн справились, он, видите, даже сереньким подсвечен. И статус тоже нам не нужен, и всякие
16: Ещё другие импорты нам тоже не нужны, которые мы здесь используем. И уже, ну, как-то почище стал код уже получше стало, поприятнее. Дальше давайте разберёмся, что у нас творится в dependencies. Здесь 1, что самое простое, можно сделать, это
17: Если у нас истекли, например, истёк токен, то можно его заменить на вот что можно сделать экспайрт токен, да, например, токен, экспайрт, эксепшн и создать
18: Exception, который будет говорить, что у вас истёк токен, пожалуйста, там создайте новый, например, или что-то подобное. Дитейл токен истёк. Ну или вот просто так лаконично и простенько написать здесь.
19: Запятую ставим далее. Какие у нас ещё здесь есть проблемки? У нас, например, нет токена. Ну, нет токена. Окей. Давайте сделаем эксепшн, который будет говорить, что токена нету. Вот это дело мы импортируем сюда, где экспирация у нас находится. Вот она
20: Здесь, конечно, это импортируем. Если у нас нет токена, что же делать? Токен эпсент, например. То есть токена нету, он отсутствует. И вот здесь мы также, конечно же, дадим
21: Немножко деталей нашим пользователям, чтобы они понимали, что вообще, к чему, что, да, как токен, и так, простите, токен отсутствует.
22: Причём мы не даём каких-то комментариев, что токен с названием букинг эксесс токен, мы просто говорим, токен истёк, не надо давать прям очень много деталей пользователю, чтобы он мог ими как-то воспользоваться. Достаточно ему ответить вот так сухо у вас истёк.
23: Токен и пускай он сам там решает, какой у него токен, что у него стекло и так далее. Ну, конечно, от случая к случаю по разному бывает. Вот вопрос. Нужно ли говорить, что у вас неверный джв токен, и выдавать, что мы, например, используем джв токены, ну,
24: Это, конечно, вопрос, можно просто написать неверный формат токена и я думаю, этого будет достаточно incorrect, токен, формат эксепшн.
25: Давайте опять же сделаем. Причём давайте посмотрим. Вот здесь токен отсутствует. Это 400. 1 ошибка. В целом нормально. Токен истёк тоже 401 тоже пойдёт. Тоже нормально. Неверная почта или пароль тоже она подходит под 401, что пользователь
26: Не, не находится сейчас в нашей системе, не может ничего получить никакие данные. Итак, у нас осталось совсем чуть чуть. Это, конечно, не самая может приятная деятельность.
27: Но приходится этим заниматься, чтобы впоследствии радоваться, что у вас красивый чистый код, значит, некорректный формат токена.
28: Или неверный формат токена тут уже кто на что горазд кто более красивый синоним подберёт, тому и награда.
29: За лучшее название переменной. Вообще, на самом деле, наверное, такую награду нужно бы ввести. Итак, если nat пользователя у нас осталось уже буквально 2 ошибки, я знаю, что это, наверное, самое скучное видео из всех, но тем не менее,
30: Если nat пользователя, тогда, чтобы нам такого сказать, наверное здесь уже не надо каких-то прям подробностей говорить, что такого пользователя нет, потому что этим можно воспользоваться, этим мошенник может воспользоваться и будет как-то, ну, нам не очень приятно, что он
31: Проверит всех пользователей, поймёт, что там такого нет. Такой есть. Давайте сделаем просто, просто http, эксепшн с 401 кодом, без каких-либо деталей. Но назовём его тоже как-нибудь, чтобы не использовать вот эту большую, большой
32: Кусок кода и nat. User id user is not present. Может быть, конечно, если нужно будет, мы переименуем это дело. То есть здесь, наверное, детали уже лучше не давать. И здесь, наверное, тоже самое.
33: А причём здесь ошибка же не то что пользователя нет, а то, что его нету в джибт токене, тоже стоит, конечно, задуматься.
34: Нужно ли здесь какую-то особенную ошибку отдавать или нет? Наверное, пожалуй, мы оставим вот так, оставим, пока так не будем мудрить, не будем много времени на это уделять, на то, чтобы подумать, как назвать грамотно переме.
35: Ну, это, конечно, в конце, когда будет делаться рефакторинг, можно на это потратить время, но при разработке обычно на такие детали времени ну просто не остаётся. И мы с гордостью эйчтипи эксепшн отсюда сносим и
36: Радуемся тому, что мы вынесли работу с исключениями в отдельный модуль, в отдельный файл ставим энтеры, и теперь мы можем эти эксепшены использовать в других кусках кода у нас ещё будет