ZoeBuyCourses/api/services/tray_service.js

75 lines
1.8 KiB
JavaScript

// 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
};