v0.7.1 bugs fix for last update

This commit is contained in:
2026-03-11 15:38:28 -04:00
parent 39fa6e9ff2
commit d822784826
11 changed files with 244 additions and 150 deletions

View File

@@ -41,41 +41,6 @@ function emitGroupUpdated(io, groupId) {
// Inject io into routes
// Pin a DM (max 5 per user)
router.post('/:id/pin', authMiddleware, (req, res) => {
const db = getDb();
const userId = req.user.id;
const groupId = parseInt(req.params.id);
// Verify it's a DM this user is part of
const group = db.prepare('SELECT * FROM groups WHERE id = ? AND is_direct = 1').get(groupId);
if (!group) return res.status(404).json({ error: 'DM not found' });
const member = db.prepare('SELECT 1 FROM group_members WHERE group_id = ? AND user_id = ?').get(groupId, userId);
if (!member) return res.status(403).json({ error: 'Not a member' });
// Check limit
const count = db.prepare('SELECT COUNT(*) as n FROM pinned_direct_messages WHERE user_id = ?').get(userId).n;
if (count >= 5) return res.status(400).json({ error: 'Maximum 5 pinned DMs allowed' });
// Get next pin_order
const maxOrder = db.prepare('SELECT MAX(pin_order) as m FROM pinned_direct_messages WHERE user_id = ?').get(userId).m || 0;
db.prepare('INSERT OR IGNORE INTO pinned_direct_messages (user_id, group_id, pin_order) VALUES (?, ?, ?)')
.run(userId, groupId, maxOrder + 1);
res.json({ ok: true });
});
// Unpin a DM
router.delete('/:id/pin', authMiddleware, (req, res) => {
const db = getDb();
const userId = req.user.id;
const groupId = parseInt(req.params.id);
db.prepare('DELETE FROM pinned_direct_messages WHERE user_id = ? AND group_id = ?').run(userId, groupId);
res.json({ ok: true });
});
module.exports = (io) => {
// Get all groups for current user
@@ -101,15 +66,13 @@ router.get('/', authMiddleware, (req, res) => {
(SELECT COUNT(*) FROM messages m WHERE m.group_id = g.id AND m.is_deleted = 0) as message_count,
(SELECT m.content FROM messages m WHERE m.group_id = g.id AND m.is_deleted = 0 ORDER BY m.created_at DESC LIMIT 1) as last_message,
(SELECT m.created_at FROM messages m WHERE m.group_id = g.id AND m.is_deleted = 0 ORDER BY m.created_at DESC LIMIT 1) as last_message_at,
(SELECT m.user_id FROM messages m WHERE m.group_id = g.id AND m.is_deleted = 0 ORDER BY m.created_at DESC LIMIT 1) as last_message_user_id,
pdm.pin_order as pin_order
(SELECT m.user_id FROM messages m WHERE m.group_id = g.id AND m.is_deleted = 0 ORDER BY m.created_at DESC LIMIT 1) as last_message_user_id
FROM groups g
JOIN group_members gm ON g.id = gm.group_id AND gm.user_id = ?
LEFT JOIN users u ON g.owner_id = u.id
LEFT JOIN pinned_direct_messages pdm ON pdm.group_id = g.id AND pdm.user_id = ?
WHERE g.type = 'private'
ORDER BY last_message_at DESC NULLS LAST
`).all(userId, userId);
`).all(userId);
// For direct groups, set the name to the other user's display name
// Uses direct_peer1_id / direct_peer2_id so the name survives after a user leaves