75 lines
1.8 KiB
JavaScript
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
|
|
}; |