обновил дизайн, добавил дашборд
This commit is contained in:
@@ -92,6 +92,41 @@ export async function refreshAccessToken() {
|
||||
return refreshPromise;
|
||||
}
|
||||
|
||||
const cache = new Map();
|
||||
|
||||
const CACHABLE_PREFIXES = [
|
||||
'/api/departments',
|
||||
'/api/specialties',
|
||||
'/api/education-forms',
|
||||
'/api/users/teachers',
|
||||
'/api/equipments',
|
||||
'/api/classrooms'
|
||||
];
|
||||
|
||||
function invalidateCache(url) {
|
||||
const cacheKeysToClear = [
|
||||
'/api/departments',
|
||||
'/api/specialties',
|
||||
'/api/education-forms',
|
||||
'/api/users',
|
||||
'/api/equipments',
|
||||
'/api/classrooms'
|
||||
];
|
||||
for (const prefix of cacheKeysToClear) {
|
||||
if (url.includes(prefix)) {
|
||||
for (const cacheKey of cache.keys()) {
|
||||
if (cacheKey.includes(prefix)) {
|
||||
cache.delete(cacheKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function clearCache() {
|
||||
cache.clear();
|
||||
}
|
||||
|
||||
export async function logout() {
|
||||
try {
|
||||
await fetch('/api/auth/logout', {
|
||||
@@ -102,6 +137,7 @@ export async function logout() {
|
||||
console.warn('Не удалось завершить серверную сессию:', e.message);
|
||||
} finally {
|
||||
clearAuthState();
|
||||
clearCache();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,8 +157,26 @@ export function clearAuthState() {
|
||||
}
|
||||
|
||||
export const api = {
|
||||
get: (url) => apiFetch(url, 'GET'),
|
||||
post: (url, body) => apiFetch(url, 'POST', body),
|
||||
put: (url, body) => apiFetch(url, 'PUT', body),
|
||||
delete: (url, body = null) => apiFetch(url, 'DELETE', body)
|
||||
get: async (url) => {
|
||||
const isCachable = CACHABLE_PREFIXES.some(prefix => url.startsWith(prefix));
|
||||
if (isCachable) {
|
||||
if (!cache.has(url)) {
|
||||
cache.set(url, await apiFetch(url, 'GET'));
|
||||
}
|
||||
return cache.get(url);
|
||||
}
|
||||
return apiFetch(url, 'GET');
|
||||
},
|
||||
post: async (url, body) => {
|
||||
invalidateCache(url);
|
||||
return apiFetch(url, 'POST', body);
|
||||
},
|
||||
put: async (url, body) => {
|
||||
invalidateCache(url);
|
||||
return apiFetch(url, 'PUT', body);
|
||||
},
|
||||
delete: async (url, body = null) => {
|
||||
invalidateCache(url);
|
||||
return apiFetch(url, 'DELETE', body);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user