UNPKG

@profullstack/fasting

Version:

A comprehensive CLI and Node.js module for 16:8 intermittent fasting with meal tracking, weight monitoring, and fast history with visual charts

57 lines (48 loc) 1.81 kB
import { loadExercises, saveExercise } from './storage.js'; import { getTodaysDate, getCurrentTimestamp } from './config.js'; export const logExercise = async (description, duration, caloriesBurned = null) => { const exercise = { description, duration, caloriesBurned, timestamp: getCurrentTimestamp() }; await saveExercise(exercise); }; export const getTodaysExercises = async () => { const exercises = await loadExercises(); const { getTimezone } = await import('./config.js'); const timezone = getTimezone(); const today = getTodaysDate(); return exercises.filter(exercise => { // Convert UTC timestamp to local date in the configured timezone const exerciseDate = new Date(exercise.timestamp).toLocaleDateString('en-CA', { timeZone: timezone }); return exerciseDate === today; }); }; export const getExerciseHistory = async () => { const exercises = await loadExercises(); // Group exercises by date and calculate total calories burned per day const caloriesByDate = {}; exercises.forEach(exercise => { if (exercise.caloriesBurned === null) return; // Skip entries without calorie data const date = exercise.timestamp.slice(0, 10); // Get YYYY-MM-DD if (!caloriesByDate[date]) { caloriesByDate[date] = 0; } caloriesByDate[date] += exercise.caloriesBurned; }); // Convert to array format with date and calories burned return Object.entries(caloriesByDate) .map(([date, caloriesBurned]) => ({ date, caloriesBurned, timestamp: new Date(date + 'T12:00:00Z').toISOString() // Use noon UTC for consistent sorting })) .sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp)); }; export const getAllExercises = async () => { return await loadExercises(); };