Подписки пользователей. Spring Boot Rest

preview_player
Показать описание
Spring Boot Rest Application: добавляем подписки пользователей в нашу социальную сеть. Нельзя называть социальную сеть социальной сетью, если в ней нет связей между пользователями. Релизовывать связи мы будем с помощью механизма hibernate (spring boot data jpa) с помощью связей many-to-many

Код из видео:

Для реализации подписок мы будем использовать связь мнокие-ко-многим (many to many), точно также, как мы делали это в нашем приложении Sweater:

Документация по vue resources:

Документация по Vue Router:

Документация по Vuex:

Видео про сериализацию данных с JsonView:

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

Поддержать проект:

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

Рекомендации по теме
Комментарии
Автор

Андрей, спасибо огромное!! Все работает. Это просто клад!!

pgxgeit
Автор

Огромное спасибо, все на высоте. Так держать

ivsergey
Автор

Поработал тестировщиком и выявил у себя несколько багов)) В целом, на работоспособность они почти не влияют, но неприятно.


1) Сокеты у меня видимо работают не совсем корректно. Новые сообщения и комментарии у второго пользователя появляются только при обновлении страницы. Правда, Сарафан у меня открыт в 2 разных браузерах (хром и огнелис).
2) Появился неприятный баг (причем появился, когда я в обоих аккаунтах вышел и зашел снова в Сарафан):
При добавлении записи в хроме вылетают ошибки:
Uncaught (in promise) Response {url: "/message", ok: false, status: 500, statusText: "", headers: Headers,  …}
Что интересно: потом страницу обновишь — сообщение появляется и ошибки пропадают.
3) Когда редактируешь запись, после нажатия кнопки Save пропадают комментарии к этой записи. Потом нажимаю обновить и комментарии снова появляются.
4) Если обновить страницу после добавления нескольких комментариев к записи, меняется сортировка (порядок отображения) комментариев. Причем загадочным образом. Комментарии начинают отображаться рандомно, без привязки к времени добавления (и не в алфавитном порядке, если кто-то так подумал). Если я добавляю еще 1 коммент и обновляю страницу — сортировка снова меняется. Чудеса)
5) Невозможно добавить большое сообщение или большой комментарий. Дебаггер выдает такую ошибку: ERROR: value too long for type character varying(255).
В хроме выходят 2 такие ошибки:
Uncaught (in promise) Response {url: "/message", ok: false, status: 500, statusText: "", headers: Headers,  …}
6) Каждый пользователь может редактировать и удалять чужие сообщения. Не знаю, может это и не баг, пишу как есть.
7) При нажатии на кнопку «SUBSCRIBE» текст кнопки по идее должен поменяться на «UNSUBSCRIBE». У меня не меняется почему-то.
8) При запуске приложения в консоли Gradle выходит ворнинг: WARN 13681 --- [ restartedMain] : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
9) Практически при каждом действии в консоли Gradle выходит ворнинг такого содержания: WARN 13681 --- [nio-9000-exec-1] : HHH000104: firstResult/maxResults specified with collection fetch; applying in memory!
10) Еще вываливается часто такой ворнинг: WARN 13681 --- [nio-9000-exec-7] : Resolved Could not write JSON: failed to lazily initialize a collection of role: vadimshokh.sarafan.domain.User.subscriptions, could not initialize proxy - no Session; nested exception is failed to lazily initialize a collection of role: vadimshokh.sarafan.domain.User.subscriptions, could not initialize proxy - no Session (through reference chain:




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

pgxgeit
Автор

Просто восторг! Отличный кодинг. Благодарю!

InverserPro
Автор

molodez, otlichie video! da eshe 2019 god, vse po novim technologiyam :)

timuris
Автор

спасибо за видео, но у меня появился вопрос, если у нас например будут боевые условия(прод) и например будет 1миллион пользователей, база данных скорее всего не выдержит таких манипуляций с ентитиграфом как для Users и Messages с Comments? Мне кажется что это bad way, хранить такую инфу в бд и доставать ее таким же образом. Что мне приходит в голову, как можно снизить нагрузку на бд:
1) Добавлять кэширование на бэке. Но вот с комментариями и подписками - х3. Нам нужно будет, после добавления кэша например на коменты и подписки, реализовать метод протухания и тут получается ситуация, когда приходится реализовать сложный многоуровневый кэш, но из-за многих действий/собыий пользователей, кэш становится не эффективный
2) Скорее всего более правильный подход вынести все комьюнити(лайки, подписки, комменты) в отдельную таблицу в базе данных, потом прикручиваем noSQL, например elasticSearch и дублировать сохранение комьюнити после записи в бд - еще и в эластик и всю выборку делать через elasticSearch.


Что думаешь по поводу этого? Мне кажется это интересный вопрос)

juggernaut
Автор

Видео полезно и познавательно, но, по-моему, отвалилось редактирование сообщений.
Если отключим наши ws и просто проверим работоспособность приложения, то изменение сообщений не работает.
Вижу два пути решения:
1) на стороне бэка: при изменении сообщения в copyProperties, добавить ignorePropertires: "creationDate", "comments", "author"
при этом - логично добавить проверку: изменился ли автор: author
2) на стороне фронта: в updateMessageMutation мы не вырезаем и вставляем полученное сообщение, а просто изменяем полученный текст msg по найденному индексу

Еще раз отмечу, что видео очень полезно и с нетерпением жду следующих =)

rkyekkw
Автор

Не могли бы вы рассказать в двух словах об этом методе гет 7:11 и поподробнее о кеше юзеров (как реализовывается на практике и как работает)? Заранее спасибо

kunnilinux
Автор

Привет! Покажи как делать авторизацию VK. Думаю многим будет полезно! Спасибо! Отличный канал!

ilindev
Автор

При таком условии
<router-link

:to="`/user/${user.id}`"
class="px-3"
>
в UserLink.vue для пользователей unknown работать не будет, так как у таких пользователей нет id, в этом месте приложение падает с ошибкой
пока в поиске как починить:)

ivankurilov
Автор

Немного не согласен, что некоторые методы контроллеров у вас содержат бизнес-логику, это вроде работа сервисов

kunnilinux
Автор

Есть подозрение, что сломалось добавление и редактирование Message. И user_subscriptions не заводится

jaydee
Автор

А почему бьет такие ошибки? Id приходит не null вроде
1) [Vue warn]: Error in render: "TypeError: Cannot read property 'id' of null"
found in
---> <UserLink> at
<VCard>
<MessageRow> at
<MessageList> at
<VMain>
<VApp>
<App> at
<Root>
и
TypeError: Cannot read property 'id' of null
2)
Если в application properties не добавить spring.profiles.active=dev то все падает

akame
Автор

У кого-то были сложности с UserLink.vue?
[Vue warn]: Error in render: "TypeError: Cannot read property 'id' of null"


found in


---> <UserLink> at
<VCard>
<MessageRow> at
<MessageList> at
<VContent>
<VApp>
<App> at
<Root>

AnnaSmirnova
Автор

Отправка через веб сокеты накрылись или это только только у меня?

grttxid
Автор

Если у кого-то не работает отписка то это связан с @equalsandhashcode. Если lombok не настроен то надо генерировать вручную equals и hashcode

karfogengroup