UNPKG

@dynamic-data/fitbit-mockups

Version:
1,037 lines (947 loc) 27.6 kB
import { toIsoString, getRandomInt, getNewDate, getSleepDate, } from "@dynamic-data/utils"; import MOCK from "@dynamic-data/fitbit-data"; //https://dev.fitbit.com/build/reference/web-api/activity/get-activity-log-list/ const ActivitiesDataModel = { activeDuration: () => { return getRandomInt(30000, 3600000); // return 0; }, //https://math.stackexchange.com/questions/1276206/method-of-generating-random-numbers-that-sum-to-100-is-this-truly-random activityLevel: (max) => { let n1 = null; let n2 = null; let n3 = null; n1 = getRandomInt(1, 103); while (n2 === null || n2 === n1) { n2 = getRandomInt(1, 103); } while (n3 === null || n3 === n1 || n3 === n2) { n3 = getRandomInt(1, 103); } let ordered = [Math.max(n1, n2, n3), Math.min(n1, n2, n3)] if (!ordered.includes(n1)) { ordered.push(n1); } else if (!ordered.includes(n2)) { ordered.push(n2); } else { ordered.push(n3); } let a = (ordered[1] - 1) / 100; let b = (ordered[2] - ordered[1] - 1) / 100; let c = (ordered[0] - ordered[2] - 1) / 100; let d = (103 - ordered[0]) / 100; return [ { minutes: Math.round((a * max) / 60000), name: "sedentary", }, { minutes: Math.round((b * max) / 60000), name: "lightly", }, { minutes: Math.round((c * max) / 60000), name: "fairly", }, { minutes: Math.round((d * max) / 60000), name: "very", }, ]; }, activityName: () => { const example = ["Walk", "Run", "Swimming", "Cycling"] return example[getRandomInt(0, example.length - 1)]; }, activityTypeId: () => { return getRandomInt(8000, 9999) }, averageHeartRate: () => { function randomG(v) { var r = 0; for (var i = v; i > 0; i--) { r += getRandomInt(80, 180); } return r / v; } return Math.round(randomG(6)); }, calories: () => { return getRandomInt(0, 2000) }, caloriesLink: (time, duration) => { let date = time.split("T")[0] // let timeEdit = time.split("T")[1].split(":")[0] + ":" + time.split("T")[1].split(":")[1] let timeEdit = new Date(0); timeEdit.setHours(time.split("T")[1].split(":")[0]) timeEdit.setMinutes(time.split("T")[1].split(":")[1]) timeEdit.setSeconds(parseInt(time.split("T")[1].split(":")[2].split(".")[0]) + (duration / 1000)) return "https://api.fitbit.com/1/user/-/activities/calories/date/" + date + "/" + date + "/1min/time/" + time.split("T")[1].split(":")[0] + ":" + time.split("T")[1].split(":")[1] + "/" + timeEdit.getHours() + ":" + timeEdit.getMinutes() + ".json" }, heartRateLink: (time, duration) => { let date = time.split("T")[0] // let timeEdit = time.split("T")[1].split(":")[0] + ":" + time.split("T")[1].split(":")[1] let timeEdit = new Date(0); timeEdit.setHours(time.split("T")[1].split(":")[0]) timeEdit.setMinutes(time.split("T")[1].split(":")[1]) timeEdit.setSeconds(parseInt(time.split("T")[1].split(":")[2].split(".")[0]) + (duration / 1000)) return "https://api.fitbit.com/1/user/-/activities/heart/date/" + date + "/" + date + "/1sec/time/" + time.split("T")[1].split(":")[0] + ":" + time.split("T")[1].split(":")[1] + ":" + time.split("T")[1].split(":")[2].split(".")[0] + "/" + timeEdit.getHours() + ":" + timeEdit.getMinutes() + ":" + timeEdit.getSeconds() + ".json" }, activeZoneMinutes: (hasActiveZoneMinutes) => { if (hasActiveZoneMinutes) { let cardio = getRandomInt(0, 20) let fatBurn = getRandomInt(0, 20) let outOfZone = getRandomInt(0, 20) let peak = getRandomInt(0, 20) return { minutesInHeartRateZones: [ { minuteMultiplier: 2, minutes: cardio, order: 2, type: 'CARDIO', zoneName: 'Cardio' }, { minuteMultiplier: 1, minutes: fatBurn, order: 1, type: 'FAT_BURN', zoneName: 'Fat Burn' }, { minuteMultiplier: 0, minutes: outOfZone, order: 0, type: 'OUT_OF_ZONE', zoneName: 'Out of Range' }, { minuteMultiplier: 2, minutes: peak, order: 3, type: 'PEAK', zoneName: 'Peak' } ], totalMinutes: peak + outOfZone + fatBurn + cardio } } else { return {} } }, hasActiveZoneMinutes: () => { let x = getRandomInt(1, 2); switch (x) { case 1: return true; case 2: return false; } }, duration: (activeDuration) => { return activeDuration + getRandomInt(0, 3600000); // return 0; }, elevationGain: (type) => { if (["Swimming"].includes(type)) { return 0.0000; } else { return (getRandomInt(0, 100000) / 1000); } // return 0; }, originalStartTime: () => { let finalDate = new Date(0); let maxMonthDate = new Date(0); finalDate.setFullYear(getRandomInt(2020, 2050)); finalDate.setMonth(getRandomInt(0, 11)); finalDate.setDate(1) maxMonthDate = finalDate maxMonthDate.setMonth(maxMonthDate.getMonth() + 1); maxMonthDate.setDate(0) finalDate.setDate(getRandomInt(1, maxMonthDate.getDate())); finalDate.setHours(getRandomInt(1, 23), getRandomInt(1, 59), getRandomInt(1, 59), getRandomInt(1, 999)) const timezones = ["-12:00", "-11:00", "-10:00", "-9:30", "-9:00", "-08:00", "-07:00", "-06:00", "-05:00", "-04:00", "-03:30", "-03:00", "-02:00", "-01:00", "+00:00", "+01:00", "+02:00", "+03:00", "+03:30", "+04:00", "+04:30", "+05:00", "+05:30", "+05:45", "+06:00", "+06:30", "+07:00", "+08:00", "+08:45", "+09:00", "+09:30", "+10:00", "+10:30", "+11:00", "+12:00", "+12:45", "+13:00", "+14:00"] let finalDateStr = finalDate.toISOString(); return finalDateStr.split("Z")[0] + timezones[getRandomInt(0, timezones.length-1)]; // return 0; }, lastModified: (originalStartTime) => { let x; let timezone; // return x.toIsoString(); if (originalStartTime.includes("+")) { x = originalStartTime.split("+")[0]; timezone = "+" + originalStartTime.split("+")[1]; } else { x = originalStartTime.split("-")[0]; timezone = "-" + originalStartTime.split("-")[3]; } let date = new Date(x); //7 days date.setTime(date.getTime() + getRandomInt(1, 604800000)) return date.toISOString(); }, logType: () => { const values = ["auto_detected", "manual", "tracker", "mobile_run"] return values[getRandomInt(0, values.length - 1)] }, steps: (type, duration) => { // const example = ["Walk", "Run", "Swimming", "Cycling"] //https://www.verywellfit.com/pedometer-step-equivalents-for-exercises-and-activities-3435742 switch (type) { case "Walk": // 2200 every 20 minutes return Math.floor((2200) * (duration / 1200000)) case "Run": // 1600 every 10 minutes return Math.floor((1600) * (duration / 600000)) case "Swimming": // 138 every minute return Math.floor((138) * (duration / 60000)) case "Cycling": // 147 every minute return Math.floor((147) * (duration / 60000)) default: return getRandomInt(0, 9999) } }, tcxLink: (logID) => { return "https://api.fitbit.com/1/user/-/activities/" + logID + ".tcx" }, logType: () => { let values = ["mobile_run", "example_2", "example_3"] return values[getRandomInt(0, values.length - 1)] }, logId: () => { return getRandomInt(10000000000, 99999999999) }, manualValuesSpecified: () => { function trueOrFalse() { let x = getRandomInt(0, 1); switch (x) { case 0: return true; case 1: return false; } } return { calories: trueOrFalse(), distance: trueOrFalse(), steps: trueOrFalse() } }, } //https://dev.fitbit.com/build/reference/web-api/activity/get-daily-activity-summary/ const ActivitiesSummaryModel = { //Inspiration for data ranges: //https://community.fitbit.com/t5/Web-API-Development/Cannot-get-activities-from-Get-Daily-Activity-Summary/m-p/1548614#M6260 activeScore: () => { return getRandomInt(-1, 10) }, activityCalories: () => { return getRandomInt(1000, 2000) }, caloriesBMR: () => { let sex = getRandomInt(0, 1); switch (sex) { case 0: //Male return getRandomInt(1200, 2440); case 1: //Female return getRandomInt(1120, 1685); } }, caloriesOut: (heartRates) => { let calories = 0; heartRates.forEach(heartRate => { calories += heartRate.caloriesOut }) return Math.round(calories + getRandomInt(0, 100)); }, distances: () => { return { "total": getRandomInt(0, 1000) / 100, "tracker": getRandomInt(0, 1000) / 100, "loggedActivities": getRandomInt(0, 1000) / 100, "veryActive": getRandomInt(0, 1000) / 100, "moderatelyActive": getRandomInt(0, 1000) / 100, "lightlyActive": getRandomInt(0, 1000) / 100, "sedentaryActive": getRandomInt(0, 1000) / 100, } }, elevation: () => { return getRandomInt(0, 1000) / 100; }, fairlyActiveMinutes: () => { return getRandomInt(0, 1000); }, floors: () => { return getRandomInt(0, 20); }, heartRateZones: () => { let heartRate1 = getRandomInt(85, 100); let heartRate2 = getRandomInt(115, 125); let heartRate3 = getRandomInt(145, 155); let heartRate4 = getRandomInt(215, 225); let minutes1 = getRandomInt(800, 1000) let minutes2 = getRandomInt(400, 799) let minutes3 = getRandomInt(0, 399) let minutes4; if (minutes3 > 1) { minutes4 = getRandomInt(0, minutes3 - 1) } else { minutes4 = 0 } return [ { caloriesOut: minutes1 * (1200.33336 / 812), max: heartRate1, min: 30, minutes: minutes1, name: "Out of Range", }, { caloriesOut: minutes2 * (1409.4564 / 619), max: heartRate2, min: heartRate1, minutes: minutes2, name: "Fat Burn", }, { caloriesOut: minutes3 * (6.98904), max: heartRate3, min: heartRate2, minutes: minutes3, name: "Cardio", }, { caloriesOut: minutes3 * (10), max: heartRate4, min: heartRate3, minutes: minutes4, name: "Peak", }, ] }, lightlyActiveMinutes: () => { return getRandomInt(0, 250); }, marginalCalories: () => { return getRandomInt(0, 2000); }, restingHeartRate: () => { function randomG(v) { var r = 0; for (var i = v; i > 0; i--) { //https://i1.wp.com/agelessinvesting.com/wp-content/uploads/2018/10/What-is-a-good-resting-heart-rate-for-my-age.-resting-heart-rate-chart-by-age-min.png?fit=800%2C800&ssl=1 r += getRandomInt(49, 85); } return r / v; } return Math.floor(randomG(6)); }, sedentaryMinutes: () => { return getRandomInt(0, 1000); }, steps: () => { return getRandomInt(100, 30000); }, veryActiveMinutes: () => { return getRandomInt(0, 200); }, } const SleepSummaryModel = { deep: (sleepTime, lightTime, remTime) => { //Prevents issue where there is a difference of 1 from sleepTime and summation of minutes in each sleep type (deep, light, rem) when rounding var avg; var deepTime = sleepTime - lightTime - remTime; if (deepTime >= 10) { avg = deepTime + getRandomInt(-10, 10) } else { avg = deepTime + getRandomInt(-deepTime, 10) } return { count: getRandomInt(1, 20), minutes: deepTime, thirtyDayAvgMinutes: avg, } }, light: (timeSlept, percentage) => { var avg; var lightTime = Math.round(timeSlept * percentage); if (lightTime >= 10) { avg = lightTime + getRandomInt(-10, 10) } else { avg = lightTime + getRandomInt(-lightTime, 10) } return { count: getRandomInt(1, 20), minutes: lightTime, thirtyDayAvgMinutes: avg, } }, rem: (timeSlept, percentage) => { var avg; var remTime = Math.round(timeSlept * percentage); if (remTime >= 10) { avg = remTime + getRandomInt(-10, 10) } else { avg = remTime + getRandomInt(-remTime, 10) } return { count: getRandomInt(1, 20), minutes: remTime, thirtyDayAvgMinutes: avg, } }, wake: (minutesAwake) => { var avg; if (minutesAwake >= 10) { avg = minutesAwake + getRandomInt(-10, 10) } else { avg = minutesAwake + getRandomInt(-minutesAwake, 10) } return { count: getRandomInt(1, 20), minutes: minutesAwake, thirtyDayAvgMinutes: avg, } }, startTimeTS: (ddate) => { let finalDate = new Date(ddate); /* let finalDate = new Date(0); let maxMonthDate = new Date(0); finalDate.setFullYear(getRandomInt(2020, 2050)); finalDate.setMonth(getRandomInt(0, 11)); finalDate.setDate(1) maxMonthDate = finalDate maxMonthDate.setMonth(maxMonthDate.getMonth() + 1); maxMonthDate.setDate(0) finalDate.setDate(getRandomInt(1, maxMonthDate.getDate())); */ if (getRandomInt(1, 2) === 1) { finalDate.setHours(getRandomInt(20, 23), getRandomInt(1, 59), getRandomInt(1, 59), getRandomInt(1, 999)) } else { finalDate.setHours(getRandomInt(0, 2), getRandomInt(1, 59), getRandomInt(1, 59), getRandomInt(1, 999)) } return finalDate.getTime(); }, endTimeTS: (timestamp, timeInBed) => { let x = new Date(timestamp) x.setMinutes(x.getMinutes() + timeInBed); return x.getTime(); }, startTime: (timestamp) => { let x = new Date(timestamp) return x.toISOString(); }, endTime: (timestamp) => { let x = new Date(timestamp) return x.toISOString(); }, minutesAfterWakeup: () => { return getRandomInt(0, 30); }, minutesAsleep: () => { return getRandomInt(240, 600); }, minutesAwake: () => { return getRandomInt(1, 100); }, minutesToFallAsleep: () => { return getRandomInt(0, 30); }, } const HeartRateSummaryModel = { out_of_zone: () => { const calPerMin = 1960 / 1420; const minutes = getRandomInt(0, 2000); return { cals: Math.round(calPerMin * minutes), mins: minutes, } }, fat_burn: () => { const calPerMin = 156 / 20; const minutes = getRandomInt(0, 2000); return { cals: Math.round(calPerMin * minutes), mins: minutes, } }, cardio: () => { const calPerMin = 10; const minutes = getRandomInt(0, 2000); return { cals: Math.round(calPerMin * minutes), mins: minutes, } }, peak: () => { const calPerMin = 15; const minutes = getRandomInt(0, 2000); return { cals: Math.round(calPerMin * minutes), mins: minutes, } } } const SleepQualityModel = { p_timestamp: (date) => { let x = new Date(date) return x.getTime(); }, p_datetime: () => { let finalDate = new Date(0); let maxMonthDate = new Date(0); finalDate.setFullYear(getRandomInt(2020, 2050)); finalDate.setMonth(getRandomInt(0, 11)); finalDate.setDate(1) maxMonthDate = finalDate maxMonthDate.setMonth(maxMonthDate.getMonth() + 1); maxMonthDate.setDate(0) finalDate.setDate(getRandomInt(1, maxMonthDate.getDate())); finalDate.setHours(getRandomInt(1, 23), getRandomInt(1, 59), getRandomInt(1, 59), getRandomInt(1, 999)) return finalDate.toISOString(); }, p_value: () => { return getRandomInt(0, 100) }, p_level: () => { let values = ['wake', 'light', 'rem', 'deep'] return values[getRandomInt(0, values.length - 1)] } } const SleepDataModel = { p_timestamp: (date) => { let x = new Date(date) return x.getTime(); }, p_datetime: () => { let finalDate = new Date(0); let maxMonthDate = new Date(0); finalDate.setFullYear(getRandomInt(2020, 2050)); finalDate.setMonth(getRandomInt(0, 11)); finalDate.setDate(1) maxMonthDate = finalDate maxMonthDate.setMonth(maxMonthDate.getMonth() + 1); maxMonthDate.setDate(0) finalDate.setDate(getRandomInt(1, maxMonthDate.getDate())); finalDate.setHours(getRandomInt(1, 23), getRandomInt(1, 59), getRandomInt(1, 59), getRandomInt(1, 999)) return finalDate.toISOString(); }, p_level: () => { let values = ['wake', 'example2', 'example3'] return values[getRandomInt(0, values.length - 1)] }, p_seconds: () => { return getRandomInt(0, 600) }, } const HeartRateDataModel = { p_date: () => { let finalDate = new Date(0); let maxMonthDate = new Date(0); finalDate.setFullYear(getRandomInt(2020, 2050)); finalDate.setMonth(getRandomInt(0, 11)); finalDate.setDate(1) maxMonthDate = finalDate maxMonthDate.setMonth(maxMonthDate.getMonth() + 1); maxMonthDate.setDate(0) finalDate.setDate(getRandomInt(1, maxMonthDate.getDate())); return finalDate.getFullYear() + "-" + finalDate.getMonth() + "-" + finalDate.getDate(); }, p_time: () => { let hour = getRandomInt(0, 23) let minute = getRandomInt(0, 59) let second = getRandomInt(0, 59) let string = "" if (hour < 10) { string += "0" } string += hour + ":" if (minute < 10) { string += "0" } string += minute + ":" if (second < 10) { string += "0" } string += second return string }, p_value: () => { return getRandomInt(30, 80) }, } const dataModels = { ActivitiesData: { data: MOCK.ActivitiesData, mockup: ActivitiesDataModel }, ActivitiesDataAsync: { data: MOCK.ActivitiesDataAsync, mockup: ActivitiesDataModel }, ActivitiesSummary: { data: MOCK.ActivitiesSummary, mockup: ActivitiesSummaryModel }, ActivitiesSummaryAsync: { data: MOCK.ActivitiesSummaryAsync, mockup: ActivitiesSummaryModel }, HeartRateData: { data: MOCK.HeartRateData, mockup: HeartRateDataModel }, HeartRateDataAsync: { data: MOCK.HeartRateDataAsync, mockup: HeartRateDataModel }, HeartRateSummary: { data: MOCK.HeartRateSummary, mockup: HeartRateSummaryModel }, HeartRateSummaryAsync: { data: MOCK.HeartRateSummaryAsync, mockup: HeartRateSummaryModel }, SleepData: { data: MOCK.SleepData, mockup: SleepDataModel }, SleepDataAsync: { data: MOCK.SleepDataAsync, mockup: SleepDataModel }, SleepSummary: { data: MOCK.SleepSummary, mockup: SleepSummaryModel }, SleepSummaryAsync: { data: MOCK.SleepSummary, mockup: SleepSummaryModel }, SleepQuality: { data: MOCK.SleepQuality, mockup: SleepQualityModel }, SleepQualityAsync: { data: MOCK.SleepQualityAsync, mockup: SleepQualityModel }, }; export function getModelCSVHeader(dataModel) { return dataModels[dataModel].data[0].split("\t"); } export function getActivitiesMockupData(dataModel, dataDate) { let mockupData = {}; const mockupModel = dataModels[dataModel].mockup; mockupData = dataModels[dataModel].data; [ "hasActiveZoneMinutes", "activeDuration", "activityLevel", "activityName", "averageHeartRate", "elevationGain", "duration", "originalDuration", "originalStartTime", "startTime", "lastModified", "logType", "steps", "caloriesLink", "heartRateLink", "calories", "activeZoneMinutes", "manualValuesSpecified", "logType", "logId", "tcxLink" ].forEach((key, i) => { switch (key) { case "activityLevel": case "duration": mockupData[key] = mockupModel[key](mockupData["activeDuration"]); break; case "elevationGain": mockupData[key] = mockupModel[key](mockupData["activityName"]); break; case "originalDuration": mockupData[key] = mockupData["duration"]; break; case "originalStartTime": const randomDateTime = mockupModel[key](); const timePart = randomDateTime.split("T")[1]; mockupData[key] = dataDate + "T" + timePart; break; case "startTime": mockupData[key] = mockupData["originalStartTime"]; break; case "lastModified": mockupData[key] = mockupModel[key](mockupData["originalStartTime"]); break; case "steps": mockupData[key] = mockupModel[key](mockupData["activityName"], mockupData["activeDuration"]); break; case "caloriesLink": mockupData[key] = mockupModel[key](mockupData["originalStartTime"], mockupData["originalDuration"]); break; case "heartRateLink": mockupData[key] = mockupModel[key](mockupData["originalStartTime"], mockupData["originalDuration"]); break; case "activeZoneMinutes": mockupData[key] = mockupModel[key](mockupData["hasActiveZoneMinutes"]); break; case "tcxLink": mockupData[key] = mockupModel[key](mockupData["logId"]); break; case "activeDuration": case "activityName": case "averageHeartRate": case "logType": case "calories": case "hasActiveZoneMinutes": case "manualValuesSpecified": case "logType": case "logId": mockupData[key] = mockupModel[key](); break; } }); return mockupData; } export function getActivitiesSummaryData(dataModel, dataDate) { let mockupData = {}; const mockupModel = dataModels[dataModel].mockup; mockupData = dataModels[dataModel].data; [ "day", "activeScore", "activityCalories", "caloriesBMR", "heartRateZones", "caloriesOut", "distances", "elevation", "fairlyActiveMinutes", "floors", "lightlyActiveMinutes", "marginalCalories", "restingHeartRate", "sedentaryMinutes", "steps", "veryActiveMinutes", ].forEach((key, i) => { switch (key) { case "day": mockupData[key] = dataDate; break; case "caloriesOut": mockupData[key] = mockupModel[key](mockupData["heartRateZones"]); break; case "activeScore": case "activityCalories": case "caloriesBMR": case "heartRateZones": case "distances": case "elevation": case "fairlyActiveMinutes": case "floors": case "lightlyActiveMinutes": case "marginalCalories": case "restingHeartRate": case "sedentaryMinutes": case "steps": case "veryActiveMinutes": case "logType": mockupData[key] = mockupModel[key](); break; } }); return mockupData; } export function getSleepSummaryData(dataModel, dataDate) { let mockupData = {}; const mockupModel = dataModels[dataModel].mockup; mockupData = dataModels[dataModel].data; let n1 = null; let n2 = null; n1 = getRandomInt(1, 102); while (n2 === null || n2 === n1) { n2 = getRandomInt(1, 102); } let ordered = [Math.max(n1, n2), Math.min(n1, n2)] let highest, lowest, middle; let percent1 = (ordered[1] - 1) / 100; let percent2 = (ordered[0] - ordered[1] - 1) / 100; let percent3 = (102 - ordered[0]) / 100; highest = Math.max(percent1, percent2, percent3); lowest = Math.min(percent1, percent2, percent3); if (percent1 !== highest && percent1 !== lowest) { middle = percent1; } else if (percent2 !== highest && percent2 !== lowest) { middle = percent2; } else { middle = percent3; } [ "minutesAfterWakeup", "minutesAsleep", "minutesAwake", "minutesToFallAsleep", "timeInBed", "startTimeTS", "endTimeTS", "startTime", "endTime", "light", "wake", "rem", "deep", ].forEach((key, i) => { switch (key) { case "wake": mockupData[key] = mockupModel[key](mockupData["minutesAwake"]); break; case "timeInBed": mockupData[key] = mockupData["minutesAwake"] + mockupData["minutesAsleep"] + mockupData["minutesAfterWakeup"] + mockupData["minutesToFallAsleep"]; break; case "deep": mockupData[key] = mockupModel[key](mockupData["minutesAsleep"], mockupData["light"].minutes, mockupData["rem"].minutes); break; case "light": mockupData[key] = mockupModel[key](mockupData["minutesAsleep"], highest); break; case "rem": mockupData[key] = mockupModel[key](mockupData["minutesAsleep"], middle); break; case "startTimeTS": mockupData[key] = mockupModel[key](dataDate); break; case "endTimeTS": mockupData[key] = mockupModel[key](mockupData["startTimeTS"], mockupData["timeInBed"]); break; case "startTime": mockupData[key] = mockupModel[key](mockupData["startTimeTS"]); break; case "endTime": mockupData[key] = mockupModel[key](mockupData["endTimeTS"]); break; case "minutesAsleep": case "minutesAwake": case "minutesAfterWakeup": case "minutesToFallAsleep": mockupData[key] = mockupModel[key](); break; } }); return mockupData; } export function getHeartRateSummary(dataModel, dataDate) { let mockupData = {}; const mockupModel = dataModels[dataModel].mockup; mockupData = dataModels[dataModel].data; [ "day", "out_of_zone", "fat_burn", "cardio", "peak" ].forEach((key, i) => { switch (key) { case "day": mockupData[key] = dataDate; break; case "out_of_zone": case "fat_burn": case "cardio": case "peak": mockupData[key] = mockupModel[key](); break; } }); return mockupData; } export function getSleepQualityData(dataModel, dataDate) { let mockupData = {}; const mockupModel = dataModels[dataModel].mockup; mockupData = dataModels[dataModel].data; [ "p_datetime", "p_value", "p_level", "p_timestamp", ].forEach((key, i) => { switch (key) { case "p_datetime": mockupData[key] = getSleepDate(dataDate, 22, 3) break; case "p_timestamp": mockupData[key] = mockupModel[key](mockupData["p_datetime"]); break; case "p_level": case "p_value": mockupData[key] = mockupModel[key](); break; } }); return mockupData; } export function getSleepData(dataModel, dataDate) { let mockupData = {}; const mockupModel = dataModels[dataModel].mockup; mockupData = dataModels[dataModel].data; [ "p_datetime", "p_level", "p_seconds", "p_timestamp", ].forEach((key, i) => { switch (key) { case "p_datetime": mockupData[key] = getSleepDate(dataDate, 22, 3) break; case "p_timestamp": mockupData[key] = mockupModel[key](mockupData["p_datetime"]); break; case "p_level": case "p_seconds": mockupData[key] = mockupModel[key](); break; } }); return mockupData; } export function getHeartRateData(dataModel, dataDate) { let mockupData = {}; const mockupModel = dataModels[dataModel].mockup; mockupData = dataModels[dataModel].data; [ "p_date", "p_time", "p_value", ].forEach((key, i) => { switch (key) { case "p_date": mockupData[key] = dataDate; break; case "p_time": case "p_value": mockupData[key] = mockupModel[key](); break; } }); return mockupData; }