From 0991dcde8e35fe5e40a58dfaa1ecf8e0c878c6d2 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Sun, 28 May 2023 15:35:39 +0800 Subject: [PATCH] refactor: modify friend data struct add nickname in friend model --- client/shared/redux/setup.ts | 10 ++++++---- client/shared/redux/slices/user.ts | 13 +++++++++---- .../Main/Content/Personal/Friends/FriendList.tsx | 10 +++++----- server/models/user/friend.ts | 6 ++++++ server/services/core/user/friend.service.ts | 16 +++++++++++----- 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/client/shared/redux/setup.ts b/client/shared/redux/setup.ts index 3869bc4d..868821f8 100644 --- a/client/shared/redux/setup.ts +++ b/client/shared/redux/setup.ts @@ -100,9 +100,11 @@ function initial(socket: AppSocket, store: AppStore) { ); // 获取好友列表 - socket.request('friend.getAllFriends').then((data) => { - store.dispatch(userActions.setFriendList(data)); - }); + socket + .request<{ id: string; nickname?: string }[]>('friend.getAllFriends') + .then((data) => { + store.dispatch(userActions.setFriendList(data)); + }); // 获取好友邀请列表 socket.request('friend.request.allRelated').then((data) => { @@ -144,7 +146,7 @@ function listenNotify(socket: AppSocket, store: AppStore) { console.error('错误的信息', userId); return; } - store.dispatch(userActions.appendFriend(userId)); + store.dispatch(userActions.appendFriend({ id: userId })); }); socket.listen('friend.request.add', (request) => { diff --git a/client/shared/redux/slices/user.ts b/client/shared/redux/slices/user.ts index 419e8af1..ab4731d1 100644 --- a/client/shared/redux/slices/user.ts +++ b/client/shared/redux/slices/user.ts @@ -3,9 +3,14 @@ import _set from 'lodash/set'; import type { UserLoginInfo } from '../../model/user'; import type { FriendRequest } from '../../model/friend'; +export interface FriendInfo { + id: string; + nickname?: string; +} + export interface UserState { info: UserLoginInfo | null; - friends: string[]; // 好友的id列表 + friends: FriendInfo[]; // 好友的id列表 friendRequests: FriendRequest[]; } @@ -44,13 +49,13 @@ const userSlice = createSlice({ _set(state.info, ['extra', fieldName], fieldValue); }, - setFriendList(state, action: PayloadAction) { + setFriendList(state, action: PayloadAction) { state.friends = action.payload; }, setFriendRequests(state, action: PayloadAction) { state.friendRequests = action.payload; }, - appendFriend(state, action: PayloadAction) { + appendFriend(state, action: PayloadAction) { if (state.friends.some((id) => id === action.payload)) { return; } @@ -59,7 +64,7 @@ const userSlice = createSlice({ }, removeFriend(state, action: PayloadAction) { const friendId = action.payload; - const index = state.friends.indexOf(friendId); + const index = state.friends.findIndex((item) => item.id === friendId); if (index >= 0) { state.friends.splice(index, 1); } diff --git a/client/web/src/routes/Main/Content/Personal/Friends/FriendList.tsx b/client/web/src/routes/Main/Content/Personal/Friends/FriendList.tsx index 3cf5d6cd..dd9c60a8 100644 --- a/client/web/src/routes/Main/Content/Personal/Friends/FriendList.tsx +++ b/client/web/src/routes/Main/Content/Personal/Friends/FriendList.tsx @@ -71,16 +71,16 @@ export const FriendList: React.FC<{
{t('好友列表')}
- {friends.map((friendId) => ( + {friends.map((item) => (
handleCreateConverse(friendId)} + onClick={() => handleCreateConverse(item.id)} />
, @@ -91,7 +91,7 @@ export const FriendList: React.FC<{ { key: 'delete', danger: true, - onClick: () => handleRemoveFriend(friendId), + onClick: () => handleRemoveFriend(item.id), label: t('删除'), }, ], diff --git a/server/models/user/friend.ts b/server/models/user/friend.ts index 73b124f5..8eff84bf 100644 --- a/server/models/user/friend.ts +++ b/server/models/user/friend.ts @@ -31,6 +31,12 @@ export class Friend extends FindOrCreate implements Base { }) to: Ref; + /** + * 好友昵称, 覆盖用户自己的昵称 + */ + @prop() + nickname?: string; + @prop() createdAt: Date; diff --git a/server/services/core/user/friend.service.ts b/server/services/core/user/friend.service.ts index 9a7f6e08..17e51b4d 100644 --- a/server/services/core/user/friend.service.ts +++ b/server/services/core/user/friend.service.ts @@ -1,5 +1,8 @@ -import { TcCacheCleaner } from '../../../mixins/cache.cleaner.mixin'; -import type { FriendDocument, FriendModel } from '../../../models/user/friend'; +import type { + Friend, + FriendDocument, + FriendModel, +} from '../../../models/user/friend'; import { TcService, TcDbService, TcContext } from 'tailchat-server-sdk'; interface FriendService @@ -44,10 +47,13 @@ class FriendService extends TcService { }, }); - const records = await this.transformDocuments(ctx, {}, list); - const ids = records.map((r) => r.to); + const records: Friend[] = await this.transformDocuments(ctx, {}, list); + const res = records.map((r) => ({ + id: r.to, + nickname: r.nickname, + })); - return ids; + return res; } /**