From 158f7363c63cbba430a690daccdb5c0a4e28c166 Mon Sep 17 00:00:00 2001 From: Strelnikova_D_A Date: Thu, 19 Mar 2026 23:25:06 +0300 Subject: [PATCH 1/8] Extract row mapping into mapRow function to remove duplication (Clean Code: DRY) --- node/funding_raised.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/node/funding_raised.js b/node/funding_raised.js index 4a9d319..dab4ec4 100755 --- a/node/funding_raised.js +++ b/node/funding_raised.js @@ -2,6 +2,21 @@ const parseCsvSync = require('csv-parse/lib/sync'); const fs = require('fs'); const path = require('path'); +function mapRow(row) { + return { + permalink: row[0], + company_name: row[1], + number_employees: row[2], + category: row[3], + city: row[4], + state: row[5], + funded_date: row[6], + raised_amount: row[7], + raised_currency: row[8], + round: row[9], + }; +} + class FundingRaised { static where(options = {}) { const funding_file = 'startup_funding.csv'; @@ -27,18 +42,7 @@ class FundingRaised { } csv_data.forEach((row) => { - const mapped = {}; - mapped.permalink = row[0]; - mapped.company_name = row[1]; - mapped.number_employees = row[2]; - mapped.category = row[3]; - mapped.city = row[4]; - mapped.state = row[5]; - mapped.funded_date = row[6]; - mapped.raised_amount = row[7]; - mapped.raised_currency = row[8]; - mapped.round = row[9]; - funding_data.push(mapped); + funding_data.push(mapRow(row)); }); return funding_data; From af34ad2a20e37695a274d2ebe301e64eca3dbec8 Mon Sep 17 00:00:00 2001 From: Strelnikova_D_A Date: Thu, 19 Mar 2026 23:39:54 +0300 Subject: [PATCH 2/8] Extract filtering logic into applyFilters to reduce complexity (Clean Code: SRP & readability) --- node/funding_raised.js | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/node/funding_raised.js b/node/funding_raised.js index dab4ec4..ecf5e35 100755 --- a/node/funding_raised.js +++ b/node/funding_raised.js @@ -25,22 +25,19 @@ class FundingRaised { const funding_data = []; - if (options.company_name) { - csv_data = csv_data.filter(row => options.company_name == row[1]); - } - - if (options.city) { - csv_data = csv_data.filter(row => options.city == row[4]); - } - - if (options.state) { - csv_data = csv_data.filter(row => options.state == row[5]); - } - - if (options.round) { - csv_data = csv_data.filter(row => options.round == row[9]); + function applyFilters(data, options) { + return data.filter((row) => { + if (options.company_name && options.company_name !== row[1]) + return false; + if (options.city && options.city !== row[4]) return false; + if (options.state && options.state !== row[5]) return false; + if (options.round && options.round !== row[9]) return false; + return true; + }); } + csv_data = applyFilters(csv_data, options); + csv_data.forEach((row) => { funding_data.push(mapRow(row)); }); From 95989aa713a73f8bd4fb1f077e61168426dcd297 Mon Sep 17 00:00:00 2001 From: Strelnikova_D_A Date: Thu, 19 Mar 2026 23:53:37 +0300 Subject: [PATCH 3/8] Refactor: extract mapRow function (Clean Code: DRY) --- node/funding_raised.js | 52 ++++-------------------------------------- 1 file changed, 4 insertions(+), 48 deletions(-) diff --git a/node/funding_raised.js b/node/funding_raised.js index ecf5e35..85b8d31 100755 --- a/node/funding_raised.js +++ b/node/funding_raised.js @@ -53,69 +53,25 @@ class FundingRaised { if (options.company_name) { csv_data = csv_data.filter(row => options.company_name == row[1]); const row = csv_data[0]; - const mapped = {}; - mapped.permalink = row[0]; - mapped.company_name = row[1]; - mapped.number_employees = row[2]; - mapped.category = row[3]; - mapped.city = row[4]; - mapped.state = row[5]; - mapped.funded_date = row[6]; - mapped.raised_amount = row[7]; - mapped.raised_currency = row[8]; - mapped.round = row[9]; - return mapped; + return mapRow(row); } if (options.city) { csv_data = csv_data.filter(row => options.city == row[4]); const row = csv_data[0]; - const mapped = {}; - mapped.permalink = row[0]; - mapped.company_name = row[1]; - mapped.number_employees = row[2]; - mapped.category = row[3]; - mapped.city = row[4]; - mapped.state = row[5]; - mapped.funded_date = row[6]; - mapped.raised_amount = row[7]; - mapped.raised_currency = row[8]; - mapped.round = row[9]; - return mapped; + return mapRow(row); } if (options.state) { csv_data = csv_data.filter(row => options.state == row[5]); const row = csv_data[0]; - const mapped = {}; - mapped.permalink = row[0]; - mapped.company_name = row[1]; - mapped.number_employees = row[2]; - mapped.category = row[3]; - mapped.city = row[4]; - mapped.state = row[5]; - mapped.funded_date = row[6]; - mapped.raised_amount = row[7]; - mapped.raised_currency = row[8]; - mapped.round = row[9]; - return mapped; + return mapRow(row); } if (options.round) { csv_data = csv_data.filter(row => options.round == row[9]); const row = csv_data[0]; - const mapped = {}; - mapped.permalink = row[0]; - mapped.company_name = row[1]; - mapped.number_employees = row[2]; - mapped.category = row[3]; - mapped.city = row[4]; - mapped.state = row[5]; - mapped.funded_date = row[6]; - mapped.raised_amount = row[7]; - mapped.raised_currency = row[8]; - mapped.round = row[9]; - return mapped; + return mapRow(row); } } } From d0ac92b1aa2113ffa9aa5804aee5e486ceab457a Mon Sep 17 00:00:00 2001 From: Strelnikova_D_A Date: Fri, 20 Mar 2026 00:12:10 +0300 Subject: [PATCH 4/8] Refactor: extract applyFilters function (Clean Code: SRP, reusable) --- node/funding_raised.js | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/node/funding_raised.js b/node/funding_raised.js index 85b8d31..6da5ea1 100755 --- a/node/funding_raised.js +++ b/node/funding_raised.js @@ -17,6 +17,16 @@ function mapRow(row) { }; } +function applyFilters(data, options) { + return data.filter((row) => { + if (options.company_name && options.company_name !== row[1]) return false; + if (options.city && options.city !== row[4]) return false; + if (options.state && options.state !== row[5]) return false; + if (options.round && options.round !== row[9]) return false; + return true; + }); +} + class FundingRaised { static where(options = {}) { const funding_file = 'startup_funding.csv'; @@ -25,17 +35,6 @@ class FundingRaised { const funding_data = []; - function applyFilters(data, options) { - return data.filter((row) => { - if (options.company_name && options.company_name !== row[1]) - return false; - if (options.city && options.city !== row[4]) return false; - if (options.state && options.state !== row[5]) return false; - if (options.round && options.round !== row[9]) return false; - return true; - }); - } - csv_data = applyFilters(csv_data, options); csv_data.forEach((row) => { From 2d808ae6dbd193d8bb60fbb6142f437952fcc338 Mon Sep 17 00:00:00 2001 From: Strelnikova_D_A Date: Fri, 20 Mar 2026 00:16:17 +0300 Subject: [PATCH 5/8] Refactor: extract applyFilters function (Clean Code: SRP, reusable) --- node/funding_raised.js | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/node/funding_raised.js b/node/funding_raised.js index 6da5ea1..b2b2121 100755 --- a/node/funding_raised.js +++ b/node/funding_raised.js @@ -47,31 +47,10 @@ class FundingRaised { static findBy(options = {}) { const funding_file = 'startup_funding.csv'; const file_data = fs.readFileSync(path.join(__dirname, '..', funding_file)).toString(); - let csv_data = parseCsvSync(file_data); - - if (options.company_name) { - csv_data = csv_data.filter(row => options.company_name == row[1]); - const row = csv_data[0]; - return mapRow(row); - } - - if (options.city) { - csv_data = csv_data.filter(row => options.city == row[4]); - const row = csv_data[0]; - return mapRow(row); - } - - if (options.state) { - csv_data = csv_data.filter(row => options.state == row[5]); - const row = csv_data[0]; - return mapRow(row); - } - - if (options.round) { - csv_data = csv_data.filter(row => options.round == row[9]); - const row = csv_data[0]; - return mapRow(row); - } + const csv_data = applyFilters(parseCsvSync(file_data), options); + + const row = csv_data[0]; + return row ? mapRow(row) : null; } } From f8ababec669ed65c3658e462c600c71ee65a8d0f Mon Sep 17 00:00:00 2001 From: Strelnikova_D_A Date: Fri, 20 Mar 2026 00:19:26 +0300 Subject: [PATCH 6/8] Refactor: extract mapRow function (Clean Code: DRY) --- node/funding_raised.js | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/node/funding_raised.js b/node/funding_raised.js index b2b2121..96b161c 100755 --- a/node/funding_raised.js +++ b/node/funding_raised.js @@ -28,27 +28,19 @@ function applyFilters(data, options) { } class FundingRaised { - static where(options = {}) { + static loadData() { const funding_file = 'startup_funding.csv'; const file_data = fs.readFileSync(path.join(__dirname, '..', funding_file)).toString(); - let csv_data = parseCsvSync(file_data); - - const funding_data = []; - - csv_data = applyFilters(csv_data, options); - - csv_data.forEach((row) => { - funding_data.push(mapRow(row)); - }); + return parseCsvSync(file_data); + } - return funding_data; + static where(options = {}) { + const csv_data = applyFilters(this.loadData(), options); + return csv_data.map(mapRow); } static findBy(options = {}) { - const funding_file = 'startup_funding.csv'; - const file_data = fs.readFileSync(path.join(__dirname, '..', funding_file)).toString(); - const csv_data = applyFilters(parseCsvSync(file_data), options); - + const csv_data = applyFilters(this.loadData(), options); const row = csv_data[0]; return row ? mapRow(row) : null; } From 605fb715e63dc2a9ed893885b87f05b0245ecf73 Mon Sep 17 00:00:00 2001 From: Strelnikova_D_A Date: Fri, 20 Mar 2026 00:22:42 +0300 Subject: [PATCH 7/8] Refactor: replace magic numbers with COLUMNS constants (Clean Code: self-documenting code) --- node/funding_raised.js | 43 +++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/node/funding_raised.js b/node/funding_raised.js index 96b161c..7ad3811 100755 --- a/node/funding_raised.js +++ b/node/funding_raised.js @@ -2,27 +2,40 @@ const parseCsvSync = require('csv-parse/lib/sync'); const fs = require('fs'); const path = require('path'); +const COLUMNS = Object.freeze({ + PERMALINK: 0, + COMPANY_NAME: 1, + NUMBER_EMPLOYEES: 2, + CATEGORY: 3, + CITY: 4, + STATE: 5, + FUNDED_DATE: 6, + RAISED_AMOUNT: 7, + RAISED_CURRENCY: 8, + ROUND: 9, +}); + function mapRow(row) { return { - permalink: row[0], - company_name: row[1], - number_employees: row[2], - category: row[3], - city: row[4], - state: row[5], - funded_date: row[6], - raised_amount: row[7], - raised_currency: row[8], - round: row[9], + permalink: row[COLUMNS.PERMALINK], + company_name: row[COLUMNS.COMPANY_NAME], + number_employees: row[COLUMNS.NUMBER_EMPLOYEES], + category: row[COLUMNS.CATEGORY], + city: row[COLUMNS.CITY], + state: row[COLUMNS.STATE], + funded_date: row[COLUMNS.FUNDED_DATE], + raised_amount: row[COLUMNS.RAISED_AMOUNT], + raised_currency: row[COLUMNS.RAISED_CURRENCY], + round: row[COLUMNS.ROUND], }; } function applyFilters(data, options) { - return data.filter((row) => { - if (options.company_name && options.company_name !== row[1]) return false; - if (options.city && options.city !== row[4]) return false; - if (options.state && options.state !== row[5]) return false; - if (options.round && options.round !== row[9]) return false; + return data.filter(row => { + if (options.company_name && options.company_name !== row[COLUMNS.COMPANY_NAME]) return false; + if (options.city && options.city !== row[COLUMNS.CITY]) return false; + if (options.state && options.state !== row[COLUMNS.STATE]) return false; + if (options.round && options.round !== row[COLUMNS.ROUND]) return false; return true; }); } From 33c4f76b620cda0bed5457cd4e9d62b83cc82c1f Mon Sep 17 00:00:00 2001 From: Strelnikova_D_A Date: Fri, 20 Mar 2026 00:32:40 +0300 Subject: [PATCH 8/8] Refactor: extract CSV filename to constant FUNDING_FILE (Clean Code maintainability) --- node/funding_raised.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/node/funding_raised.js b/node/funding_raised.js index 7ad3811..467af04 100755 --- a/node/funding_raised.js +++ b/node/funding_raised.js @@ -1,6 +1,7 @@ const parseCsvSync = require('csv-parse/lib/sync'); const fs = require('fs'); const path = require('path'); +const FUNDING_FILE = 'startup_funding.csv'; const COLUMNS = Object.freeze({ PERMALINK: 0, @@ -42,7 +43,7 @@ function applyFilters(data, options) { class FundingRaised { static loadData() { - const funding_file = 'startup_funding.csv'; + const funding_file = FUNDING_FILE; const file_data = fs.readFileSync(path.join(__dirname, '..', funding_file)).toString(); return parseCsvSync(file_data); }