diff --git a/frontend/flashcards.html b/frontend/flashcards.html
index d7b895a..585df6e 100644
--- a/frontend/flashcards.html
+++ b/frontend/flashcards.html
@@ -407,8 +407,8 @@ async function init() {
async function loadDecks() {
const [decks, stats] = await Promise.all([
- LS.api('/flashcards/decks').catch(()=>({decks:[]})),
- LS.api('/flashcards/stats').catch(()=>null),
+ LS.api('/api/flashcards/decks').catch(()=>({decks:[]})),
+ LS.api('/api/flashcards/stats').catch(()=>null),
]);
_decks = decks.decks || [];
renderStats(stats);
@@ -483,7 +483,7 @@ async function openDeck(id) {
_curDeck = _decks.find(d => d.id === id);
if (!_curDeck) return;
document.getElementById('cards-deck-title').textContent = _curDeck.title;
- const data = await LS.api(`/flashcards/decks/${id}/cards`).catch(()=>({cards:[]}));
+ const data = await LS.api(`/api/flashcards/decks/${id}/cards`).catch(()=>({cards:[]}));
_cards = data.cards || [];
renderCardList();
document.getElementById('view-decks').style.display = 'none';
@@ -547,7 +547,7 @@ async function addCard() {
const front = document.getElementById('new-card-front').value.trim();
const back = document.getElementById('new-card-back').value.trim();
if (!front && !back) return;
- const card = await LS.api(`/flashcards/decks/${_curDeck.id}/cards`, {
+ const card = await LS.api(`/api/flashcards/decks/${_curDeck.id}/cards`, {
method: 'POST', body: JSON.stringify({ front, back })
}).catch(()=>null);
if (!card) return;
@@ -566,14 +566,14 @@ async function saveCard(id, field, value) {
const card = _cards.find(c => c.id === id);
if (!card) return;
card[field] = value;
- await LS.api(`/flashcards/cards/${id}`, {
+ await LS.api(`/api/flashcards/cards/${id}`, {
method: 'PUT', body: JSON.stringify({ [field]: value })
}).catch(()=>{});
}
async function deleteCard(id) {
if (!confirm('Удалить карточку?')) return;
- await LS.api(`/flashcards/cards/${id}`, { method: 'DELETE' }).catch(()=>{});
+ await LS.api(`/api/flashcards/cards/${id}`, { method: 'DELETE' }).catch(()=>{});
_cards = _cards.filter(c => c.id !== id);
renderCardList();
}
@@ -594,7 +594,7 @@ async function saveBulk() {
return { front: (front||'').trim(), back: rest.join(sep).trim() };
}).filter(c => c.front);
if (!cards.length) return;
- const result = await LS.api(`/flashcards/decks/${_curDeck.id}/cards/bulk`, {
+ const result = await LS.api(`/api/flashcards/decks/${_curDeck.id}/cards/bulk`, {
method: 'POST', body: JSON.stringify({ cards })
}).catch(()=>null);
if (result?.inserted) {
@@ -618,7 +618,7 @@ async function startStudy() {
async function startStudyForDeck(deckId) {
_curDeck = _curDeck || _decks.find(d => d.id === deckId);
if (!_curDeck) return;
- const data = await LS.api(`/flashcards/decks/${deckId}/study`).catch(()=>null);
+ const data = await LS.api(`/api/flashcards/decks/${deckId}/study`).catch(()=>null);
if (!data || !data.cards?.length) {
LS.toast('Нет карточек для повторения — всё актуально!', 'success');
return;
@@ -693,7 +693,7 @@ async function answer(quality) {
else if (quality === 4) _sessionStats.good++;
else if (quality === 5) _sessionStats.easy++;
// send review
- await LS.api(`/flashcards/cards/${card.id}/review`, {
+ await LS.api(`/api/flashcards/cards/${card.id}/review`, {
method: 'POST', body: JSON.stringify({ quality })
}).catch(()=>{});
// animate swipe
@@ -826,7 +826,7 @@ async function saveDeckModal() {
const desc = document.getElementById('modal-deck-desc').value.trim();
if (!title) { document.getElementById('modal-deck-name').focus(); return; }
if (_editingDeckId) {
- await LS.api(`/flashcards/decks/${_editingDeckId}`, {
+ await LS.api(`/api/flashcards/decks/${_editingDeckId}`, {
method: 'PUT', body: JSON.stringify({ title, description: desc, color: _deckColor })
}).catch(()=>{});
_curDeck.title = title; _curDeck.description = desc; _curDeck.color = _deckColor;
@@ -834,7 +834,7 @@ async function saveDeckModal() {
const d = _decks.find(x => x.id === _editingDeckId);
if (d) { d.title = title; d.description = desc; d.color = _deckColor; }
} else {
- const deck = await LS.api('/flashcards/decks', {
+ const deck = await LS.api('/api/flashcards/decks', {
method: 'POST', body: JSON.stringify({ title, description: desc, color: _deckColor })
}).catch(()=>null);
if (deck) { _decks.unshift(deck); renderDecks(); }
@@ -845,7 +845,7 @@ async function saveDeckModal() {
async function confirmDeleteDeck() {
if (!_curDeck) return;
if (!await LS.confirm(`Удалить колоду «${_curDeck.title}» и все карточки?`, { title: 'Удаление колоды', confirmText: 'Удалить', danger: true })) return;
- await LS.api(`/flashcards/decks/${_curDeck.id}`, { method: 'DELETE' }).catch(()=>{});
+ await LS.api(`/api/flashcards/decks/${_curDeck.id}`, { method: 'DELETE' }).catch(()=>{});
_decks = _decks.filter(d => d.id !== _curDeck.id);
_curDeck = null; _cards = [];
showDecks();