first commit

This commit is contained in:
2025-11-03 22:54:10 +03:00
commit 7edbab2689
21 changed files with 5760 additions and 0 deletions

224
client/src/api.js Normal file
View File

@@ -0,0 +1,224 @@
const API_BASE = import.meta.env.VITE_API_BASE || '';
async function request(path, { method = 'GET', body, token } = {}) {
const headers = {};
const options = { method, headers };
if (body) {
headers['Content-Type'] = 'application/json';
options.body = JSON.stringify(body);
}
if (token) {
headers['x-session-token'] = token;
}
const response = await fetch(`${API_BASE}${path}`, options);
if (!response.ok) {
const errorBody = await response.json().catch(() => ({}));
const message = errorBody.message || 'Beklenmeyen bir hata olustu.';
throw new Error(message);
}
if (response.status === 204) {
return null;
}
return response.json();
}
export function login(credentials) {
return request('/api/auth/login', {
method: 'POST',
body: credentials
});
}
export function logout(token) {
return request('/api/auth/logout', {
method: 'POST',
token
});
}
export function fetchSession(token) {
return request('/api/session', {
method: 'GET',
token
});
}
export function listInventoryManagers(token) {
return request('/api/inventory-managers', {
method: 'GET',
token
});
}
export function createInventoryManager(token, payload) {
return request('/api/inventory-managers', {
method: 'POST',
body: payload,
token
});
}
export function updateInventoryManager(token, id, payload) {
return request(`/api/inventory-managers/${id}`, {
method: 'PUT',
body: payload,
token
});
}
export function deleteInventoryManager(token, id) {
return request(`/api/inventory-managers/${id}`, {
method: 'DELETE',
token
});
}
export function listVehicles(token) {
return request('/api/vehicles', {
method: 'GET',
token
});
}
export function createVehicle(token, payload) {
return request('/api/vehicles', {
method: 'POST',
body: payload,
token
});
}
export function updateVehicle(token, id, payload) {
return request(`/api/vehicles/${id}`, {
method: 'PUT',
body: payload,
token
});
}
export function deleteVehicle(token, id) {
return request(`/api/vehicles/${id}`, {
method: 'DELETE',
token
});
}
export function listUnits(token) {
return request('/api/units', {
method: 'GET',
token
});
}
export function createUnit(token, payload) {
return request('/api/units', {
method: 'POST',
body: payload,
token
});
}
export function updateUnit(token, id, payload) {
return request(`/api/units/${id}`, {
method: 'PUT',
body: payload,
token
});
}
export function deleteUnit(token, id) {
return request(`/api/units/${id}`, {
method: 'DELETE',
token
});
}
export function listFuelPersonnel(token) {
return request('/api/fuel-personnel', {
method: 'GET',
token
});
}
export function createFuelPersonnel(token, payload) {
return request('/api/fuel-personnel', {
method: 'POST',
body: payload,
token
});
}
export function updateFuelPersonnel(token, id, payload) {
return request(`/api/fuel-personnel/${id}`, {
method: 'PUT',
body: payload,
token
});
}
export function deleteFuelPersonnel(token, id) {
return request(`/api/fuel-personnel/${id}`, {
method: 'DELETE',
token
});
}
export function fetchFuelResources(token) {
return request('/api/fuel/resources', {
method: 'GET',
token
});
}
export function listFuelSlips(token) {
return request('/api/fuel-slips', {
method: 'GET',
token
});
}
export function createFuelSlip(token, payload) {
return request('/api/fuel-slips', {
method: 'POST',
body: payload,
token
});
}
export async function downloadFuelSlipPdf(token, id) {
const response = await fetch(`${API_BASE}/api/fuel-slips/${id}/pdf`, {
method: 'GET',
headers: {
'x-session-token': token
}
});
if (!response.ok) {
const errorBody = await response.json().catch(() => ({}));
const message = errorBody.message || 'PDF indirilemedi.';
throw new Error(message);
}
return response.blob();
}
export function fetchAssignedFuelSlips(token) {
return request('/api/fuel-slips/assigned', {
method: 'GET',
token
});
}
export function updateFuelSlipStatus(token, id, payload) {
return request(`/api/fuel-slips/${id}/status`, {
method: 'PATCH',
body: payload,
token
});
}