Как мне поступить, когда друг игнорирует кого-то в приложении PHP / MySQL? - PullRequest
1 голос
/ 17 июля 2010

У меня есть таблица типа friends(friendship_id, fid1, fid2, ENUM('pending', 'accepted', 'ignored').Когда пользователь игнорирует чей-то запрос на добавление в друзья, я хочу убедиться, что он не получит сообщение «Вы были проигнорированы!», Но я также хочу, чтобы эти данные были зарегистрированы.Любые предложения о том, как подойти к этому?

Ответы [ 4 ]

4 голосов
/ 17 июля 2010

Очевидно, что первое, что вы должны сделать, это не реализовывать код, который отображал бы сообщение You've been ignored!. Это решает большую часть вашей проблемы.

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


Ответ на комментарий:

Как вы думаете, лучше вообще не отправлять сообщение "Вы уже отправили запрос этому пользователю"?

Я думаю, что этот вопрос немного выходит за рамки этого вопроса и сам по себе является длительным обсуждением, поэтому я только затрону его здесь. Ответ зависит от того, как ваше приложение реализовано. Краткий ответ: ваше приложение должно помочь вашим пользователям и быть интуитивно понятным, поэтому, если сообщение помогает им, добавьте его.

Альтернативой является то, что запросы истекают автоматически через одну неделю, если нет ответа. По истечении текущего запроса вы можете разрешить пользователю сделать новый запрос. Возможно, вы захотите рассмотреть, если игнорирование запроса означает игнорирование только этого одного запроса или всех запросов от этого пользователя.

Я не особо задумывался о том, как вы будете различать, кто кого игнорирует в моей нынешней схеме.

Запросы на дружбу - это направленные отношения. У вас есть отправитель и получатель. С другой стороны, дружба обычно (но не всегда) считается ненаправленными отношениями. Запрос дружбы обычно сопровождается сообщением «Эй, помнишь меня? Мы встретились в баре прошлой ночью!». С другой стороны, у устоявшейся дружбы обычно нет сообщений, связанных с ней. Поэтому может иметь смысл хранить эти разные типы отношений в разных таблицах в вашей базе данных.

1 голос
/ 17 июля 2010

Я реализовал это недавно в приложении, которое я пишу. У меня на самом деле было две строки в базе данных. Мои столбцы были sourceUserId и destUserId. Когда кто-то (человек A) отправляет запрос другому человеку (человек B), он автоматически вставляет строку с UserId A в качестве sourceUserId и UserId B в качестве destUserId. Если они отправляют его снова, он замечает, что строка уже существует. Чтобы B одобрил A, вставьте UserId B в качестве sourceUserId и UserId A в качестве destUserId.

В моем приложении также была таблица уведомлений, поэтому каждый раз, когда кто-то добавляет кого-то еще (то есть строка с UserId = sourceUserId A и успешно вставленным UserId = destUserId B), уведомление отправляется адресату.

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

1 голос
/ 17 июля 2010

Как вы различаете, кто кого игнорировал?Если один друг игнорирует другого, тогда я предполагаю, что ENUM будет изменено на «игнорируемое», и игнорируемый друг также станет игнорирующим другом.Вы могли бы сказать, кто вас проигнорировал, потому что вы, похоже, тоже их игнорируете.

Лучше поместить промежуточную таблицу, например ignore(ignorer, ignoree), где столбцы - просто идентификаторы друзей.Таким образом, всякий раз, когда сообщение, обновление ... что угодно, отправляется одному другу, приложение сначала проверяет, игнорирует ли друг-получатель друга-источника.

0 голосов
/ 17 июля 2010

Пример: Пользователь A отправил запрос на добавление в друзья пользователю B, пользователь B проигнорировал этот запрос: Пользователь А не знает, что его / ее запрос был проигнорирован. Для пользователя A этот статус запроса должен рассматриваться как ожидающий.

Для тех же 2 пользователей: Даже если пользователь B проигнорировал запрос пользователя A, это не обязательно означает, что пользователь B не может попытаться подружиться с пользователем A. Такое действие должно очистить предыдущее «игнорирование» запроса пользователя A (как если бы оно никогда не происходило). *

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

...