feat(M08-C): 补会员检索与员工概况

This commit is contained in:
Codex
2026-08-10 10:35:44 +08:00
parent 8b46863cd8
commit 1b0839e881
22 changed files with 758 additions and 74 deletions
+23 -9
View File
@@ -210,7 +210,8 @@ const orders = [
id: '301',
tenantId: '7',
userId: '21',
status: 'COMPLETED',
storeId: '11',
status: 'FINISHED',
paidAmountCents: 12_000,
createdAt: new Date('2026-06-23T00:00:00.000Z')
},
@@ -218,9 +219,19 @@ const orders = [
id: '302',
tenantId: '7',
userId: '21',
storeId: '11',
status: 'CANCELLED',
paidAmountCents: 0,
createdAt: new Date('2026-06-24T00:00:00.000Z')
},
{
id: '303',
tenantId: '7',
userId: '22',
storeId: '11',
status: 'CANCELLED',
paidAmountCents: 0,
createdAt: new Date('2026-06-25T00:00:00.000Z')
}
];
@@ -335,7 +346,7 @@ function createService() {
const userId = String(params[0]);
const tenantId = String(params[1]);
const rows = orders.filter((item) => item.tenantId === tenantId && item.userId === userId);
const paid = rows.filter((item) => ['PAID', 'IN_USE', 'COMPLETED'].includes(item.status));
const paid = rows.filter((item) => ['PAID', 'RESERVED', 'IN_PROGRESS', 'FINISHED'].includes(item.status));
return [[{
orderCount: rows.length,
paidOrderCount: paid.length,
@@ -379,11 +390,17 @@ function queryMembers(sql, params) {
if (user.tenantId !== tenantId || user.userType !== 'CUSTOMER' || user.deleted) return false;
if (statusFilter && user.status !== statusFilter) return false;
if (hasStoreScope) {
return wallets.some((wallet) =>
const walletMatch = wallets.some((wallet) =>
wallet.tenantId === tenantId
&& wallet.userId === user.id
&& storeParams.includes(wallet.storeId)
);
const orderMatch = orders.some((order) =>
order.tenantId === tenantId
&& order.userId === user.id
&& storeParams.includes(order.storeId)
);
return walletMatch || orderMatch;
}
return true;
}).map((user) => ({
@@ -458,12 +475,9 @@ const forbiddenReader = {
page: 1,
pageSize: 20
});
assert.equal(scoped.total, 1);
assert.equal(scoped.items[0].memberId, '21');
await assert.rejects(
() => service.getMember({ actor: storeReader, memberId: '22' }),
(error) => error instanceof MemberProfileError && error.code === 'MEMBER_NOT_FOUND'
);
assert.equal(scoped.total, 2);
assert.equal(scoped.items[0].memberId, '22');
assert.equal((await service.getMember({ actor: storeReader, memberId: '22' })).memberId, '22');
}
{