id-телеграма могут быть больше 32-битного int, поэтому лучше использовать свои id + кеш, который позволит быстро конвертировать одни id в другие. Хотя может быть использование BigInt будет достаточно. Большие id могут негативно сказаться на скорости выборки данных и индексировании. A: Будут использоваться свои id, а ID Telegram записиываться в отдельные колонки. ----------------------------------------------------- По хорошему для каждого customer надо иметь свою базу. Поскольку для отображения данных проекта требуется информация только именно этого customer, то информация может быть локализвана. При этом остается общая база, в которой хранится список пользователей (таблица users) и информация, необходимая для формирования первой сводной страницы, напр. общее число незавершенных задач и календарь совещаний, а также id-клиентов, у которых пользователь участвует/вал в проектах. ? Можно ли сделать так, чтобы клиент имел свою установку, но при этом пользователи обращались к нашему боту/miniapp? Если данные запрашивать не напрямую из базы, а по http/https, то каждый узел будет иметь свою базу. ----------------------------------------------------- Хотелось бы не хранить сообщения локально. А запрашивать их за день и отправлять их бекап в специальную группу. Бот имеет ограничение 20-30 запросов в секунду, т.е. за минуту бот может получить данные из 1200 чатов. A: Не хранить сообщения. Запрашивать их, если клиент установил настройку. ----------------------------------------------------- При удалении проекта/задачи/встречи/компании надо также чистить links. Возможно лучше сделать отдельные таблицы для каждой связки, чтобы использовать FK + delete cascade A: Операция выполняется DELETE CASCADE автоматически ----------------------------------------------------- ФИО пользователей задает customer и ФИО в адресной книге всегда показывается. Телефон задает пользователь и пользователь может указать на каком проекте его показывать, а где нет. По умолчанию "Не показывать" <- может храниться в users.is_show_phone = [project_id1, project_id3] A: Хранится в настойках пользователя в таблице users ----------------------------------------------------- Если пользователь изменил задачу, то у тех, у кого она есть в миниаппе, должны получить по ней обновление. Вопрос в том, как маякнуть клиенту, что что-то обновилось? Два варианта: клиент должен запрашивать обновления скажем раз в минуту или же использовать WebSocket. Есть вероятность, что для сервера поддерживать кучу WebScoket слишком накладно. ----------------------------------------------------- Не делать API, который возвращает одну сущность, а только список. Если надо сущность, то можно /api/project?id=1 Или можно использовать redirect с /api/project/:id на /api/project?id=1 A: Да ----------------------------------------------------- Кто заполняет ФИО пользователя? Если админ, тогда возможна ситуация, когда на проекте одного админа человек будет с ФИО, а на проекте другого - нет. Возможно ФИО также должен заполнять сам пользователь. По сути есть некоторая дыра, когда пользователь предоставляет ФИО, телефон и номер телеграма всем желающим, когда можно заманить человека в группу с ботом и узнать его личные данные. A: Фамилию задает клиент отдельно на каждом проекте. А также роль и департамент. ----------------------------------------------------- Польщователь сам решает показывать ли ему ФИО и/или телефон на проектах конкретного админа системы. А: Пользователь решает только про телефон ----------------------------------------------------- Добавить документы может любой из участников. Удалять можно только своё или если создатель. A: Да. ----------------------------------------------------- Если переслать документ боту, то бот спросит к какой задаче прикрепить. Автор в этом случае тот, кто переслал сообщение. A: В пересылаем соообщении нет информации о том, откуда оно было получено, соотв. нельзя определить к какому проекту относится пересылаемое напрямую. Как вариант - использовать последний проект, где пользователь отправил сообщение в группе + кнопка Другой проект. Если бот не имеет админских прав, то это будет плохо работать. ----------------------------------------------------- Предположим, что бота добавляют в группу А. Что делать, если не все в группе используют бота/miniapp? ----------------------------------------------------- Если бот не получает админских прав, то привязать группу токеном не получится, т.к. бот не видит сообщений. Можно сделать, чтобы пользователь отправил комманду /attach. Пока передать параметр в команду невозможно. https://gram.js.org/tl/bots/SetBotCommands Для отправки пользователям сообщений бот должен знать не только их id, но и accessHash. Аналогично для отправки сообщения в чат или скачивания файла, т.е. надо хранить еще и это поле. Когда пользователь отписывается от бота, то надо обнулять его hash. В адресной книге тех, к кому у бота нет доступа, т.е. они участники группы, но у них нет бота, отображать специальным образом. А: если у того, кому назначили задачу, нет бота и следовательно accessHash, то можно отправлять в один из чатов, в котором участвуют создатель и ответственный, возможно отсортировав по времени последнего сообщения от каждого из них. Наблюдатели должны использовать бота. ----------------------------------------------------- Возможно дать некоторым пользователям добавлять группы к проекту самостоятельно, путем нажатия кнопки "Добавить группу". ----------------------------------------------------- В uTasks поначалу отображали только задачи, связанные с пользователем, потом они добавили крыж "Показывать все задачи" по просьбам пользователей. Почему пользователям это понадобилось? Возможно потому что у них нет механизма наблюдателей. Возможно нужно для контроля начальником => отдельное приложение ----------------------------------------------------- Предположим, что бот был в группе, а потом его удалили из нее. Должна ли группа отображаться в списке групп проекта? -----------------------------------------------------