From 0c407b81b7403458a2c5508fe0b3a8eb3d5a3cd1 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Wed, 28 Jan 2026 15:05:28 +0100 Subject: [PATCH] Enhance error handling in FalukantService: Add validation for product sellCost in calcRegionalSellPrice and getProductPriceInRegion methods, ensuring proper error messages are logged when sellCost is undefined or null. --- backend/services/falukantService.js | 57 ++++++++++++++++++----------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/backend/services/falukantService.js b/backend/services/falukantService.js index f59a6a1..bf51176 100644 --- a/backend/services/falukantService.js +++ b/backend/services/falukantService.js @@ -101,6 +101,11 @@ async function calcRegionalSellPrice(product, knowledgeFactor, regionId, worthPe worthPercent = townWorth?.worthPercent || 50; // Default 50% wenn nicht gefunden } + // Prüfe ob sellCost vorhanden ist + if (product.sellCost === null || product.sellCost === undefined) { + throw new Error(`Product ${product.id} has no sellCost defined`); + } + // Basispreis basierend auf regionalem worthPercent const basePrice = product.sellCost * (worthPercent / 100); @@ -4178,28 +4183,38 @@ class FalukantService extends BaseService { } async getProductPriceInRegion(hashedUserId, productId, regionId) { - const user = await this.getFalukantUserByHashedId(hashedUserId); - const character = await FalukantCharacter.findOne({ where: { userId: user.id } }); - if (!character) { - throw new Error(`No FalukantCharacter found for user with id ${user.id}`); + try { + const user = await this.getFalukantUserByHashedId(hashedUserId); + const character = await FalukantCharacter.findOne({ where: { userId: user.id } }); + if (!character) { + throw new Error(`No FalukantCharacter found for user with id ${user.id}`); + } + + // Produkt abrufen + const product = await ProductType.findOne({ where: { id: productId } }); + if (!product) { + throw new Error(`Product not found with id ${productId}`); + } + + // Prüfe ob sellCost vorhanden ist + if (product.sellCost === null || product.sellCost === undefined) { + throw new Error(`Product ${productId} has no sellCost defined`); + } + + // Knowledge für dieses Produkt abrufen + const knowledge = await Knowledge.findOne({ + where: { characterId: character.id, productId: productId } + }); + const knowledgeFactor = knowledge?.knowledge || 0; + + // Verwende die bereits existierende calcRegionalSellPrice Funktion + const price = await calcRegionalSellPrice(product, knowledgeFactor, regionId); + + return { price }; + } catch (error) { + console.error(`[getProductPriceInRegion] Error for productId=${productId}, regionId=${regionId}:`, error); + throw error; } - - // Produkt abrufen - const product = await ProductType.findOne({ where: { id: productId } }); - if (!product) { - throw new Error(`Product not found with id ${productId}`); - } - - // Knowledge für dieses Produkt abrufen - const knowledge = await Knowledge.findOne({ - where: { characterId: character.id, productId: productId } - }); - const knowledgeFactor = knowledge?.knowledge || 0; - - // Verwende die bereits existierende calcRegionalSellPrice Funktion - const price = await calcRegionalSellPrice(product, knowledgeFactor, regionId); - - return { price }; } async getProductPricesInCities(hashedUserId, productId, currentPrice, currentRegionId = null) {