All files / src/features/dashboard/services conversion-rate.service.ts

100% Statements 16/16
66.66% Branches 4/6
100% Functions 5/5
100% Lines 15/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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                                                2x     10x     10x   10x 20x   19x 11x     19x             11x             2x     11x 11x     10x   2x 2x              
import type {
  ConversionItem,
  ConversionColumnData,
} from '../components/conversion-rate-card';
import { apiClient } from '@/lib/http-client';
import type { ConversionCategory } from '@/constants/dashboard';
import { DASHBOARD_API_ENDPOINTS } from '@/constants/dashboard';
 
// Conversion Rate API response type from Strapi
interface ConversionRateApiResponse {
  id: number;
  documentId: string;
  currency: string;
  rate: string;
  category: ConversionCategory;
  type: string;
  isActive: boolean;
  createdAt: string;
  updatedAt: string;
  publishedAt: string;
  locale: string;
}
 
// Transform API response to ConversionColumnData
const transformApiResponse = (
  apiData: ConversionRateApiResponse[]
): ConversionColumnData[] => {
  console.log('Transforming Conversion Rate API response:', apiData);
 
  // Group by category
  const groupedData: Record<string, ConversionItem[]> = {};
 
  apiData
    .filter(item => item.isActive) // Only include active conversion rates
    .forEach(item => {
      if (!groupedData[item.category]) {
        groupedData[item.category] = [];
      }
 
      groupedData[item.category].push({
        currency: item.currency,
        rate: item.rate,
      });
    });
 
  // Convert grouped data to ConversionColumnData format
  return Object.entries(groupedData).map(([category, items]) => ({
    title: category,
    items: items,
  }));
};
 
// Fetch all conversion rates
export const fetchConversionRates = async (): Promise<
  ConversionColumnData[]
> => {
  try {
    const response = await apiClient.get(
      DASHBOARD_API_ENDPOINTS.CONVERSION_RATES
    );
    return transformApiResponse(response || []);
  } catch (error) {
    console.error('Failed to fetch conversion rates:', error);
    throw new Error(
      error instanceof Error
        ? error.message
        : 'Failed to load conversion rate data'
    );
  }
};