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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user