From 7d541825d8892334e1705209fffc8428742bbf06 Mon Sep 17 00:00:00 2001 From: syntaxbullet Date: Thu, 15 Jan 2026 15:09:37 +0100 Subject: [PATCH] feat: Update quest event triggers to include item IDs for granular tracking. --- shared/modules/inventory/inventory.service.ts | 6 +++--- shared/modules/quest/quest.service.test.ts | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/shared/modules/inventory/inventory.service.ts b/shared/modules/inventory/inventory.service.ts index 7f7628b..167b1e7 100644 --- a/shared/modules/inventory/inventory.service.ts +++ b/shared/modules/inventory/inventory.service.ts @@ -40,7 +40,7 @@ export const inventoryService = { // Trigger Quest Event const { questService } = await import("@shared/modules/quest/quest.service"); - await questService.handleEvent(userId, 'ITEM_COLLECT', Number(quantity), txFn); + await questService.handleEvent(userId, `ITEM_COLLECT:${itemId}`, Number(quantity), txFn); return entry; } else { @@ -68,7 +68,7 @@ export const inventoryService = { // Trigger Quest Event const { questService } = await import("@shared/modules/quest/quest.service"); - await questService.handleEvent(userId, 'ITEM_COLLECT', Number(quantity), txFn); + await questService.handleEvent(userId, `ITEM_COLLECT:${itemId}`, Number(quantity), txFn); return entry; } @@ -191,7 +191,7 @@ export const inventoryService = { // Trigger Quest Event const { questService } = await import("@shared/modules/quest/quest.service"); - await questService.handleEvent(userId, 'ITEM_USE', 1, txFn); + await questService.handleEvent(userId, `ITEM_USE:${itemId}`, 1, txFn); return { success: true, results, usageData, item }; }, tx); diff --git a/shared/modules/quest/quest.service.test.ts b/shared/modules/quest/quest.service.test.ts index 6ab616d..9f1917c 100644 --- a/shared/modules/quest/quest.service.test.ts +++ b/shared/modules/quest/quest.service.test.ts @@ -150,31 +150,31 @@ describe("questService", () => { }); describe("handleEvent", () => { - it("should progress a quest", async () => { + it("should progress a quest with sub-events", async () => { const mockUserQuest = { userId: 1n, questId: 101, progress: 0, completedAt: null, - quest: { triggerEvent: "TEST_EVENT", requirements: { target: 5 } } + quest: { triggerEvent: "ITEM_USE:101", requirements: { target: 5 } } }; mockFindMany.mockResolvedValue([mockUserQuest]); mockReturning.mockResolvedValue([{ userId: 1n, questId: 101, progress: 1 }]); - await questService.handleEvent("1", "TEST_EVENT", 1); + await questService.handleEvent("1", "ITEM_USE:101", 1); expect(mockUpdate).toHaveBeenCalled(); expect(mockSet).toHaveBeenCalledWith({ progress: 1 }); }); - it("should complete a quest when target reached", async () => { + it("should complete a quest when target reached using sub-events", async () => { const mockUserQuest = { userId: 1n, questId: 101, progress: 4, completedAt: null, quest: { - triggerEvent: "TEST_EVENT", + triggerEvent: "ITEM_COLLECT:505", requirements: { target: 5 }, rewards: { balance: 100 } } @@ -182,7 +182,7 @@ describe("questService", () => { mockFindMany.mockResolvedValue([mockUserQuest]); mockFindFirst.mockResolvedValue(mockUserQuest); // For completeQuest - await questService.handleEvent("1", "TEST_EVENT", 1); + await questService.handleEvent("1", "ITEM_COLLECT:505", 1); // Verify completeQuest was called (it will update completedAt) expect(mockUpdate).toHaveBeenCalled();