From 2de081663f74afb2d27e158134f3abacc228906f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 10:34:50 +0000 Subject: [PATCH] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4/=EC=9D=B8=EC=A6=9D/API/=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0/=EA=B2=B0=EC=A0=9C=20=EB=B2=84=EA=B7=B8=20=EC=9D=BC?= =?UTF-8?q?=EA=B4=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pikiland-engine | 1 + src/modules/apiRouter.js | 6 ++++-- src/modules/authMiddleware.js | 7 ++++--- src/modules/dataProcessor.js | 10 ++-------- src/modules/paymentGateway.js | 9 ++++----- src/modules/userService.js | 24 +++++++++++------------- 6 files changed, 26 insertions(+), 31 deletions(-) create mode 160000 pikiland-engine diff --git a/pikiland-engine b/pikiland-engine new file mode 160000 index 0000000..0738b71 --- /dev/null +++ b/pikiland-engine @@ -0,0 +1 @@ +Subproject commit 0738b71465b58fd64ca6e2de306b52e5d94e43ed diff --git a/src/modules/apiRouter.js b/src/modules/apiRouter.js index b78079c..8399998 100644 --- a/src/modules/apiRouter.js +++ b/src/modules/apiRouter.js @@ -24,10 +24,12 @@ export function handleApiRequest(req) { body: { success: true, user: req.body } }; } catch (err) { - const formattedDetails = err.errors.map(e => e.msg).join(', '); + const formattedDetails = err instanceof ValidationError + ? err.message + : (Array.isArray(err.errors) ? err.errors.map(e => e.msg).join(', ') : 'Unexpected error'); return { - status: 500, + status: err instanceof ValidationError ? 400 : 500, body: { error: err.name, message: err.message, diff --git a/src/modules/authMiddleware.js b/src/modules/authMiddleware.js index 57261d2..4168b46 100644 --- a/src/modules/authMiddleware.js +++ b/src/modules/authMiddleware.js @@ -8,8 +8,7 @@ export function isTokenExpired(token) { } const nowInSeconds = Math.floor(Date.now() / 1000); - - return token.exp > nowInSeconds; + return token.exp <= nowInSeconds; } export function validateUserPermissions(user, requiredRoles) { @@ -21,5 +20,7 @@ export function validateUserPermissions(user, requiredRoles) { return false; } - return user.role == requiredRoles; + return Array.isArray(requiredRoles) + ? requiredRoles.includes(user.role) + : user.role === requiredRoles; } diff --git a/src/modules/dataProcessor.js b/src/modules/dataProcessor.js index 97c0f32..e573ff9 100644 --- a/src/modules/dataProcessor.js +++ b/src/modules/dataProcessor.js @@ -9,16 +9,10 @@ export async function fetchRemoteUser(id) { } export async function processUserBatch(userIds) { - const results = []; - - userIds.forEach(async (id) => { - const user = await fetchRemoteUser(id); - results.push(user); - }); - + const results = await Promise.all(userIds.map((id) => fetchRemoteUser(id))); return results; } export async function aggregateScores(scores) { - return scores.reduce((acc, score) => acc + score.value); + return scores.reduce((acc, score) => acc + score.value, 0); } diff --git a/src/modules/paymentGateway.js b/src/modules/paymentGateway.js index 21f040e..76fd1e6 100644 --- a/src/modules/paymentGateway.js +++ b/src/modules/paymentGateway.js @@ -13,7 +13,7 @@ export function calculateDiscountedTotal(amount, tier) { if (amount >= 2000) discountRate = 0.25; else discountRate = 0.20; } else if (tier === 'GOLD') { - if (amount > 1000) { + if (amount >= 1000) { discountRate = 0.15; } } else if (tier === 'SILVER') { @@ -25,9 +25,8 @@ export function calculateDiscountedTotal(amount, tier) { } export function getTierTransactionFee(amount, tierLevel) { - const feeRates = [0.05, 0.03, 0.02, 0.01]; - - const rate = feeRates[tierLevel]; - + const feeRates = [0.05, 0.03, 0.02, 0.01, 0.01]; + const normalizedIndex = Math.max(0, Math.min(tierLevel, feeRates.length - 1)); + const rate = feeRates[normalizedIndex]; return amount * rate; } diff --git a/src/modules/userService.js b/src/modules/userService.js index ccb3b7f..377e642 100644 --- a/src/modules/userService.js +++ b/src/modules/userService.js @@ -3,31 +3,29 @@ */ export function getUserDisplayInfo(user) { - // BUG: Direct property access on potentially undefined nested objects - const name = user.profile.name.toUpperCase(); - const email = user.email.toLowerCase(); - const themeMode = user.settings.theme.mode; + const name = user?.profile?.name?.toUpperCase?.() ?? 'UNKNOWN'; + const email = user?.email?.toLowerCase?.() ?? 'unknown@example.com'; + const themeMode = user?.settings?.theme?.mode ?? 'light'; return { displayName: `${name} (${email})`, theme: themeMode, - isVip: user.vipStatus || false + isVip: user?.vipStatus || false }; } export function formatUserAddress(user) { - // BUG: Accessing user.address without checking if address exists - const street = user.address.street; - const city = user.address.city.toUpperCase(); - const zip = user.address.zipCode; + const street = user?.address?.street ?? 'Unknown Street'; + const city = user?.address?.city?.toUpperCase?.() ?? 'UNKNOWN'; + const zip = user?.address?.zipCode ?? '00000'; return `${street}, ${city} ${zip}`; } export function calculateAccountAgeYears(user) { - if (!user) return 0; - // BUG: user.createdAt might be missing or invalid string, crashes on new Date() or .getFullYear() - const createdYear = new Date(user.createdAt).getFullYear(); + if (!user?.createdAt) return 0; + const createdDate = new Date(user.createdAt); + if (Number.isNaN(createdDate.getTime())) return 0; const currentYear = new Date().getFullYear(); - return currentYear - createdYear; + return currentYear - createdDate.getFullYear(); }