fix: Consequence kezelés és deck szerkesztés javítások

- TaskCardEditor és JokerCardEditor: consequence mezők eltávolítása (csak LuckCardEditor-nél marad)
- DeckCreator: kártya type konverzió javítása betöltéskor (szám -> string)
- DeckCreator: csak megfelelő típusú kártyák megtartása mentéskor
- UpdateDeckCommandHandler: userstate -> authLevel javítás (interface mező helyesen)
- sql_schema_only.sql: trigger függvény javítása (NEW.updatedate -> NEW.update_date)
This commit is contained in:
GitG0r0
2025-10-27 18:27:40 +01:00
parent d0741c273f
commit d3dcb7f7da
5 changed files with 91 additions and 276 deletions
@@ -66,13 +66,23 @@ export default function DeckCreator() {
2: 'organization'
}
// Process cards: convert type field from number to string
const processedCards = (deckData.cards || []).map(card => {
// A kártya type mezője a deck type-ját tükrözi (backend így küldi)
// Ezért a deck type alapján állítjuk be
return {
...card,
type: typeMapping[deckData.type] || 'QUESTION'
}
})
setDeck({
id: deckData.id,
name: deckData.name || "Névtelen pakli",
type: typeMapping[deckData.type] || 'QUESTION',
privacy: ctypeMapping[deckData.ctype] || 'private',
description: deckData.description || "",
cards: deckData.cards || [],
cards: processedCards,
creationdate: deckData.creationdate,
updatedate: deckData.updatedate
})
@@ -93,6 +103,71 @@ export default function DeckCreator() {
const handleSaveDeck = async () => {
try {
// Szűrjük ki a nem megfelelő típusú kártyákat
const validCards = deck.cards.filter(card => card.type === deck.type)
const invalidCardsCount = deck.cards.length - validCards.length
// Ha voltak érvénytelen kártyák, frissítsük a state-et
if (invalidCardsCount > 0) {
setDeck(prev => ({
...prev,
cards: validCards
}))
// Értesítés a törölt kártyákról
notifyWarning(`${invalidCardsCount} db nem megfelelő típusú kártya törölve a mentés előtt.`)
}
// Tisztítsuk meg a kártyákat - konvertáljuk a backend által várt formátumra
const cleanedCards = validCards.map(card => {
// Card subType mapping to backend CardType enum
const cardTypeMapping = {
'quiz': 0, // QUIZ
'pairing': 1, // SENTENCE_PAIRING
'text': 2, // OWN_ANSWER
'truefalse': 3, // TRUE_FALSE
'closer': 4 // CLOSER
}
// Kezdjük az ID-val (ha van)
const cleanedCard = {}
if (card.id) {
cleanedCard.id = card.id
}
// Ha van subType (QUESTION típusú kártyáknál), akkor add hozzá a type mezőt
if (card.subType && cardTypeMapping[card.subType] !== undefined) {
cleanedCard.type = cardTypeMapping[card.subType]
}
// Text mező - kötelező, különböző forrásokból jöhet
cleanedCard.text = card.text || card.question || card.statement || ""
// Egyéb frontend mezők, amiket a backend is elfogad
if (card.question !== undefined) cleanedCard.question = card.question
if (card.statement !== undefined) cleanedCard.statement = card.statement
if (card.options !== undefined) cleanedCard.options = card.options
if (card.correctAnswer !== undefined) cleanedCard.correctAnswer = card.correctAnswer
if (card.leftItems !== undefined) cleanedCard.leftItems = card.leftItems
if (card.rightItems !== undefined) cleanedCard.rightItems = card.rightItems
if (card.correctPairs !== undefined) cleanedCard.correctPairs = card.correctPairs
if (card.acceptedAnswers !== undefined) cleanedCard.acceptedAnswers = card.acceptedAnswers
if (card.hint !== undefined) cleanedCard.hint = card.hint
// Answer mező (ha van)
if (card.answer !== undefined && card.answer !== null) {
cleanedCard.answer = card.answer
}
// Csak LUCK típusú kártyáknál add hozzá a consequence-t
if (deck.type === 'LUCK' && card.consequence) {
cleanedCard.consequence = card.consequence
}
return cleanedCard
})
// Típus konverzió backendhez
const typeMapping = {
'LUCK': 0,
@@ -110,7 +185,7 @@ export default function DeckCreator() {
name: deck.name?.trim() || "Névtelen pakli",
type: typeMapping[deck.type] ?? 2,
ctype: ctypeMapping[deck.privacy] ?? 1,
cards: deck.cards || []
cards: cleanedCards
}
// Note: description field is not sent to backend as it's not supported yet
@@ -184,17 +259,15 @@ export default function DeckCreator() {
return
}
const defaultConsequence = { type: 0, value: 1 }
const defaultWrongConsequence = { type: 1, value: 1 }
// Alapértelmezett consequence csak LUCK típusú kártyákhoz
const updatedCard = {
...cardData,
id: isCreatingCard ? Date.now() : cardData.id,
consequence: cardData.consequence || defaultConsequence,
...(cardData.type === 'QUESTION' || cardData.type === 'JOKER' || cardData.type === 'PAIRING'
? { wrongConsequence: cardData.wrongConsequence || defaultWrongConsequence }
: {}
)
id: isCreatingCard ? Date.now() : cardData.id
}
// Csak LUCK típusú kártyákhoz add hozzá a consequence-t
if (cardData.type === 'LUCK') {
updatedCard.consequence = cardData.consequence || { type: 0, value: 1 }
}
let wasInvalidCardDeleted = false