-
Notifications
You must be signed in to change notification settings - Fork 0
/
tabulateSlots.js
127 lines (118 loc) · 4.1 KB
/
tabulateSlots.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
var {statesRaw} = require('./states.js')
var {districtsRaw} = require('./districts.js')
var {slotsRaw} = require('./slots.js')
const {writeFile} = require("fs");
var states = statesRaw.states
var districts = districtsRaw.reduce((districts, districtRaw, i) => {
return districts.concat(districtRaw.districts.map(district => Object.assign(district, {state_id: i+1})))
}, [])
function getIdx(objArr, key){
return objArr.reduce((idx, e) => {
idx[e[key]] = e
return idx
}, Object.create(null))
}
var statesIdx = getIdx(states, "state_id")
var districtsIdx = getIdx(districts, "district_id")
var slots = [['query_date', 'query_timestamp', 'query_state_id', 'query_state_name', 'query_district_id', 'query_district_name', 'center_id',
'name','address', 'state_name','district_name', 'block_name', 'pincode', 'from',
'to', 'lat', 'long', 'fee_type', 'session_id', 'date', 'available_capacity',
'available_capacity_dose1', 'available_capacity_dose2', 'fee', 'allow_all_age', 'min_age_limit',
'max_age_limit', 'vaccine', 'slots']]
for(let i = 0; i < slotsRaw.length; i++){
let districtSlotsRaw = slotsRaw[i]
let {api, district_id, date, timestamp} = districtSlotsRaw.params
let district = districtsIdx[district_id]
let state = statesIdx[district.state_id]
if(api === "findByDistrict"){
let sessions = districtSlotsRaw.result.sessions
let districtSlots
if(sessions.length > 0){
districtSlots = sessions.map(session => ([
date,
timestamp,
state.state_id,
state.state_name,
district_id,
district.district_name,
session.center_id,
session.name,
session.address,
session.state_name,
session.district_name,
session.block_name,
session.pincode,
session.from,
session.to,
session.lat,
session.long,
session.fee_type,
session.session_id,
session.date,
session.available_capacity,
session.available_capacity_dose1,
session.available_capacity_dose2,
session.fee,
session.allow_all_age || "",
session.min_age_limit,
session.max_age_limit || "",
session.vaccine,
session.slots.join("|")
]))
districtSlots.forEach(districtSlot => {
slots.push(districtSlot)
})
}
}
else if(api === "calendarByDistrict")
{
let centers = districtSlotsRaw.result.centers
let districtSlots = []
if(centers.length > 0){
centers.forEach(center => {
center.sessions.forEach(session => {
districtSlots.push([
date,
timestamp,
state.state_id,
state.state_name,
district_id,
district.district_name,
center.center_id,
center.name,
center.address,
center.state_name,
center.district_name,
center.block_name,
center.pincode,
center.from,
center.to,
center.lat,
center.long,
center.fee_type,
session.session_id,
session.date,
session.available_capacity,
session.available_capacity_dose1,
session.available_capacity_dose2,
session.fee || "",
session.allow_all_age || "",
session.min_age_limit,
session.max_age_limit || "",
session.vaccine,
session.slots.join("|")
])
})
})
districtSlots.forEach(districtSlot => {
slots.push(districtSlot)
})
}
}
}
var slotsStr = slots.map(slot => slot.map(f => (typeof f === "string" ? f.replace(/,/g, " ") : f))
.join(",")).join("\n")
writeFile("slots.csv", slotsStr, err => {
if (err) console.log(`Failed to write file: ${err}`);
else console.log("File written.");
});