@@ -2,53 +2,26 @@ const Table = require('cli-table3');
22const axios = require ( 'axios' ) ;
33const _ = require ( 'lodash' ) ;
44const chalk = require ( 'chalk' ) ;
5- const emojiFlags = require ( 'emoji-flags' ) ;
6- const h = require ( 'humanize-number' ) ;
5+ const helpers = require ( './helpers' ) ;
6+ const {
7+ getCountry,
8+ getConfirmed,
9+ getActive,
10+ getDeaths,
11+ getRecovered,
12+ getMortalityPer,
13+ getRecoveredPer,
14+ getEmoji,
15+ calActive,
16+ calMortalityPer,
17+ calRecoveredPer,
18+ getOneDayChange,
19+ getOneWeekChange,
20+ getRateOfGrowth,
21+ getTotalStats,
22+ } = require ( './helpers' ) ;
723
8- function getConfirmed ( confirmed ) {
9- return {
10- content : chalk . blueBright ( h ( confirmed ) ) ,
11- hAlign : 'right' ,
12- } ;
13- }
1424
15- function getRecoverd ( recovered ) {
16- return {
17- content : chalk . yellowBright ( h ( recovered ) ) ,
18- hAlign : 'right' ,
19- } ;
20- }
21-
22- function getDeaths ( deaths ) {
23- return {
24- content : chalk . grey ( h ( deaths ) ) ,
25- hAlign : 'right' ,
26- }
27- }
28-
29- function getActive ( confirmed , recovered , deaths ) {
30- return {
31- content : h ( confirmed - recovered - deaths ) ,
32- hAlign : 'right'
33- }
34- }
35-
36- function getMortalityRate ( deaths , confirmed , average = null ) {
37- const mortalityRate = ( ( deaths / confirmed ) * 100 ) . toFixed ( 2 ) ;
38- return chalk . redBright ( mortalityRate ) ;
39- }
40-
41- function getRecoveredRate ( recovered , confirmed , average = null ) {
42- const recoveredRate = ( ( recovered / confirmed ) * 100 ) . toFixed ( 2 ) ;
43- return chalk . greenBright ( recoveredRate ) ;
44- }
45-
46- function getEmoji ( countryCode ) {
47- if ( countryCode && emojiFlags . countryCode ( countryCode ) ) {
48- return emojiFlags . countryCode ( countryCode ) . emoji ;
49- }
50- return '' ;
51- }
5225
5326function getDataByCountry ( confirmed , deaths , recovered ) {
5427 const countryMap = { } ;
@@ -66,17 +39,48 @@ function getDataByCountry(confirmed, deaths, recovered) {
6639 confirmed : confirmedMap [ mapKey ] . latest ,
6740 recovered : recoveredMap [ mapKey ] . latest ,
6841 deaths : deathsMap [ mapKey ] . latest ,
42+ confirmedByDay : helpers . historyObjToArr ( confirmedMap [ mapKey ] . history ) ,
43+ recoveredByDay : helpers . historyObjToArr ( recoveredMap [ mapKey ] . history ) ,
44+ deathsByDay : helpers . historyObjToArr ( recoveredMap [ mapKey ] . history ) ,
6945 } ;
7046 } else {
7147 countryMap [ countryName ] . confirmed += confirmedMap [ mapKey ] . latest ;
7248 countryMap [ countryName ] . recovered += recoveredMap [ mapKey ] . latest ;
7349 countryMap [ countryName ] . deaths += deathsMap [ mapKey ] . latest ;
50+ countryMap [ countryName ] . confirmedByDay = helpers . addArr (
51+ countryMap [ countryName ] . confirmedByDay ,
52+ helpers . historyObjToArr ( confirmedMap [ mapKey ] . history )
53+ ) ;
54+ countryMap [ countryName ] . recoveredByDay = helpers . addArr (
55+ countryMap [ countryName ] . recoveredByDay ,
56+ helpers . historyObjToArr ( recoveredMap [ mapKey ] . history )
57+ ) ;
58+ countryMap [ countryName ] . deathsByDay = helpers . addArr (
59+ countryMap [ countryName ] . deathsByDay ,
60+ helpers . historyObjToArr ( deathsMap [ mapKey ] . history )
61+ ) ;
7462 }
7563 } ) ;
76- const countryArr = Object . keys ( countryMap ) . map ( key => countryMap [ key ] ) ;
64+ const countryArr = extraStats (
65+ Object . keys ( countryMap ) . map ( key => countryMap [ key ] )
66+ ) ;
7767 return _ . sortBy ( countryArr , ( o ) => - o . confirmed )
7868}
7969
70+ function getDateByState ( confirmed , deaths , recovered ) {
71+
72+ }
73+
74+ function extraStats ( dataArr ) {
75+ return dataArr . map ( obj => Object . assign ( { } , obj ,
76+ {
77+ active : calActive ( obj ) ,
78+ mortalityPer : calMortalityPer ( obj ) ,
79+ recoveredPer : calRecoveredPer ( obj ) ,
80+ } )
81+ ) ;
82+ }
83+
8084exports . getCompleteTable = async ( ) => {
8185 const head = [
8286 '' ,
@@ -87,41 +91,51 @@ exports.getCompleteTable = async () => {
8791 'Active 😷' ,
8892 'Mortality %' ,
8993 'Recovered %' ,
90- 'Flag 🏳'
94+ '1 Day 🔺' ,
95+ '1 Week 🔺' ,
96+ // 'RoG',
97+ '🏳' ,
9198 ] ;
9299 const table = new Table ( {
93100 head,
94101 chars : { 'top' : '═' , 'top-mid' : '╤' , 'top-left' : '╔' , 'top-right' : '╗'
95102 , 'bottom' : '═' , 'bottom-mid' : '╧' , 'bottom-left' : '╚' , 'bottom-right' : '╝'
96103 , 'left' : '║' , 'left-mid' : '╟' , 'mid' : '─' , 'mid-mid' : '┼'
97- , 'right' : '║' , 'right-mid' : '╢' , 'middle' : '│' }
104+ , 'right' : ' ║' , 'right-mid' : '╢' , 'middle' : '│' }
98105 } ) ;
99106 const result = await axios ( 'https://coronavirus-tracker-api.herokuapp.com/all' ) ;
100107 const { latest, confirmed, deaths, recovered } = result . data ;
101108 const countryData = getDataByCountry ( confirmed , deaths , recovered )
109+ const worldStats = getTotalStats ( countryData ) ;
102110 table . push ( {
103111 '' : [
104112 'World' ,
105- getConfirmed ( latest . confirmed ) ,
106- getRecoverd ( latest . recovered ) ,
107- getDeaths ( latest . deaths ) ,
108- getActive ( latest . confirmed , latest . recovered , latest . deaths ) ,
109- getMortalityRate ( latest . deaths , latest . confirmed ) ,
110- getRecoveredRate ( latest . recovered , latest . confirmed ) ,
113+ getConfirmed ( worldStats . confirmed ) ,
114+ getRecovered ( worldStats . recovered ) ,
115+ getDeaths ( worldStats . deaths ) ,
116+ getActive ( worldStats . active ) ,
117+ getMortalityPer ( worldStats . mortalityPer ) ,
118+ getRecoveredPer ( worldStats . recoveredPer ) ,
119+ getOneDayChange ( worldStats ) ,
120+ getOneWeekChange ( worldStats ) ,
121+ // '',
111122 '🌎'
112123 ]
113124 } )
114125 let rank = 1 ;
115126 countryData . forEach ( cd => {
116127 const countryEmoji = getEmoji ( cd . countryCode ) ;
117128 const values = [
118- chalk . cyanBright ( cd . country ) ,
129+ getCountry ( cd . country ) ,
119130 getConfirmed ( cd . confirmed ) ,
120- getRecoverd ( cd . recovered ) ,
131+ getRecovered ( cd . recovered ) ,
121132 getDeaths ( cd . deaths ) ,
122133 getActive ( cd . confirmed , cd . recovered , cd . deaths ) ,
123- getMortalityRate ( cd . deaths , cd . confirmed ) ,
124- getRecoveredRate ( cd . deaths , cd . confirmed ) ,
134+ getMortalityPer ( cd . mortalityPer ) ,
135+ getRecoveredPer ( cd . recoveredPer ) ,
136+ getOneDayChange ( cd ) ,
137+ getOneWeekChange ( cd ) ,
138+ // getRateOfGrowth(cd),
125139 getEmoji ( cd . countryCode ) ,
126140 ]
127141 table . push ( { [ rank ++ ] : values } )
0 commit comments