ней. Про пароль говорить НЕ НУЖНО
Есть такая схема бд для мессенджера, где предусмотрены только групповые чаты. Мне теперь нужны еще и личные. Не совсем понимаю как это правильно сделать
Сейчас при открытии приложения бэкенд смотрит в таблицу GroupChatParticipant по определенному юзер айди, получая айди ГРУППОВЫХ чатов, в которых состоит пользователей (у каждой группы свой отдельный айди, не связанный с айдишниками участников). Получив информацию о всех чатах, клиент выбирает определенный чат и отправляет сообщения по АЙДИШНИКУ ГРУППОВОГО ЧАТА, то есть в таблицу Message заносится, условно, такая инфа Message(groupChat.id, user.id, "hello world"). И это, как по мне, норм, ибо потом легко фильтровать по чатам и юзерам сообщения.
Сложность в том, что я хз как определить беседу 2 людей, ведь в ней чат для каждого пользователя будет иметь свою аватарку и название
как это правильно делается?
Заранее спасибо
В чем проблема замкнуть таблицу личного чатика дважды на айди юзера?
Можно конкретнее?
SQL позволяет делать два внешних ключа, ссылающихся на одно и то же поле в другой таблице. То есть делаешь таблицу PersonalChat с id чата например и айдишниками двух юзеров, чей это персонал чат. Главное - просто на уровне сервера базы или кода проверять, чтобы ключи не были одинаковыми. Единственный подводный камень - что какая-то реализация сиквела это запрещает делать, так что проверь, вот пример из майсиквела https://stackoverflow.com/questions/40400483/2-foreign-keys-referencing-same-table
спасибо, буду разбираться
два человека это тот же груповой чат, как по мне проще добавить тип чата (груповой и личный) в GroupChat и если это чат для двоих людей просто не давать добавлять больше туда людей
Это работало б, если не нужно было юзеру1 отображать имя юзер2 и наоборот. Придется тогда в рантайме проверять отправителя, принимателя, их имена и аватарки
Я правильно понимаю, что тогда у меня будет таблица PersonalChat(id: Int, first: User.id, second: User.id)? запрос в бд за личными чатами будет выглядеть примерно таким образом: SELECT * FROM PersonalChat WHERE *inputUserId*=first OR *inputUserId*=second
спасибо большое, думал, что это костыль, а оказываетяс так и надо :D
Как раз по-другому было бы костылем имхо, особенно если миксовать эти сущености с группенчатиками
Обсуждают сегодня