ne radi vite server
This commit is contained in:
@@ -4,27 +4,38 @@
|
||||
const RAW_BASE = import.meta.env.PUBLIC_API_URL;
|
||||
const API_BASE = RAW_BASE.endsWith('/') ? RAW_BASE : `${RAW_BASE}/`;
|
||||
|
||||
|
||||
/**
|
||||
* POMOĆNA FUNKCIJA:端 Dohvaća token i postavlja Headere
|
||||
* POMOĆNA FUNKCIJA: Dohvaća token i postavlja Headere.
|
||||
* Podržava i klijentski localStorage i serverski (SSR) proslijeđeni token.
|
||||
* @param {Object|FormData} bodyData - Podaci koji se šalju u body-ju zahtjeva
|
||||
* @param {string|null} ssrToken - Izborni token proslijeđen sa serverske strane (Astro SSR)
|
||||
*/
|
||||
function getAuthHeaders(bodyData = {}) {
|
||||
const token = typeof window !== 'undefined' ? localStorage.getItem('access_token') : null;
|
||||
function getAuthHeaders(bodyData = {}, ssrToken = null) {
|
||||
const headers = {};
|
||||
|
||||
// 🚀 PAMETAN DOHVAT TOKENA: Ako je proslijeđen ssrToken (server), koristi njega.
|
||||
// Ako nije, a nalazimo se u pregledniku (klijent), povuci ga iz localStorage.
|
||||
let token = ssrToken;
|
||||
if (!token && typeof window !== 'undefined') {
|
||||
token = localStorage.getItem('access_token');
|
||||
}
|
||||
|
||||
if (token) {
|
||||
headers['Authorization'] = `Bearer ${token}`; // Usklađeno sa Simple JWT standardom
|
||||
}
|
||||
|
||||
// Provjera je li bodyData FormData (za slike/naloge)
|
||||
// Provjera je li bodyData FormData (za slike/naloge s terena)
|
||||
const isFormData = bodyData instanceof FormData;
|
||||
|
||||
// Ako NIJE FormData, šaljemo JSON
|
||||
// Ako NIJE FormData, šaljemo standardni JSON content type
|
||||
if (!isFormData) {
|
||||
headers['Content-Type'] = 'application/json';
|
||||
}
|
||||
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Centralizirana obrada odgovora s Toast podrškom
|
||||
*/
|
||||
@@ -69,9 +80,13 @@ async function handleResponse(res) {
|
||||
|
||||
// --- RUTE ---
|
||||
export const routes = {
|
||||
// Autentifikacija (Maknute početne kose crte!)
|
||||
// Autentifikacija
|
||||
login: () => 'token/',
|
||||
trenutniKorisnik: () => 'users/me/',
|
||||
|
||||
// Korisnici i operativni tehničari
|
||||
serviseriSvi: () => 'users/',
|
||||
serviserTerminal: (id) => `users/${id}/terminal/`,
|
||||
|
||||
// Radni nalozi
|
||||
radniNalozi: (params = {}) => {
|
||||
@@ -109,22 +124,72 @@ export const routes = {
|
||||
// --- API METODE ---
|
||||
|
||||
/**
|
||||
* Dohvat profila trenutno prijavljenog korisnika
|
||||
* Dohvat profila korisnika iz opće liste /api/users/
|
||||
* @param {string|null} ssrToken - Opcionalni token sa servera (Astro.cookies ili slično)
|
||||
*/
|
||||
export async function fetchCurrentUser() {
|
||||
export async function fetchCurrentUser(ssrToken = null) {
|
||||
if (typeof window === 'undefined' && !ssrToken) return null;
|
||||
|
||||
try {
|
||||
const url = `${API_BASE}${routes.trenutniKorisnik()}`;
|
||||
const res = await fetch(url, {
|
||||
method: 'GET',
|
||||
headers: getAuthHeaders()
|
||||
headers: getAuthHeaders({}, ssrToken)
|
||||
});
|
||||
return await handleResponse(res);
|
||||
|
||||
const user = await handleResponse(res);
|
||||
if (user && user.detail) return null;
|
||||
|
||||
return user;
|
||||
} catch (e) {
|
||||
console.error("fetchCurrentUser Failure:", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 🚀 NOVO (DRY): Dohvaća sve korisnike i vraća isključivo filtrirane servisere s terena
|
||||
*/
|
||||
export async function fetchServiseri() {
|
||||
try {
|
||||
const url = `${API_BASE}${routes.serviseriSvi()}`;
|
||||
const res = await fetch(url, {
|
||||
method: 'GET',
|
||||
headers: getAuthHeaders()
|
||||
});
|
||||
|
||||
const korisnici = await handleResponse(res);
|
||||
if (!korisnici) return [];
|
||||
|
||||
const lista = Array.isArray(korisnici) ? korisnici : (korisnici.results || []);
|
||||
|
||||
// Filtriranje na temelju polja 'uloga' iz tvog CustomUser modela
|
||||
return lista.filter(u => String(u.uloga).toUpperCase().trim() === 'SERVISER');
|
||||
} catch (e) {
|
||||
console.error("fetchServiseri Failure:", e);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 🚀 NOVO (DRY): Dohvaća ugniježđene terminal podatke za specifičnog servisera (Nalozi, Putni, Vozila)
|
||||
* @param {number|string} id - ID servisera čiji se terminal učitava
|
||||
*/
|
||||
export async function fetchServiserTerminalData(id) {
|
||||
try {
|
||||
const url = `${API_BASE}${routes.serviserTerminal(id)}`;
|
||||
const res = await fetch(url, {
|
||||
method: 'GET',
|
||||
headers: getAuthHeaders()
|
||||
});
|
||||
|
||||
return await handleResponse(res);
|
||||
} catch (e) {
|
||||
console.error(`fetchServiserTerminalData za ID ${id} neuspješan:`, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dohvat i filtriranje radnih naloga (za tablice i liste u operativi)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user