Gmail использует концепцию меток (например, теги в stackoverflow).Это означает, что входящие, отправка почты, помеченные и т. Д. Обычный объект электронной почты, просто помечены указанной меткойИтак, есть только Email
и Labels
.
. Вы можете увидеть это, используя поиск в gmail, например label:inbox
или label:Starred
.
. Я хотел бы предложить довольнопростой дизайн, подобный следующему:
Email
{
_id
Title,
Body,
Status {read, unread},
Labels { name, type(system, custom) },
Replies {...},
..
}
Labels
{
_id,
name,
settings {
ShowInLabelsList (show, hide, showIfUnread),
ShowInMessageList (show, hide),
..
}
}
Конечно, я что-то пропустил, но я думаю, что можно начинать с приведенной выше схемы и добавлять дополнительные функции в будущем, если потребуется.
Обновление:
Для «Представления беседы», я думаю, все показанные ответы перейдут во вложенную коллекцию Replies
(я обновил свою схему).Логика следующая:
После того, как вы получили новое сообщение, вам необходимо проверить, существует ли уже электронное письмо с тем же именем (наверняка нужно удалить «Re» и т. Д.), А также проверить того пользователя, который отправиладрес электронной почты в списке получателей.Если вышеприведенные условия выполняются, просто добавьте новое письмо во вложенную коллекцию Replies
, в противном случае добавьте в коллекцию писем.