Обновление приложения
This commit is contained in:
101
frontend/src/api/client.js
Normal file
101
frontend/src/api/client.js
Normal file
@@ -0,0 +1,101 @@
|
||||
import axios from "axios";
|
||||
|
||||
const api = axios.create({
|
||||
baseURL: "/api/v1",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
});
|
||||
|
||||
api.interceptors.request.use((config) => {
|
||||
const token = localStorage.getItem("access_token");
|
||||
if (token) config.headers.Authorization = `Bearer ${token}`;
|
||||
return config;
|
||||
});
|
||||
|
||||
api.interceptors.response.use(
|
||||
(r) => r,
|
||||
async (error) => {
|
||||
const original = error.config;
|
||||
if (error.response?.status === 401 && !original._retry) {
|
||||
original._retry = true;
|
||||
const refresh = localStorage.getItem("refresh_token");
|
||||
if (refresh) {
|
||||
try {
|
||||
const { data } = await axios.post("/api/v1/auth/refresh", null, {
|
||||
params: { refresh_token: refresh },
|
||||
});
|
||||
localStorage.setItem("access_token", data.access_token);
|
||||
localStorage.setItem("refresh_token", data.refresh_token);
|
||||
original.headers.Authorization = `Bearer ${data.access_token}`;
|
||||
return api(original);
|
||||
} catch {
|
||||
localStorage.clear();
|
||||
window.location.href = "/login";
|
||||
}
|
||||
}
|
||||
}
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
// ── Auth ────────────────────────────────────────────────
|
||||
export const login = (username, password) =>
|
||||
api.post("/auth/login/json", { username, password });
|
||||
export const register = (data) => api.post("/auth/register", data);
|
||||
export const getMe = () => api.get("/users/me");
|
||||
|
||||
// ── Users (admin) ────────────────────────────────────────
|
||||
export const getUsers = () => api.get("/users");
|
||||
export const updateUser = (id, data) => api.patch(`/users/${id}`, data);
|
||||
export const deleteUser = (id) => api.delete(`/users/${id}`);
|
||||
|
||||
// ── Currencies ───────────────────────────────────────────
|
||||
export const getCurrencies = () => api.get("/currencies");
|
||||
export const createCurrency = (d) => api.post("/currencies", d);
|
||||
export const updateCurrency = (id, d) => api.patch(`/currencies/${id}`, d);
|
||||
export const deleteCurrency = (id) => api.delete(`/currencies/${id}`);
|
||||
|
||||
// ── Exchange rates ────────────────────────────────────────
|
||||
export const getExchangeRates = (params) => api.get("/exchange-rates", { params });
|
||||
export const createExchangeRate = (d) => api.post("/exchange-rates", d);
|
||||
export const deleteExchangeRate = (id) => api.delete(`/exchange-rates/${id}`);
|
||||
|
||||
// ── Accounts ──────────────────────────────────────────────
|
||||
export const getAccountTypes = () => api.get("/accounts/types");
|
||||
export const getAccounts = () => api.get("/accounts");
|
||||
export const createAccount = (d) => api.post("/accounts", d);
|
||||
export const updateAccount = (id, d) => api.patch(`/accounts/${id}`, d);
|
||||
export const deleteAccount = (id) => api.delete(`/accounts/${id}`);
|
||||
|
||||
// ── Categories ────────────────────────────────────────────
|
||||
export const getCategories = () => api.get("/categories");
|
||||
export const createCategory = (d) => api.post("/categories", d);
|
||||
export const updateCategory = (id, d) => api.patch(`/categories/${id}`, d);
|
||||
export const deleteCategory = (id) => api.delete(`/categories/${id}`);
|
||||
|
||||
// ── Budgets ───────────────────────────────────────────────
|
||||
export const getBudgets = () => api.get("/budgets");
|
||||
export const createBudget = (d) => api.post("/budgets", d);
|
||||
export const updateBudget = (id, d) => api.patch(`/budgets/${id}`, d);
|
||||
export const deleteBudget = (id) => api.delete(`/budgets/${id}`);
|
||||
|
||||
// ── Locations ─────────────────────────────────────────────
|
||||
export const getLocations = () => api.get("/locations");
|
||||
export const createLocation = (d) => api.post("/locations", d);
|
||||
export const updateLocation = (id, d) => api.patch(`/locations/${id}`, d);
|
||||
export const deleteLocation = (id) => api.delete(`/locations/${id}`);
|
||||
|
||||
// ── Operations ────────────────────────────────────────────
|
||||
export const getOperationTypes = () => api.get("/operations/types");
|
||||
export const getOperations = (params) => api.get("/operations", { params });
|
||||
export const createOperation = (d) => api.post("/operations", d);
|
||||
export const createTransfer = (d) => api.post("/operations/transfer", d);
|
||||
export const updateOperation = (id, d) => api.patch(`/operations/${id}`, d);
|
||||
export const deleteOperation = (id) => api.delete(`/operations/${id}`);
|
||||
|
||||
// ── Calendar ──────────────────────────────────────────────
|
||||
export const getCalendarEvents = (params) => api.get("/calendar", { params });
|
||||
export const createCalendarEvent = (d) => api.post("/calendar", d);
|
||||
export const updateCalendarEvent = (id, d) => api.patch(`/calendar/${id}`, d);
|
||||
export const deleteCalendarEvent = (id) => api.delete(`/calendar/${id}`);
|
||||
|
||||
export default api;
|
||||
Reference in New Issue
Block a user