Sergey Labuzov

Sergey Labuzov

Пікірлер

  • @ram0973
    @ram09732 күн бұрын

    Попробовал tanstack router вместо react-router, файловый вариант. Очень медленный, по 2 раза рендерит компоненты (на гитхабе есть issue). В общем кажется пока сырой) Из плюсов - дерево роутов наглядно лежит по папкам и файлам. И есть примеры для Router Query

  • @sergey_labuzov
    @sergey_labuzov2 күн бұрын

    Это хороший опыт для вас, уже можете сравнивать две реализации и выбирать наиболее подходящий вариант. Tanstack router очень похож на роутинг Next.js

  • @ram0973
    @ram09739 күн бұрын

    Попробовал сделать Crud для сущности User. Вывожу таблицу пользователей и 3 иконки (исправить, удалить, просмотреть) и действия на них. При удалении вылезает Модальное окно с подтверждением. Также сделал переключатель enabled и при нажатии - срабатывает обработчик, который выводит Chakra Alert - успешно или неуспешно отработал бэкенд. Но получился такой винегрет из тегов Чакры и обработчиков событий, как интересно всё это красиво разложить...

  • @sergey_labuzov
    @sergey_labuzov9 күн бұрын

    Добрый день. Есть ссылка на репозиторий с кодом?

  • @ram0973
    @ram09738 күн бұрын

    @@sergey_labuzov приложил ссылку, но ютуб её удалил 😂👍Я просто видимо забежал вперед.

  • @sergey_labuzov
    @sergey_labuzov8 күн бұрын

    Тогда переходите в гит ( github.com/SLabuzov/twitter-client-app/issues ) и создавайте новый тикет, в котором указывайте все что пожелаете 😁

  • @user-yf2er5vr8q
    @user-yf2er5vr8q10 күн бұрын

    спасибо большое - не планируете ли что-то новое с кафкой или ребитом например

  • @sergey_labuzov
    @sergey_labuzov10 күн бұрын

    Планов много, но времени катастрофически не хватает.

  • @ivankobyuk8385
    @ivankobyuk838510 күн бұрын

    Доброго дня ! 2:36 питання по необхідності робити файл для докер компоуз для БД. У мене на ноуті ОС - Linux/Ubuntu, БД (postgres) вже працює локально, а в терміналі вже створив відповідну БД з кредами. Я так розумію мені операції з докер компоузом не має сенсу робити. Вірно ?

  • @sergey_labuzov
    @sergey_labuzov10 күн бұрын

    Добрый день! Да, все верно, нужно лишь подключение к БД. Каким способом Вы это реализуете абсолютно не важно

  • @ivankobyuk8385
    @ivankobyuk838510 күн бұрын

    @@sergey_labuzov дякую!

  • @ram0973
    @ram097313 күн бұрын

    Котейка скучает 😂👍

  • @sergey_labuzov
    @sergey_labuzov12 күн бұрын

    Подсказывает)

  • @ram0973
    @ram097313 күн бұрын

    При рефакторинге в Идее можно делать Refactor-Move... F6

  • @sergey_labuzov
    @sergey_labuzov12 күн бұрын

    Можно, Idea вообще мощный инструмент

  • @ram0973
    @ram097314 күн бұрын

    А что вы думаете о headless cms, типа Strapi? Там можно набирать как бы таблицы из полей, насколько эта гибкая идея, интересно?

  • @sergey_labuzov
    @sergey_labuzov12 күн бұрын

    Не использовал инструменты с таким функционалом. В любом случае, если какой-то инструмент упрощает/ускоряет/приносит радость/и т.д. в работе, то почему бы и не пользоваться им. Гибкость зависит от конкретных задач 🙂 Один инструмент может быть гибким для разработчика, которому нужны простые контролы без сложных зависимостей, валидаций, уровней вложенности. А вот для другого разработчика нужны именно эти сложные сценарии, вот уже для него инструмент не будет гибким.

  • @ram0973
    @ram097314 күн бұрын

    В Чакре наверное маловато компонентов, по сравнению с Ant, Material, Mantine... Ещё есть Refine, там есть готовые экраны логинов. В любом случае большое спасибо, делаю простейший блог по вашим видео. Только на сессиях, не люблю JWT в голом виде. Идёт тяжело, фронтенд как-то сложнее бэкенда, да ещё и параллельно надо TypeScript учить. Такое ощущение, что всё учишься, и никогда не начнёшь уже что-то делать. И забывается то что учил в начале 🤣 На явараше отучился год, закончил курс, потом учился на JavaBegin, там делал пример с Keycloak/Angular. И ещё на htmlacademy, и видеокурсы нескончаемые

  • @sergey_labuzov
    @sergey_labuzov12 күн бұрын

    Учиться приходиться постоянно 🙂. Так же весьма достойный внимания ресурс www.jhipster.tech Если раньше не сталкивались, очень рекомендую.

  • @sergey_labuzov
    @sergey_labuzov12 күн бұрын

    Очень правильное решение, придумать сложную, объемную задачу и реализовать ее. В любом случае, при написании кода столкнетесь с ситуацией, когда решение заставит перелопатить множество источников. После этого знания останутся в памяти на долгие годы 🙂 Курсы хорошо, но практика показывает, что простое перенабирание кода за преподавателем очень редко становится «знаниями на долгие годы»

  • @ram0973
    @ram097312 күн бұрын

    @@sergey_labuzov я его видел, результат показался переусложненным...

  • @sergey_labuzov
    @sergey_labuzov12 күн бұрын

    Мне в свое время понравился данный ресурс: internetingishard.netlify.app

  • @ram0973
    @ram097312 күн бұрын

    @@sergey_labuzov спасибо

  • @eduardklygunov1412
    @eduardklygunov141216 күн бұрын

    спасибо большое за видео!

  • @mishaprokopovich5253
    @mishaprokopovich525317 күн бұрын

    замечательные видео, потихонечку смотрю, узнаю новые приемы и возможности

  • @qqU2vertigo
    @qqU2vertigo25 күн бұрын

    Вопрос по бэку: Если у меня запрос возвращает список элементов, в которых одно поле может иметь значение, а может отсутствовать. И когда оно отсутствует, то я в него проставляю значение null. Это подстановка происходит вот так: return this.service.findNumberById(id).orElse(null); Правильно ли я это делаю, используя orElse(null) или лучше это делать иначе?

  • @sergey_labuzov
    @sergey_labuzov25 күн бұрын

    Добрый вечер. Можете в репозитории создать тикет и прикрепить фрагмент Вашего кода? (github.com/SLabuzov/twitter/issues )

  • @qqU2vertigo
    @qqU2vertigo25 күн бұрын

    @@sergey_labuzov к сожалению не смогу, так как на основе вашего курса начал делать свой проект для работы, а удаленка закрыта для переноса всего, даже кода)

  • @sergey_labuzov
    @sergey_labuzov25 күн бұрын

    Можно сделать снимок экрана )) 1. Да, так можно обрабатывать null значения. 2. "запрос возвращает список элементов, в которых одно поле может иметь значение, а может отсутствовать" - правильно ли я понимаю, что есть список id, которые Вы перебираете запросами this.service.findNumberById(id) ?

  • @qqU2vertigo
    @qqU2vertigo24 күн бұрын

    @@sergey_labuzov что то я про скриншоты совсем не подумал, в след раз так и сделаю) 2. Да, есть таблица со статусами номеров телефонов, номера в ней не храню, они лежат в другой таблице, с которой связаны через ключи. На выходе получаю вот такой список: [{ "id": 6, "phoneNumber": "79999999990", "numberStatus": { "id": 1, "phoneNumber": { "id": 6, "number": "79999999990" }, "phoneModels": { "id": 5, "model": "Test model" }, "lastChangeTimestamp": "2024-04-27T16:22:38.421315" } }, { "id": 7, "phoneNumber": "79999999992", "numberStatus": null }]

  • @sergey_labuzov
    @sergey_labuzov24 күн бұрын

    1.Мне кажется более эффективным способом будет запрашивать данные через список id-шников. 2. Выглядит так, что phoneNumber вложен в numberStatus (циклическая зависимость)

  • @mishaprokopovich5253
    @mishaprokopovich5253Ай бұрын

    Отличный прием с как мы [ищем UserAccount по username из Authentication]-->[...Api]-->[создаем UserProfile по id из ...Api], беру на заметку

  • @user-iu6yz6ck6h
    @user-iu6yz6ck6hАй бұрын

    Спасибо за видео. Очень полезно

  • @scalar3513
    @scalar3513Ай бұрын

    @sergey_labuzov на 26:52 во время тестового прогона у меня status 401, не получается создать пользователя в чем может быть проблема, код вроде идентичный..

  • @sergey_labuzov
    @sergey_labuzovАй бұрын

    Добрый день. Чтобы мне было проще понять в чем причина, предлагаю Вам создать новый issue (github.com/SLabuzov/twitter/issues) и приложить свои конфиги с скрины.

  • @vladimirsolovyov9400
    @vladimirsolovyov940024 күн бұрын

    была такая же проблема. в SecurityConfig добавил для нового маппинга следующую строчку .requestMatchers("/api/v1/user-profiles").permitAll() автор @sergey_labuzov , подскажите, на сколько это верное решение? а то spring security не дает без пермишена на этот маппинг запросы слать :)

  • @sergey_labuzov
    @sergey_labuzov23 күн бұрын

    Добрый день. Это приватный эндпоинт, скорее всего просто не добавили креды (вкладка Authorization в Postman) по аналогии предыдущего видео.

  • @mishaprokopovich5253
    @mishaprokopovich5253Ай бұрын

    отлично по шагам рассказал как настроить приложение, что для чего необходимо без лишних замудренных настроек, спасибо

  • @scalar3513
    @scalar3513Ай бұрын

    считается ли best practise использовать @RequiredArgsConstructor вместо конструктора?

  • @sergey_labuzov
    @sergey_labuzovАй бұрын

    Скорее это будет лишь в рамках проектной команды разработчиков. Да и не как "best practice", а как "code convention"

  • @user-iu6yz6ck6h
    @user-iu6yz6ck6hАй бұрын

    Большое спасибо за видео!

  • @AndreyAndrey-nx6uj
    @AndreyAndrey-nx6uj2 ай бұрын

    Благодарю

  • @webbnba
    @webbnba2 ай бұрын

    Спасибо, но фронт пока сложновато заходит!

  • @sergey_labuzov
    @sergey_labuzov2 ай бұрын

    Добрый день! Какую часть функционала по фронту нужно пояснить?

  • @insafsagirov758
    @insafsagirov7582 ай бұрын

    Здравствуйте! что лучше использовать для поля дата_создания: @PrePersist private void init() { createTimestamp = Instant.now(); } ИЛИ @EntityListeners(AuditingEntityListener.class) (показано на видео 25:15)?

  • @sergey_labuzov
    @sergey_labuzov2 ай бұрын

    Добрый вечер! "Под капотом" вариант @EntityListeners(AuditingEntityListener.class) использует @PrePersist. Плюс добавлены некоторые проверки на валидность. Поэтому я считаю более безопасным будет использование именно @EntityListeners(AuditingEntityListener.class).

  • @ram0973
    @ram09732 ай бұрын

    Всё классно, но имхо JWT в чистом виде связан с кучей уязвимостей. CSRF отключен, это плохо (в OAuth не зря его аналог есть). И невозможно отозвать токен. Имхо лучше уж сессии с secured http-only cookie или OAuth (лучше с BFF). Но для примера норм. Поправьте плиз, если я не прав.

  • @sergey_labuzov
    @sergey_labuzov2 ай бұрын

    Все верно. Вообще с безопасностью может быть все очень сложно, настройкой только этого функционала могут и должны заниматься специалисты с соответствующими знаниями, сертификациями. В рамках этого проекта используется JWT в чистом виде. Чуть позже докрутим некоторые доп механизмы защиты. Плюс нужно понимать, что любую защиту можно сломать 😉. Нужно постепенно повышать защищенность проекта по мере развития этого проекта. Я придерживаюсь такого подхода 🙂

  • @hurricane-rus
    @hurricane-rus2 ай бұрын

    Смотрите видео внимательно! Как оказалось, в файле с миграцией --changeset и --rollback - это не просто комментарии, а управляющие команды Liquibase. Если их не добавить, Liquibase не увидит файл как миграцию.

  • @sergey_labuzov
    @sergey_labuzov2 ай бұрын

    Добрый вечер. Для кого предназначен Ваш комментарий?)

  • @hurricane-rus
    @hurricane-rus2 ай бұрын

    Для тех, кто пишет код вручную и обычно игнорирует то, что похоже на лишние комментарии - а потом удивляется, почему миграция не работает без этого "комментария")

  • @m3hdim3hdi
    @m3hdim3hdi2 ай бұрын

    Thank you so much but how can i use liquibase migrations in test container

  • @sergey_labuzov
    @sergey_labuzov2 ай бұрын

    in case you added testcontainers, liquibase will use this datasource when running tests.

  • @eduardklygunov1412
    @eduardklygunov14122 ай бұрын

    Спасибо большое за видео! Надеюсь не забросите это дело, у вас талант да и на ютубе очень мало настолько полезной прикладной информации (я в целом про весь плейлист с проектом)

  • @qqU2vertigo
    @qqU2vertigo2 ай бұрын

    Это очень круто, спасибо за видео. Но подскажи, пожалуйста, где можно посмотреть примеры элементов, которые верстаем? Есть ли у Vite подобная документация с примерами реализаций компонентов, как у Fluent UI?

  • @sergey_labuzov
    @sergey_labuzov2 ай бұрын

    Добрый день. Да, у Chakra UI есть документация с примерами: chakra-ui.com/docs/components

  • @qqU2vertigo
    @qqU2vertigo2 ай бұрын

    @@sergey_labuzov вау! то, что надо, спасибо!

  • @qqU2vertigo
    @qqU2vertigo2 ай бұрын

    @@sergey_labuzov вау! то, что надо. Спасибо!

  • @arrnel94
    @arrnel943 ай бұрын

    Столкнулся с ошибкой: Прикрутил несколько методов и указал свободный доступ по эндпоинту в SecurityConfig: Получения пользователя; Получение всех пользователей; Редактирование пользователя; Удаление пользователя; После добавления @Transactional в UserDetailsServiceImpl, корректно работали методы из DemoController. А из UserController, все кроме создания пользователя падали с ошибкой: "failed to lazily initialize a collection of role: jobHunter.security.model.User.authorities: could not initialize proxy - no Session". Пальцем в небо, решил проблему добавлением @Transactional в UserUseCaseFacade. Не знаю корректен ли данный "fix", но с @EntityGraph и FetchType.EAGER такой проблемы не было.

  • @sergey_labuzov
    @sergey_labuzov3 ай бұрын

    Все очень просто. Если необходимо замапить составную энтити, в которой связи объявлены как Lazy, тогда вешаем аннотацию @Transactional над соответствующим сервисом. Остальные способы (@EntityGraph и FetchType.EAGER) используются только в крайнем необходимости, особенно FetchType.EAGER. Данные способы формируют запрос, который сразу вытягивает все связные объекты из БД.

  • @user-yf2er5vr8q
    @user-yf2er5vr8q3 ай бұрын

    а будет еще что-то новое по спрингу?

  • @sergey_labuzov
    @sergey_labuzov3 ай бұрын

    Да, конечно. Немного подтянем фронт и дальше будем в параллельном режиме реализовывать функционал на бэке и фронте

  • @andreyko_o9014
    @andreyko_o90143 ай бұрын

    вот мы добавили поле followers в userprofile 20:33, но в миграциях мы ничего не меняли,могли бы объяснить

  • @sergey_labuzov
    @sergey_labuzov3 ай бұрын

    Добрый день. Все очень просто, в данном примере в классе UserProfile всего лишь явно прописали связь между UserProfile и Subscription (это обычный внешний ключ). Он был сформирован в миграции changelog-create-twitter-subscriptions-table.sql (constraint followed__user_profile__fk)

  • @alexandr6055
    @alexandr60553 ай бұрын

    Спасибо, отличный урок

  • @webbnba
    @webbnba3 ай бұрын

    Спасибо, очень полезно и учит работе с документацией.

  • @iuseronline
    @iuseronline3 ай бұрын

    Интересненько)

  • @webbnba
    @webbnba3 ай бұрын

    Подскажите, как правильно откатить changeset? Создать новый с командами drop, alter и т.д.

  • @sergey_labuzov
    @sergey_labuzov3 ай бұрын

    Для таких задач логичнее всего будет подключить gradle liquibase plugin. И воспользоваться командой rollbackCount.

  • @sergey_labuzov
    @sergey_labuzov3 ай бұрын

    Если данный вопрос для Вас представляет интерес, могу в следующем видео об этом немножко рассказать

  • @user-yf2er5vr8q
    @user-yf2er5vr8q4 ай бұрын

    cупер пупер видео- лучшие

  • @user-yf2er5vr8q
    @user-yf2er5vr8q4 ай бұрын

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

  • @knotty1067
    @knotty10674 ай бұрын

    Круто, жду некст видос, фронт будем писать?

  • @sergey_labuzov
    @sergey_labuzov4 ай бұрын

    И фронт обязательно напишем 🙂

  • @user-sn9rj1dn1b
    @user-sn9rj1dn1b4 ай бұрын

    Спасибо за лекцию🔥

  • @knotty1067
    @knotty10674 ай бұрын

    очень интересно и информативно, продолжай в том же духе!

  • @user-pt6vo2kp7c
    @user-pt6vo2kp7c5 ай бұрын

    Ты при супер! Может есть ссылочка на похожий проект с мавеном?

  • @sergey_labuzov
    @sergey_labuzov4 ай бұрын

    добрый вечер! похожего проекта с мавеном нет, но его не должно быть сложно адаптировать

  • @sergey_labuzov
    @sergey_labuzov4 ай бұрын

    @user-pt6vo2kp7c получилось адаптировать под мавен?

  • @qqU2vertigo
    @qqU2vertigo5 ай бұрын

    Привет, с толкнулся с проблемой: ValidationFailedException: Validation Failed: 1 changesets check sum сразу после внесения комманд с созданием нового столбца. В моем понимании проблема в том, что внес изменения в файл .sql, который уже исполнялся. Гугл подсказывает 4 вида решения проблем: 1. clearCheckSums 2. runOnChange attribute 3. runAlways attribute 4. The <validCheckSum> attribute Чтобы ты посоветовал из этого использовать?)

  • @sergey_labuzov
    @sergey_labuzov5 ай бұрын

    Привет. Каждое новое изменение должно быть оформлено новым changesets. Собственно это и будет самым правильным решением)

  • @qqU2vertigo
    @qqU2vertigo5 ай бұрын

    @@sergey_labuzov понимаю, но по неизвестной мне причине ошибка продолжала возникать, пробовал копипастом перенести команды из твоего гита, думал может что то пропустил(точку с запятой или еще что). Решить проблему не удалось, поэтому пересоздал базу) Надеюсь больше такого не случится, да и буду впредь более внимательным

  • @sergey_labuzov
    @sergey_labuzov5 ай бұрын

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

  • @respecktpro2954
    @respecktpro29545 ай бұрын

    Спасибо за ваш труд!

  • @user-qt8eu7bi5d
    @user-qt8eu7bi5d5 ай бұрын

    Огромное спасбо за видео. Оказывается, Swagger может быть не только болью. Я когда сам с ним разбирался - потратил кучу времени и сил. P.S. вопрос не по теме - почему вы не используете автоимпорт в IDE? Когда вариантов для импорта класса один - происходит автоимпорт. Если больше - тогда надо руками выбирать.

  • @sergey_labuzov
    @sergey_labuzov5 ай бұрын

    "P.S. вопрос не по теме - почему вы не используете автоимпорт в IDE?" -- Это все моя лень. Спасибо за замечание, подкрутил настройки в IDE.

  • @user-qt8eu7bi5d
    @user-qt8eu7bi5d5 ай бұрын

    Спасибо за видео. А я говорил, что jacoco на 8.5 градл не налазил со старым способом конфигурации )

  • @inspiredsamat
    @inspiredsamat5 ай бұрын

    А при регистраций юзеров от очередей (как я понял это кафка), как наш код является расширяемым? Нам же нужно будет менять метод register().

  • @sergey_labuzov
    @sergey_labuzov5 ай бұрын

    При использовании очередей нужно будет добавить лишь соответствующего слушателя Consumer, который будет получать RegisterRequest, аналогично UserAccountController. И все, "менять" ничего в register() не нужно.

  • @inspiredsamat
    @inspiredsamat5 ай бұрын

    🔥🔥🔥

  • @fishman852
    @fishman8525 ай бұрын

    Все видео отличные. Даже, пожалуй, одни из лучших среди туториалов по спрингу. Единственное, подшаманить бы с положением микрофона, т.к. если слушать в наушниках, звук печатания и вибрации стола очень громкий, на столько что отдает в голову.

  • @sergey_labuzov
    @sergey_labuzov5 ай бұрын

    Спасибо за обратную связь! По звуку буду что-то думать.

  • @inspiredsamat
    @inspiredsamat5 ай бұрын

    Коммент для продвижения

  • @user-yf2er5vr8q
    @user-yf2er5vr8q5 ай бұрын

    спасибо большое буду делать ваш проект-пробовать

  • @inspiredsamat
    @inspiredsamat5 ай бұрын

    А вы создали базу данных отдельно? У меня пишет база данных не существует

  • @sergey_labuzov
    @sergey_labuzov5 ай бұрын

    Нет, она сама создается. После инициализации кластер будет содержать базу данных с именем, которое указали для переменной POSTGRES_DB в docker-compose.yml файле.

  • @inspiredsamat
    @inspiredsamat5 ай бұрын

    @@sergey_labuzov Делаю все как вы, но почему то пишет twitter_db does not exist. Не знаете почему?

  • @sergey_labuzov
    @sergey_labuzov5 ай бұрын

    Проще всего будет в ткрминале перейти в директорию с docker-compose.yml файлом. Далее выполнить две команды: 1. docker compose down 2. docker compose up -d Если проблема не пофиксится, предлагаю создать issue на гитхабе и будем разбираться

  • @user-qt8eu7bi5d
    @user-qt8eu7bi5d5 ай бұрын

    Если можно, вопрос по пользовательскому аватару: Возможно ли реализовать функционал загрузки аватара пользователя на сервер приложения и использования внутренней ссылки(т.е. запись этой ссылки в поле image_link БД?)

  • @sergey_labuzov
    @sergey_labuzov5 ай бұрын

    Добрый день! И такая реализация имеет право на жизнь.

  • @obusis
    @obusis5 ай бұрын

    Спасибо большое!