Ну так ты попробуй рассказать как оно будет работать
Ок, в общем для бд будет Монга потому, что мне надо списки и без них начинается пиздец какая ебля с взаимоотношениями пользователей и т.п.
Юзер будет иметь поля айди, имя, токен. Пикчу буду хранить в отдельной папке под айдишником юзера и потом менять со временем.
Еще с юзером идет поле в базе его отношений с другими юзерами:
0 - запрос
1 - в друзьях
2 - заблочен
По этим статусам проверяется можно ли добавить кого-то в друзья еще или написать (только друзья могут отправить что-то в лс)
Еще с юзером вытягивается список серверов где он есть и групповых лс из другой коллекции пожалуй с членами каких-то каналов/серверов и их позиции
Members соответственно будут с полями: айди юзверя от которого он создан, айди чата/сервера, где он, время вступления, его роли (при наличии) в виде айдишников и пересчитанные разрешения
Channels с полями: айди, тип, последнее сообщение, а дальше опциональные поля: название (у личных сообщений может не быть), хозяин, от какого сервера канал, nsfw (является ли 18+), тема канала, позиция канала на сервере, перезаписи разрешений каналов
Server собирает несколько каналов и у него поля: айди, хозяин, список айди каналов, айдишники роли, количество вступивших, время создания, список забаненых людей по айди и причины бана, эмоджи
Роли соберут у себя: айди, цвет, разрешения по серверу
Личные сообщения будут просто сообщения, где в качестве каналов для пользователя будут показаны отправители этих сообщений
У сообщений: айди, айди канала получателя, айди автора, время получения сообщения сервером (который как раз принимает сообщения), закреплено ли сообщение, приложения в виде ссылок на картинки или файлы внутри приложения с указанием его типа и имени в виде списка, реакции добавленные к сообщению
Таблица инвайтов еще понадобится: короткая приписка в линке на инвайт и привязка к айдишнику сервера/группового чата