Найти в Дзене
Computer Pro

Twitter-clone на FastAPI. Ставим лайк - убираем лайк. Подписка-отписка. Часть 7

Продолжаем развивать проект по созданию клона твиттера на FastAPI. Сегодня я расскажу о том как сделать "поставить лайк" (удалить его), "подписаться" (отписаться). Первым делом я попробую кликнуть по "сердечку" и посмотреть - что появится "под капотом"? Сердечко активирует запрос как на добавление лайка, так же и на его удаление. Значит надо создать POST-запрос с вот такой конечной точкой: /api/tweets/{tweet_id}/likes. Вот такой роут-заглушка (сразу и добавить и удалить лайк) у меня получилась: Фронт видит, ставил ли я лайк какому либо твиту или нет и в зависимости от этого выбирает добавить или удалить лайк: Ну и собственно делаем функцию добавления лайка к твиту и как оно отработалось в консоли приложения: В браузере, лайк тут же поднялся по возрастанию... Удаляем лайк аналогично: Роуты получаются такими: Итак, like-unlike - выполнено, переходим к подпискам... Долго думал - а как же мне подписаться? Если я вижу твиты только тех на кого подписан + свои (это уже не ТЗ, а мой логический
Оглавление
Просто картинка для карточки. Поселок Куликово Архангельская область Красноборский район. Июль 2024. Фото автора
Просто картинка для карточки. Поселок Куликово Архангельская область Красноборский район. Июль 2024. Фото автора

Продолжаем развивать проект по созданию клона твиттера на FastAPI. Сегодня я расскажу о том как сделать "поставить лайк" (удалить его), "подписаться" (отписаться).

Like-unlike

Первым делом я попробую кликнуть по "сердечку" и посмотреть - что появится "под капотом"? Сердечко активирует запрос как на добавление лайка, так же и на его удаление.

-2

Значит надо создать POST-запрос с вот такой конечной точкой: /api/tweets/{tweet_id}/likes. Вот такой роут-заглушка (сразу и добавить и удалить лайк) у меня получилась:

-3

Фронт видит, ставил ли я лайк какому либо твиту или нет и в зависимости от этого выбирает добавить или удалить лайк:

-4

Ну и собственно делаем функцию добавления лайка к твиту и как оно отработалось в консоли приложения:

-5

В браузере, лайк тут же поднялся по возрастанию...

-6

Удаляем лайк аналогично:

-7

Роуты получаются такими:

-8

Итак, like-unlike - выполнено, переходим к подпискам...

Подписка-отписка

Долго думал - а как же мне подписаться? Если я вижу твиты только тех на кого подписан + свои (это уже не ТЗ, а мой логический вывод)?! Ну значит, у меня есть те пользователи, на которых я подписан. Следовательно, я могу от них отписаться а затем снова подписаться:

-9
Это похоже на то как ставить и удалять лайки
Это похоже на то как ставить и удалять лайки

Ну значит идем в роут для юзеров и монтиуем там рекакцию на метод DELETE. Накидал по-быстрому вот такой код на обработку конечной точки, и он оказался даже рабочим:

-11

К нему сделал взаимодействие с БД, функцию - unsubscribe_from_user(). По идее, должна удаляться запись из таблицы followers_tbl, ведь отдельной модели для нее у меня нет...:

-12

И код получился не таким как я думал, но несмотря на подсветку синтаксиса - это работает!:

-13
-14

После чего появилась кнопка подписаться.

-15

Попробую написать функцию, обратной удалению данных. Роут:

-16

Обращение к базе данных:

-17

Всё работает, происходит как подписка, так и отписка:

-18

Итак, на сегодняшний день мой проект может:

-19

Как и написано в техническом задании к данному проекту.

Собственно остаётся один очень важный косяк моего кода в плане вывода твитов в роуте /api/tweets - если у твита нет лайков, он не попадёт в ленту. В остальном все функционирует относительно нормально. Надо еще будет сделать всевозможные проверки на наличие-отсутствие чего либо.

На том пожалуй и закончу статью.

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

Всем кто прочитал - спасибо за внимание. Не забудьте поставить то, о чем в статье написано!

-20