~105808
в гостевой книге
Короче говоря, выкладываю все на чистоту.
Есть такой гем Devise, который отвечает за всю логику юзеров -- регистрация, логин, "запомнить меня", и все прочее, и он у нас задействован. У него есть кое-какие хелперовские методы, например current_user, который возвращает объект текущего юзера, user_signed_in? который возвращает true, если текущая сессия у залогиненного юзера, а не у гостя, и так далее. Это первое.
Второе: вот у вас открыта страница геста, а кто-то другой написал и отправил пост, и он тут же появился. Если помните, у нас на прошлой версии появлялась такая желтая плашка с текстом "1 новое сообщение". Это еще сделал Витя Разуваев, и это было нормально, но некоторое время назад я придумал, что хорошо бы новые посты у нас появлялись сразу, то есть страница геста открыта и прямо тут сами вставляются новые реплики. Поэтому я сделал так, что свежесозданные модели постов уже в своих HTML-вьюхах отправляются вебсокетами в редис, ну и тут же простым джаваскриптом препендятся в самый верх геста. Особенно в дни матчей это угарно -- люди бахают друг за другом десятки постов, и лента сама обновляется пачками!
Но тут же появилась проблема: хелперовские методы Девайса не отрабатывают во вьюхах, переданных в сокеты. Дело в том, что посты по дефолту броадкастятся из моделей, но модель поста понятия не имеет ничего о текущих сессиях, Девайсах, и всем прочем. А у нас во вьюхе поста уже много логики именно завязанной на Девайс: для гостей нужно показать сердечко с количеством лайков, но чтобы гости не могли этот лайк нажать, для юзера надо показать тоже количество лайков, но чтобы сердечко было закрашенное, если он уже поставил лайк, есть кнопочка "Ответить", которая не срабатывает для гостей, но срабатывает для юзеров и учитывает юзера в ответе и прочая и прочая.
Я уж не помню, какие костыли я понапридумывал, чтобы текущая логика лайков и ответов все равно работала. Я точно помню, что я броадкастю посты на уровне контроллера, а не модели, тоже на уровне контроллера эмулирую текущего юзера, чтобы в зависимости от того, юзер или гость, у нас корректно отрабатывали лайки, и все прочее. Но вот в этой же манере сделать нормально редактирование поста, -- это значит еще больше нарастить ком из костылей и джаваскриптового говна. Это можно, но все это очень плохо и ущербно.
Настя насмотрелась на мои страдания, взяла и написала специально для ФКФВ фрейм геста на VueJs с простым роутингом, стором, несколькими компонентами (список постов, форма, пост и проч.), а ты мол сделай простую апишечку, разбей весь воркфлоу на эндпойнты, и готово. Но я начал делать и понимаю, что ну просто я ковыряю это через силу. Меня тошнит от джаваскрипта, от этих await, fetch.then.then.then, стрелочных функций, просто чтобы вы понимали, это даже хуже формы и цветов тульского Арсенала, просто абсолютная вершина в мире сблевного говна. И это типа VueJs, блестящее достижение в мире фронт-энда! Короче, не стал.
Недавно челы, которые делают Рельсы, выпустили приблуду для реактивного изменения состояния Дома, которая особенно удачно работает с любыми списками сущностей (например, как в нашем случае, постов). Приблуда называется Hotwire, я обрадовался и перед Новым годом полез ковыряться, но оказалось, что опять одно и тоже -- непонятно, как нативно, безболезненно и бесшовно заставить хелперовские методы Девайса работать в разносимых сокетами вьюхах сущностей. Плюс ко всему Хотваер не умеет на уровне контроллера броадкастить ничего вообще, только из модели. Сука, я подумал, что может быть дело в Девайсе, че я к нему привязался, и специально попробовал близкий по задачам гем Clearance, но там ровно то же самое. Потом я написал текст Девиду Ханемайер Хенссону (который делает Рельсы), что мол Девид, меня страшно распинает Горыныч с ФКФВ, спаси плиз: как сука это все сгондобить? Он пишет: а никак, но как вариант напиши отдельные вьюхи для фрагментов HTML, где есть логика для юзеров/гостей, и ее подсасывай к каждому посту джаваскриптом. Но я уж не стал говорить и спорить с Девидом, но это не решение, а мрак. Написал вот например сэр Аякс пост, и типа часть его поста прилетела из сокетов, а полоска с сердечком и ответом прилетела отдельным запросом и вклеилась в пост? Ну чето прям как-то плохо звучит.
Тем не менее, дорогой сэр Горыныч, вас можно понять, и я на вас не в обиде. На прошлом моем проекте Журфак.RU (который был запущен аж 15 лет назад!) я точно так же как сейчас работал в свободное время, старался для сообщества, и если застряну с чем-то, то спрашиваю у кого могу, что и как. Но был такой мальчик тире журналист как Олег Григоренко, который прямо на моем сайте, в который я вкладывал так много сил и времени, писал: Стас мудак, потому что он для проекта выкатывает мало новых фич и медленно чинит баги!
Потому что есть такая порода людей, как вы, сэр Горыныч, или как Олег Григоренко.
Эгоистичные, вечно недовольные и неблагодарные, жалкие крикливые нерукопожатные редиски.
Уж извините конечно.