fix(activity): 参与人昵称/头像回填真实用户,已注销用户明确标注
- getActivities/getActivityById 的 participants 关联 users,返回真实昵称与头像 - 用户已删除时返回「用户已注销」,避免详情页显示搭子_id - 118 套件/773 用例全绿;线上活动详情已验证真实昵称
这个提交包含在:
@@ -174,7 +174,7 @@ export class MysqlRepository {
|
||||
id: p.id,
|
||||
activityId: p.activityId,
|
||||
userId: p.userId,
|
||||
nickname: p.nickname || '',
|
||||
nickname: p.nickname || '用户已注销',
|
||||
avatar: p.avatar || '',
|
||||
payAmountCents: p.payAmountCents,
|
||||
checkinStatus: Boolean(p.checkinStatus),
|
||||
@@ -238,7 +238,11 @@ export class MysqlRepository {
|
||||
return {
|
||||
...act,
|
||||
allowDynamicPrice: Boolean(act.allowDynamicPrice),
|
||||
participants: ptRows.map((p: any) => ({ ...p, checkinStatus: Boolean(p.checkinStatus) })),
|
||||
participants: ptRows.map((p: any) => ({
|
||||
...p,
|
||||
nickname: p.nickname || '用户已注销',
|
||||
checkinStatus: Boolean(p.checkinStatus),
|
||||
})),
|
||||
joinedCount: ptRows.length,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -30,6 +30,13 @@ describe('ActivityListContent(活动大厅真实数据与内容规范)', ()
|
||||
expect(page).toContain('creatorNickname');
|
||||
});
|
||||
|
||||
it('活动参与者必须返回真实昵称与头像,而不是只显示搭子_id', () => {
|
||||
const repo = fs.readFileSync(path.join(root, 'server', 'src', 'db', 'repository.ts'), 'utf-8');
|
||||
expect(repo).toContain('LEFT JOIN users u ON u.id = p.user_id');
|
||||
expect(repo).toContain('nickname: p.nickname ||');
|
||||
expect(repo).toContain('avatar: p.avatar ||');
|
||||
});
|
||||
|
||||
it('页面严禁包含任何系统 Emoji 字符', () => {
|
||||
const emojiRegex = /(?:\p{Extended_Pictographic}|\p{Emoji_Presentation}|[\u2600-\u27BF])/u;
|
||||
expect(emojiRegex.test(page)).toBe(false);
|
||||
|
||||
在新工单中引用
屏蔽一个用户