Refactor trait handling in FalukantService and FamilyView for improved data consistency
- Updated trait loading in FalukantService to include trait types, enhancing the mapping of traits to characters. - Adjusted FamilyView to utilize the new trait structure, ensuring accurate retrieval of traits associated with characters. - Improved null checks for relationships to prevent potential errors during data access.
This commit is contained in:
@@ -2973,7 +2973,7 @@ class FalukantService extends BaseService {
|
|||||||
const allFirstNameIds = [...new Set([...relationshipFirstNameIds, ...childFirstNameIds])];
|
const allFirstNameIds = [...new Set([...relationshipFirstNameIds, ...childFirstNameIds])];
|
||||||
|
|
||||||
// Batch-Load alle benötigten Daten parallel
|
// Batch-Load alle benötigten Daten parallel
|
||||||
const [firstNames, lastNames, titles, traits, moods] = await Promise.all([
|
const [firstNames, lastNames, titles, traitRelations, moods] = await Promise.all([
|
||||||
allFirstNameIds.length > 0 ? FalukantPredefineFirstname.findAll({
|
allFirstNameIds.length > 0 ? FalukantPredefineFirstname.findAll({
|
||||||
where: { id: { [Op.in]: allFirstNameIds } },
|
where: { id: { [Op.in]: allFirstNameIds } },
|
||||||
attributes: ['id', 'name']
|
attributes: ['id', 'name']
|
||||||
@@ -2996,17 +2996,28 @@ class FalukantService extends BaseService {
|
|||||||
}) : []
|
}) : []
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Sammle alle eindeutigen Trait-IDs und lade die Trait-Types
|
||||||
|
const allTraitIds = [...new Set(traitRelations.map(t => t.traitId))];
|
||||||
|
const traitTypes = allTraitIds.length > 0 ? await CharacterTrait.findAll({
|
||||||
|
where: { id: { [Op.in]: allTraitIds } },
|
||||||
|
attributes: ['id', 'tr']
|
||||||
|
}) : [];
|
||||||
|
|
||||||
// Erstelle Maps für schnellen Zugriff
|
// Erstelle Maps für schnellen Zugriff
|
||||||
const firstNameMap = new Map(firstNames.map(fn => [fn.id, fn.name]));
|
const firstNameMap = new Map(firstNames.map(fn => [fn.id, fn.name]));
|
||||||
const lastNameMap = new Map(lastNames.map(ln => [ln.id, ln.name]));
|
const lastNameMap = new Map(lastNames.map(ln => [ln.id, ln.name]));
|
||||||
const titleMap = new Map(titles.map(t => [t.id, t.labelTr]));
|
const titleMap = new Map(titles.map(t => [t.id, t.labelTr]));
|
||||||
const moodMap = new Map(moods.map(m => [m.id, m.tr]));
|
const moodMap = new Map(moods.map(m => [m.id, m.tr]));
|
||||||
|
const traitTypeMap = new Map(traitTypes.map(t => [t.id, { id: t.id, tr: t.tr }]));
|
||||||
const traitsMap = new Map();
|
const traitsMap = new Map();
|
||||||
traits.forEach(t => {
|
traitRelations.forEach(t => {
|
||||||
if (!traitsMap.has(t.characterId)) {
|
if (!traitsMap.has(t.characterId)) {
|
||||||
traitsMap.set(t.characterId, []);
|
traitsMap.set(t.characterId, []);
|
||||||
}
|
}
|
||||||
traitsMap.get(t.characterId).push(t.traitId);
|
const traitObj = traitTypeMap.get(t.traitId);
|
||||||
|
if (traitObj) {
|
||||||
|
traitsMap.get(t.characterId).push(traitObj);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
timings.step3_batch_loading = Date.now() - step3Start;
|
timings.step3_batch_loading = Date.now() - step3Start;
|
||||||
|
|
||||||
@@ -3025,6 +3036,7 @@ class FalukantService extends BaseService {
|
|||||||
firstName: firstNameMap.get(char2.firstName) || 'Unknown',
|
firstName: firstNameMap.get(char2.firstName) || 'Unknown',
|
||||||
nobleTitle: titleMap.get(char2.titleOfNobility) || '',
|
nobleTitle: titleMap.get(char2.titleOfNobility) || '',
|
||||||
mood: moodMap.get(char2.moodId) || null,
|
mood: moodMap.get(char2.moodId) || null,
|
||||||
|
moodId: char2.moodId,
|
||||||
traits: traitsMap.get(char2.id) || []
|
traits: traitsMap.get(char2.id) || []
|
||||||
} : null,
|
} : null,
|
||||||
relationshipType: r.relationshipType?.tr || ''
|
relationshipType: r.relationshipType?.tr || ''
|
||||||
|
|||||||
@@ -274,12 +274,16 @@ export default {
|
|||||||
|
|
||||||
getEffect(gift) {
|
getEffect(gift) {
|
||||||
const relationship = this.relationships[0];
|
const relationship = this.relationships[0];
|
||||||
|
if (!relationship || !relationship.character2) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
const partner = relationship.character2;
|
const partner = relationship.character2;
|
||||||
const currentMoodId = partner.mood?.id ?? partner.mood_id;
|
const currentMoodId = partner.moodId;
|
||||||
const moodEntry = gift.moodsAffects.find(ma => ma.mood_id === currentMoodId);
|
const moodEntry = gift.moodsAffects.find(ma => ma.mood_id === currentMoodId);
|
||||||
const moodValue = moodEntry ? moodEntry.suitability : 0;
|
const moodValue = moodEntry ? moodEntry.suitability : 0;
|
||||||
let highestCharacterValue = 0;
|
let highestCharacterValue = 0;
|
||||||
for (const trait of partner.characterTrait) {
|
// traits ist ein Array von Trait-Objekten mit id und tr
|
||||||
|
for (const trait of partner.traits || []) {
|
||||||
const charEntry = gift.charactersAffects.find(ca => ca.trait_id === trait.id);
|
const charEntry = gift.charactersAffects.find(ca => ca.trait_id === trait.id);
|
||||||
if (charEntry && charEntry.suitability > highestCharacterValue) {
|
if (charEntry && charEntry.suitability > highestCharacterValue) {
|
||||||
highestCharacterValue = charEntry.suitability;
|
highestCharacterValue = charEntry.suitability;
|
||||||
|
|||||||
Reference in New Issue
Block a user