From 0cd4268a6553bb8464c6e7ad745a81b65f8aae4a Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 27 Feb 2023 15:31:53 +0800 Subject: [PATCH] feat(admin): update delete message logic with call We need to post deleteMessage socket event to user and not just in database. Reuse message service --- server/admin/app/ra/resources/chat.tsx | 6 +++++- server/admin/app/server/broker.ts | 10 +++++++++- server/admin/app/server/router/api.ts | 14 ++++++++++++++ server/models/group/group.ts | 5 +++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/server/admin/app/ra/resources/chat.tsx b/server/admin/app/ra/resources/chat.tsx index d6de8270..9d7f609e 100644 --- a/server/admin/app/ra/resources/chat.tsx +++ b/server/admin/app/ra/resources/chat.tsx @@ -8,6 +8,7 @@ import { TextField, SearchInput, useTranslate, + BulkDeleteButton, } from 'react-admin'; import { UserField } from '../components/UserField'; @@ -25,7 +26,10 @@ export const MessageList: React.FC = () => { />, ]} > - + } + > diff --git a/server/admin/app/server/broker.ts b/server/admin/app/server/broker.ts index 0c7247a0..a06d476c 100644 --- a/server/admin/app/server/broker.ts +++ b/server/admin/app/server/broker.ts @@ -1,4 +1,4 @@ -import { TcBroker } from 'tailchat-server-sdk'; +import { TcBroker, SYSTEM_USERID } from 'tailchat-server-sdk'; import brokerConfig from '../../../moleculer.config'; const transporter = process.env.TRANSPORTER; @@ -12,3 +12,11 @@ export const broker = new TcBroker({ broker.start().then(() => { console.log('Linked to Tailchat network, TRANSPORTER: ', transporter); }); + +export function call(actionName: string, params: any): Promise { + return broker.call(actionName, params, { + meta: { + userId: SYSTEM_USERID, + }, + }); +} diff --git a/server/admin/app/server/router/api.ts b/server/admin/app/server/router/api.ts index cc72ad4d..5afe6b8e 100644 --- a/server/admin/app/server/router/api.ts +++ b/server/admin/app/server/router/api.ts @@ -1,6 +1,7 @@ import { Router } from 'express'; import raExpressMongoose from 'express-mongoose-ra-json-server'; import jwt from 'jsonwebtoken'; +import { call } from '../broker'; import { adminAuth, auth, authSecret } from '../middleware/auth'; import { networkRouter } from './network'; @@ -46,6 +47,19 @@ router.use( q: ['nickname', 'email'], }) ); +router.delete('/messages/:id', auth(), async (req, res) => { + try { + const messageId = req.params.id; + await call('chat.message.deleteMessage', { + messageId, + }); + + res.json({ id: messageId }); + } catch (err) { + console.error(err); + res.status(500).json({ message: err.message }); + } +}); router.use( '/messages', auth(), diff --git a/server/models/group/group.ts b/server/models/group/group.ts index 29fa749c..daae7259 100644 --- a/server/models/group/group.ts +++ b/server/models/group/group.ts @@ -16,6 +16,7 @@ import { GroupPanelType, NoPermissionError, PERMISSION, + SYSTEM_USERID, TcContext, } from 'tailchat-server-sdk'; import { User } from '../user/user'; @@ -275,6 +276,10 @@ export class Group extends TimeStamps implements Base { throw new Error('Not Found Group'); } + if (userId === SYSTEM_USERID) { + return allPermission; + } + const member = group.members.find( (member) => String(member.userId) === userId );