// services/trayService.js const axios = require("axios"); const trayApi = axios.create({ baseURL: process.env.TRAY_API_BASE_URL, headers: { "Content-Type": "application/json", }, }); // Se a Tray exigir token por header ou querystring, você ajusta aqui function getAuthParams() { return { access_token: process.env.TRAY_API_TOKEN, }; } /** * Lista cursos (produtos) na Tray. * Aqui você pode filtrar por categoria, tag, etc, dependendo de como organizar lá. */ async function listCourses() { // Exemplo genérico: ajuste conforme o endpoint real da Tray const resp = await trayApi.get("/products", { params: { ...getAuthParams(), // filtros opcionais: // category_id: 123, // active: 1, }, }); const products = resp.data?.Products || resp.data?.products || []; // Mapeia para um modelo mais limpo pro front const courses = products.map((p) => { return { id: p.id, name: p.name, description: p.description_small || p.description || "", price: p.price, promo_price: p.promotional_price || null, image_url: p.images?.[0]?.https || null, // URL pública do produto na loja Tray (exemplo) trayUrl: `${process.env.TRAY_STORE_URL}/produto/${p.id}/${slugify( p.name )}`, }; }); return courses; } async function getOrderById(orderId) { // Exemplo genérico, ajuste conforme a rota real da Tray const resp = await trayApi.get(`/orders/${orderId}`, { params: getAuthParams(), }); return resp.data; } // Função simples pra criar um slug a partir do nome (opcional) function slugify(str = "") { return str .normalize("NFD") .replace(/[\u0300-\u036f]/g, "") .toLowerCase() .replace(/[^a-z0-9]+/g, "-") .replace(/(^-|-$)+/g, ""); } module.exports = { listCourses, getOrderById };