From a02a190365b58eda8d91cf97b0d5de1945b15df6 Mon Sep 17 00:00:00 2001 From: Rakib Ansary Date: Fri, 14 Apr 2023 13:32:45 +0600 Subject: [PATCH 1/3] fix: winner prize mismatch (plat-2732) Signed-off-by: Rakib Ansary --- package.json | 1 + src/common/challenge-helper.js | 14 +++++++++++--- yarn.lock | 5 +++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 7bb22c6c..c6cdb098 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "body-parser": "^1.15.1", "config": "^3.0.1", "cors": "^2.7.1", + "decimal.js": "^10.4.3", "deep-equal": "^2.2.0", "dotenv": "^8.2.0", "elasticsearch": "^16.7.3", diff --git a/src/common/challenge-helper.js b/src/common/challenge-helper.js index ce13b8f3..7ee93a08 100644 --- a/src/common/challenge-helper.js +++ b/src/common/challenge-helper.js @@ -8,6 +8,7 @@ const config = require("config"); const helper = require("./helper"); const constants = require("../../app-constants"); const axios = require("axios"); +const Decimal = require("decimal.js"); const { getM2MToken } = require("./m2m-helper"); const { hasAdminRole } = require("./role-helper"); const { ensureAcessibilityToModifiedGroups } = require("./group-helper"); @@ -350,7 +351,10 @@ class ChallengeHelper { convertPrizeSetValuesToCents(prizeSets) { prizeSets.forEach((prizeSet) => { prizeSet.prizes.forEach((prize) => { - prize.amountInCents = prize.value * 100; + prize.amountInCents = new Decimal(prize.value) + .mul(100) + .round(0, Decimal.ROUND_DOWN) + .toNumber(); delete prize.value; }); }); @@ -360,13 +364,17 @@ class ChallengeHelper { prizeSets.forEach((prizeSet) => { prizeSet.prizes.forEach((prize) => { if (prize.amountInCents != null) { - prize.value = prize.amountInCents / 100; + prize.value = parseFloat(new Decimal(prize.amountInCents).div(100).toFixed(2)); + delete prize.amountInCents; } }); }); if (overview && !_.isUndefined(overview.totalPrizesInCents)) { - overview.totalPrizes = overview.totalPrizesInCents / 100; + overview.totalPrizes = parseFloat( + new Decimal(overview.totalPrizesInCents).div(100).toFixed(2) + ); + delete overview.totalPrizesInCents; } } diff --git a/yarn.lock b/yarn.lock index 7d7fd30d..c2a451ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1058,6 +1058,11 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + deep-eql@^4.1.2: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" From 2674f81e115f9647eb177768406a7f7e5db78ffa Mon Sep 17 00:00:00 2001 From: Rakib Ansary Date: Fri, 14 Apr 2023 13:33:41 +0600 Subject: [PATCH 2/3] ci: deploy to dev Signed-off-by: Rakib Ansary --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b2b4a25a..5e41ee80 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -83,7 +83,7 @@ workflows: branches: only: - dev - - fix/search + - fix/floating-point-arhithmetic - "build-qa": context: org-global From 84f4c0022f4b51e8052dbb71b9986f4947bcbc65 Mon Sep 17 00:00:00 2001 From: Rakib Ansary Date: Fri, 14 Apr 2023 14:11:26 +0600 Subject: [PATCH 3/3] fix: remove unnecessary rounding Signed-off-by: Rakib Ansary --- src/common/challenge-helper.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/common/challenge-helper.js b/src/common/challenge-helper.js index 7ee93a08..a7372149 100644 --- a/src/common/challenge-helper.js +++ b/src/common/challenge-helper.js @@ -351,10 +351,7 @@ class ChallengeHelper { convertPrizeSetValuesToCents(prizeSets) { prizeSets.forEach((prizeSet) => { prizeSet.prizes.forEach((prize) => { - prize.amountInCents = new Decimal(prize.value) - .mul(100) - .round(0, Decimal.ROUND_DOWN) - .toNumber(); + prize.amountInCents = new Decimal(prize.value).mul(100).toNumber(); delete prize.value; }); });