v0.9.24 fixed notifications
This commit is contained in:
@@ -10,7 +10,7 @@
|
|||||||
PROJECT_NAME=jama
|
PROJECT_NAME=jama
|
||||||
|
|
||||||
# Image version to run (set by build.sh, or use 'latest')
|
# Image version to run (set by build.sh, or use 'latest')
|
||||||
JAMA_VERSION=0.9.23
|
JAMA_VERSION=0.9.24
|
||||||
|
|
||||||
# App port — the host port Docker maps to the container
|
# App port — the host port Docker maps to the container
|
||||||
PORT=3000
|
PORT=3000
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jama-backend",
|
"name": "jama-backend",
|
||||||
"version": "0.9.23",
|
"version": "0.9.24",
|
||||||
"description": "TeamChat backend server",
|
"description": "TeamChat backend server",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -307,7 +307,30 @@ router.delete('/:id/members/:userId', authMiddleware, (req, res) => {
|
|||||||
}
|
}
|
||||||
const targetId = parseInt(req.params.userId);
|
const targetId = parseInt(req.params.userId);
|
||||||
if (targetId === group.owner_id) return res.status(400).json({ error: 'Cannot remove the group owner' });
|
if (targetId === group.owner_id) return res.status(400).json({ error: 'Cannot remove the group owner' });
|
||||||
|
|
||||||
|
const removedUser = db.prepare('SELECT name, display_name FROM users WHERE id = ?').get(targetId);
|
||||||
|
const removedName = removedUser?.display_name || removedUser?.name || 'Unknown';
|
||||||
|
|
||||||
db.prepare('DELETE FROM group_members WHERE group_id = ? AND user_id = ?').run(group.id, targetId);
|
db.prepare('DELETE FROM group_members WHERE group_id = ? AND user_id = ?').run(group.id, targetId);
|
||||||
|
|
||||||
|
// Post system message so remaining members see the removal notice
|
||||||
|
const sysResult = db.prepare(`
|
||||||
|
INSERT INTO messages (group_id, user_id, content, type)
|
||||||
|
VALUES (?, ?, ?, 'system')
|
||||||
|
`).run(group.id, targetId, `${removedName} has been removed from the conversation.`);
|
||||||
|
const sysMsg = db.prepare(`
|
||||||
|
SELECT m.*, u.name as user_name, u.display_name as user_display_name,
|
||||||
|
u.avatar as user_avatar, u.role as user_role, u.status as user_status,
|
||||||
|
u.hide_admin_tag as user_hide_admin_tag, u.about_me as user_about_me
|
||||||
|
FROM messages m JOIN users u ON m.user_id = u.id WHERE m.id = ?
|
||||||
|
`).get(sysResult.lastInsertRowid);
|
||||||
|
sysMsg.reactions = [];
|
||||||
|
io.to(`group:${group.id}`).emit('message:new', sysMsg);
|
||||||
|
|
||||||
|
// Remove the user from the socket room and update their sidebar
|
||||||
|
io.in(`user:${targetId}`).socketsLeave(`group:${group.id}`);
|
||||||
|
io.to(`user:${targetId}`).emit('group:deleted', { groupId: group.id });
|
||||||
|
|
||||||
res.json({ success: true });
|
res.json({ success: true });
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -340,6 +363,10 @@ router.delete('/:id/leave', authMiddleware, (req, res) => {
|
|||||||
// Broadcast to remaining members in the group room
|
// Broadcast to remaining members in the group room
|
||||||
io.to(`group:${group.id}`).emit('message:new', sysMsg);
|
io.to(`group:${group.id}`).emit('message:new', sysMsg);
|
||||||
|
|
||||||
|
// Always remove leaver from socket room and their sidebar
|
||||||
|
io.in(`user:${userId}`).socketsLeave(`group:${group.id}`);
|
||||||
|
io.to(`user:${userId}`).emit('group:deleted', { groupId: group.id });
|
||||||
|
|
||||||
if (group.is_direct) {
|
if (group.is_direct) {
|
||||||
// Make remaining user owner so they can still manage the conversation
|
// Make remaining user owner so they can still manage the conversation
|
||||||
const remaining = db.prepare('SELECT user_id FROM group_members WHERE group_id = ? LIMIT 1').get(group.id);
|
const remaining = db.prepare('SELECT user_id FROM group_members WHERE group_id = ? LIMIT 1').get(group.id);
|
||||||
@@ -347,8 +374,6 @@ router.delete('/:id/leave', authMiddleware, (req, res) => {
|
|||||||
db.prepare("UPDATE groups SET owner_id = ?, updated_at = datetime('now') WHERE id = ?")
|
db.prepare("UPDATE groups SET owner_id = ?, updated_at = datetime('now') WHERE id = ?")
|
||||||
.run(remaining.user_id, group.id);
|
.run(remaining.user_id, group.id);
|
||||||
}
|
}
|
||||||
// Tell the leaver's socket to leave the group room and remove from sidebar
|
|
||||||
io.to(`user:${userId}`).emit('group:deleted', { groupId: group.id });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
res.json({ success: true });
|
res.json({ success: true });
|
||||||
|
|||||||
2
build.sh
2
build.sh
@@ -13,7 +13,7 @@
|
|||||||
# ─────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
VERSION="${1:-0.9.23}"
|
VERSION="${1:-0.9.24}"
|
||||||
ACTION="${2:-}"
|
ACTION="${2:-}"
|
||||||
REGISTRY="${REGISTRY:-}"
|
REGISTRY="${REGISTRY:-}"
|
||||||
IMAGE_NAME="jama"
|
IMAGE_NAME="jama"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jama-frontend",
|
"name": "jama-frontend",
|
||||||
"version": "0.9.23",
|
"version": "0.9.24",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
Reference in New Issue
Block a user