fix(order): today 返回附加 elderName 供 APP 卡片显示
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
f0e3deb6c8
commit
266ce08dd4
@ -47,6 +47,7 @@ function makeService(
|
||||
planFindFirst?: ReturnType<typeof vi.fn>;
|
||||
planItemFindMany?: ReturnType<typeof vi.fn>;
|
||||
elderFindFirst?: ReturnType<typeof vi.fn>;
|
||||
elderFindMany?: ReturnType<typeof vi.fn>;
|
||||
staffFindFirst?: ReturnType<typeof vi.fn>;
|
||||
staffFindMany?: ReturnType<typeof vi.fn>;
|
||||
} = {},
|
||||
@ -60,6 +61,7 @@ function makeService(
|
||||
const planFindFirst = overrides.planFindFirst ?? vi.fn().mockResolvedValue(null);
|
||||
const planItemFindMany = overrides.planItemFindMany ?? vi.fn().mockResolvedValue([]);
|
||||
const elderFindFirst = overrides.elderFindFirst ?? vi.fn().mockResolvedValue(null);
|
||||
const elderFindMany = overrides.elderFindMany ?? vi.fn().mockResolvedValue([]);
|
||||
const staffFindFirst = overrides.staffFindFirst ?? vi.fn().mockResolvedValue(null);
|
||||
const staffFindMany = overrides.staffFindMany ?? vi.fn().mockResolvedValue([]);
|
||||
|
||||
@ -74,7 +76,7 @@ function makeService(
|
||||
},
|
||||
plan: { findUnique: planFindUnique, findFirst: planFindFirst },
|
||||
planItem: { findMany: planItemFindMany },
|
||||
elder: { findFirst: elderFindFirst },
|
||||
elder: { findFirst: elderFindFirst, findMany: elderFindMany },
|
||||
staff: { findFirst: staffFindFirst, findMany: staffFindMany },
|
||||
},
|
||||
};
|
||||
@ -90,6 +92,7 @@ function makeService(
|
||||
planFindFirst,
|
||||
planItemFindMany,
|
||||
elderFindFirst,
|
||||
elderFindMany,
|
||||
staffFindFirst,
|
||||
staffFindMany,
|
||||
};
|
||||
@ -412,3 +415,29 @@ describe('OrderService.list', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('OrderService.today', () => {
|
||||
it('返回当日工单并附加 elderName', async () => {
|
||||
const staffFindFirst = vi.fn().mockResolvedValue({ id: 's1', userId: 'u1' });
|
||||
const orderFindMany = vi.fn().mockResolvedValue([makeOrder({ assigneeId: 's1', elderId: 'e1' })]);
|
||||
const elderFindMany = vi.fn().mockResolvedValue([{ id: 'e1', name: '张三' }]);
|
||||
const { service } = makeService({ staffFindFirst, orderFindMany, elderFindMany });
|
||||
|
||||
const res = await runWithRequestContext(ctx, () => service.today({}));
|
||||
|
||||
expect(res).toHaveLength(1);
|
||||
expect(res[0].elderName).toBe('张三');
|
||||
expect(elderFindMany).toHaveBeenCalledWith({ where: { id: { in: ['e1'] } } });
|
||||
});
|
||||
|
||||
it('无对应老人时 elderName 为 null', async () => {
|
||||
const staffFindFirst = vi.fn().mockResolvedValue({ id: 's1', userId: 'u1' });
|
||||
const orderFindMany = vi.fn().mockResolvedValue([makeOrder({ assigneeId: 's1', elderId: 'e-missing' })]);
|
||||
const elderFindMany = vi.fn().mockResolvedValue([]);
|
||||
const { service } = makeService({ staffFindFirst, orderFindMany, elderFindMany });
|
||||
|
||||
const res = await runWithRequestContext(ctx, () => service.today({}));
|
||||
|
||||
expect(res[0].elderName).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@ -208,10 +208,16 @@ export class OrderService {
|
||||
const staff = await this.prisma.client.staff.findFirst({ where: { userId: ctx.userId } });
|
||||
if (!staff) return [];
|
||||
const serviceDate = q.serviceDate ? toDateOnly(q.serviceDate) : toDateOnly(todayStr());
|
||||
return this.prisma.client.order.findMany({
|
||||
const orders = await this.prisma.client.order.findMany({
|
||||
where: { assigneeId: staff.id, serviceDate },
|
||||
orderBy: { timeSlotStart: 'asc' },
|
||||
});
|
||||
const elderIds = [...new Set(orders.map((o) => o.elderId).filter((id): id is string => !!id))];
|
||||
const elders = elderIds.length
|
||||
? await this.prisma.client.elder.findMany({ where: { id: { in: elderIds } } })
|
||||
: [];
|
||||
const nameMap = new Map(elders.map((e) => [e.id, e.name]));
|
||||
return orders.map((order) => ({ ...order, elderName: nameMap.get(order.elderId) ?? null }));
|
||||
}
|
||||
|
||||
/** 批量推荐:只读,不自动派。权重:同资质→历史服务过→距离近→负荷低(距离/负荷留 TODO)。 */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user