fix(chat): подавлять push-уведомления при открытом активном чате и автоотметка прочтения в task chat
- Добавлены active_chat_* поля в user_presence и endpoint /api/devices/active-chat - Сервер не шлёт Web Push/Pushy, если получатель смотрит в тот же чат на видимой вкладке - Клиент сообщает серверу и Service Worker об активном чате из Chat.tsx и TaskChat.tsx - TaskChat: входящие сообщения автоматически отмечаются прочитанными при видимой вкладке - SW: подавляет foreground/system push, если активный чат совпадает
This commit is contained in:
@@ -2493,6 +2493,12 @@ export const userPresence = pgTable("user_presence", {
|
||||
isOnline: boolean("is_online").default(false),
|
||||
lastSeenAt: timestamp("last_seen_at").defaultNow(),
|
||||
activeDevices: integer("active_devices").default(0),
|
||||
// Активный чат: используется сервером, чтобы не слать push, если пользователь
|
||||
// уже смотрит в этот чат на видимой вкладке.
|
||||
activeChatType: text("active_chat_type"), // 'messenger' | 'task'
|
||||
activeChatId: integer("active_chat_id"),
|
||||
activeChatVisible: boolean("active_chat_visible").default(false),
|
||||
activeChatUpdatedAt: timestamp("active_chat_updated_at").defaultNow(),
|
||||
}, (table) => ({
|
||||
userIndex: index("user_presence_user_idx").on(table.userId),
|
||||
onlineIndex: index("user_presence_online_idx").on(table.isOnline),
|
||||
|
||||
Reference in New Issue
Block a user