asset_browser/public/api/syncro.js
2026-03-27 09:18:39 -04:00

72 lines
3 KiB
JavaScript
Executable file

import { apiRequest } from './utils.js';
import CONFIG from '../config.js';
const { defaultCustomerId } = CONFIG.app;
// ── Assets ───────────────────────────────────────────────────────────────────
export async function getAsset(id) {
const data = await apiRequest('GET', `/asset/${id}`, null, {}, { base: '/api' });
return data.asset ?? data;
}
export async function searchAssets(query) {
const data = await apiRequest('GET', '/asset/search', null, {
query,
per_page: 10,
}, { base: '/api' });
return data.assets ?? data.customer_assets ?? [];
}
export async function updateAsset(id, fields, customerId) {
// Routes through Node.js cache layer (/api/) which invalidates the server cache
// and forwards to Syncro. customer_id is used server-side for cache invalidation only.
const data = await apiRequest('PUT', `/customer_assets/${id}`, { asset: fields, customer_id: customerId }, {}, { base: '/api' });
return data.asset ?? data;
}
// ── Contacts ─────────────────────────────────────────────────────────────────
// Fetches via Node.js server cache — server handles pagination internally
export async function getContacts(customerId = defaultCustomerId) {
const res = await fetch(`/api/contacts/${customerId}`, {
credentials: 'same-origin',
headers: { Accept: 'application/json' },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
return data.contacts ?? [];
}
// ── Customers ────────────────────────────────────────────────────────────────
// Fetches via Node.js server cache — server handles pagination internally
export async function getCustomers() {
const res = await fetch('/api/customers', {
credentials: 'same-origin',
headers: { Accept: 'application/json' },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
return data.customers ?? [];
}
export async function getCustomerAssets(customerId) {
const res = await fetch(`/api/customer_assets/${customerId}`, {
credentials: 'same-origin',
headers: { Accept: 'application/json' },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
return data.assets ?? [];
}
// ── Tickets ──────────────────────────────────────────────────────────────────
export async function getTickets(customerId = defaultCustomerId) {
const data = await apiRequest('GET', '/tickets', null, {
customer_id: customerId,
per_page: 100, // fetch enough to filter client-side by contact
});
return data.tickets ?? [];
}