Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/IsaacBenavides/CicloVital/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Stats Service provides statistical analysis and analytics for user data in the CicloVital application. It retrieves aggregated statistics for a specific time period, enabling users to track their health and wellness trends over time.

API Configuration

The service uses environment-based API URL configuration:
const isProd = import.meta.env.VITE_PROD === 'true';
const API_URL = isProd 
  ? import.meta.env.VITE_URL_API_STATS 
  : import.meta.env.VITE_URL_API_LOCAL_STATS;

Functions

getStatsService

Retrieves statistical data for a user within a specified date range.
export const getStatsService = async (userId, fechaInicio, fechaFinal) => {
  // Implementation
}
userId
string
required
The unique identifier of the user whose statistics to retrieve
fechaInicio
string
required
The start date for the statistics periodFormat: ISO date string (e.g., ‘2026-03-01’ or ‘2026-03-01T00:00:00Z’)
fechaFinal
string
required
The end date for the statistics periodFormat: ISO date string (e.g., ‘2026-03-09’ or ‘2026-03-09T23:59:59Z’)
response
object
Response object with statistics dataSuccess Response:
{
  ok: true,
  data: response.data // Statistics object with aggregated metrics
}
Error Response:
{
  ok: false,
  messageError: string // Error message from server or default error
}
HTTP Method: GET
Endpoint: {API_URL}/{userId}?fechaInicio={fechaInicio}&fechaFinal={fechaFinal}

Example Usage

import { getStatsService } from '@/services/statsService';

const userId = 'user123';
const startDate = '2026-03-01';
const endDate = '2026-03-09';

const result = await getStatsService(userId, startDate, endDate);

if (result.ok) {
  console.log('User statistics:', result.data);
  
  // Example of accessing statistics data
  const stats = result.data;
  console.log(`Total records: ${stats.totalRecords}`);
  console.log(`Average mood: ${stats.averageMood}`);
  console.log(`Most common symptoms: ${stats.topSymptoms}`);
} else {
  console.error('Error fetching stats:', result.messageError);
}

Advanced Usage Example

import { getStatsService } from '@/services/statsService';

// Get stats for the current month
async function getCurrentMonthStats(userId) {
  const now = new Date();
  const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);
  const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0);
  
  const fechaInicio = startOfMonth.toISOString().split('T')[0];
  const fechaFinal = endOfMonth.toISOString().split('T')[0];
  
  return await getStatsService(userId, fechaInicio, fechaFinal);
}

// Get stats for a custom date range
async function getCustomRangeStats(userId, daysBack = 30) {
  const endDate = new Date();
  const startDate = new Date();
  startDate.setDate(startDate.getDate() - daysBack);
  
  const fechaInicio = startDate.toISOString().split('T')[0];
  const fechaFinal = endDate.toISOString().split('T')[0];
  
  return await getStatsService(userId, fechaInicio, fechaFinal);
}

// Usage
const monthStats = await getCurrentMonthStats('user123');
const last30DaysStats = await getCustomRangeStats('user123', 30);

Integration with Dashboard

import { getStatsService } from '@/services/statsService';
import { useState, useEffect } from 'react';

function StatsDashboard({ userId }) {
  const [stats, setStats] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);
  
  useEffect(() => {
    async function loadStats() {
      const endDate = new Date().toISOString().split('T')[0];
      const startDate = new Date();
      startDate.setDate(startDate.getDate() - 30);
      const fechaInicio = startDate.toISOString().split('T')[0];
      
      const result = await getStatsService(userId, fechaInicio, endDate);
      
      if (result.ok) {
        setStats(result.data);
      } else {
        setError(result.messageError);
      }
      setLoading(false);
    }
    
    loadStats();
  }, [userId]);
  
  if (loading) return <div>Loading statistics...</div>;
  if (error) return <div>Error: {error}</div>;
  
  return (
    <div>
      <h2>Your Statistics</h2>
      {/* Render stats data */}
    </div>
  );
}

Error Handling

All service methods use a consistent error handling pattern:
  • Server Errors: Returns error.response?.data if available
  • Connection Errors: Returns default message: 'Error al conectar con el servidor.'
  • Response Format: Always returns { ok: boolean, data/messageError }
  • Debug Logging: Errors are logged to console for debugging

Query Parameters

The service uses URL query parameters for date filtering:
  • fechaInicio: Start date of the statistics period
  • fechaFinal: End date of the statistics period
  • Both parameters are required for the request

Source Code

Location: src/services/statsService.js

Build docs developers (and LLMs) love