@alextomas80/api-client-grupeta
Version:
Cliente API Grupeta CBR
83 lines (69 loc) • 2.21 kB
text/typescript
import { addDays, format } from "date-fns";
import { getApiToken } from "../config";
import { Calendar, CalendarApi, CalendarApiResponse } from "../definitions/models";
import createAxiosInstance from "./axios";
const mapCalendar = (data: CalendarApiResponse): Calendar[] => {
const items = data.data.map(({ id, title, description, date, route, status }: CalendarApi) => {
return {
date,
description,
documentId: id,
route,
title,
status,
} as unknown as Calendar;
});
return items;
};
const fetchEvents = async (path: string): Promise<{ calendar: Calendar[] }> => {
const ACCESS_TOKEN = getApiToken();
const axiosStrava = createAxiosInstance(ACCESS_TOKEN);
const { data } = await axiosStrava.get<CalendarApiResponse>(path);
const calendar = mapCalendar(data);
return {
calendar,
};
};
export const getCalendar = async ({
fields = "*",
limit = 10,
page = 0,
}: {
fields: string;
limit?: number;
page?: number;
}): Promise<Calendar[]> => {
try {
const filters = `limit=${limit}${page ? `&page=${page}` : ""}`;
const { calendar } = await fetchEvents(`/items/calendar?${filters}&fields=${fields}`);
return calendar;
} catch (error) {
console.error("Error al obtener eventos del calendario:", error);
throw new Error("Error al obtener eventos del calendario.");
}
};
export const getUpcomingRoutes = async ({
fields = "*",
limit = 10,
page = 0,
sort = "date",
}: {
fields: string;
limit?: number;
page?: number;
sort?: string;
}): Promise<Calendar[]> => {
try {
// Obtener la fecha actual
const today = new Date();
const tomorrow = format(addDays(today, 1), "yyyy-MM-dd");
// Crear los filtros para obtener solo las rutas futuras
const pageQuery = page ? `&page=${page}` : "";
const filters = [`limit=${limit}`, `filter[date][_gte]=${tomorrow}`, `sort=${sort}`, pageQuery].join("&");
const { calendar } = await fetchEvents(`/items/calendar?${filters}&fields=${fields}`);
return calendar;
} catch (error) {
console.error("Error al obtener eventos del calendario:", error);
throw new Error("Error al obtener eventos del calendario.");
}
};