$(document).ready(() => { let allLoans = []; let booksCache = new Map(); init(); function init() { const user = window.getUser(); if (!user) { Utils.showToast("Необходима авторизация", "error"); window.location.href = "/auth"; return; } loadLoans(); } async function loadLoans() { try { const data = await Api.get("/api/loans/?page=1&size=100"); allLoans = data.loans; const bookIds = [...new Set(allLoans.map((loan) => loan.book_id))]; await loadBooks(bookIds); renderLoans(); } catch (error) { console.error("Failed to load loans", error); Utils.showToast("Ошибка загрузки выдач", "error"); } } async function loadBooks(bookIds) { const promises = bookIds.map(async (bookId) => { if (!booksCache.has(bookId)) { try { const book = await Api.get(`/api/books/${bookId}`); booksCache.set(bookId, book); } catch (error) { console.error(`Failed to load book ${bookId}`, error); } } }); await Promise.all(promises); } function renderLoans() { const reservations = allLoans.filter( (loan) => !loan.returned_at && getBookStatus(loan.book_id) === "reserved", ); const activeLoans = allLoans.filter( (loan) => !loan.returned_at && getBookStatus(loan.book_id) === "borrowed", ); const returned = allLoans.filter((loan) => loan.returned_at !== null); renderReservations(reservations); renderActiveLoans(activeLoans); renderReturned(returned); } function getBookStatus(bookId) { const book = booksCache.get(bookId); return book ? book.status : null; } function renderReservations(reservations) { const $container = $("#reservations-container"); $("#reservations-count").text(reservations.length); $container.empty(); if (reservations.length === 0) { $container.html( '
Авторы: ${book.authors.map((a) => a.name).join(", ") || "Не указаны"}
Дата бронирования: ${borrowedDate}
Срок возврата: ${dueDate}
Авторы: ${book.authors.map((a) => a.name).join(", ") || "Не указаны"}
Дата выдачи: ${borrowedDate}
Срок возврата: ${dueDate}
Авторы: ${book.authors.map((a) => a.name).join(", ") || "Не указаны"}
Дата выдачи: ${borrowedDate}
Срок возврата: ${dueDate}
Дата возврата: ${returnedDate}