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:
Torsten Schulz (local)
2026-01-12 13:48:37 +01:00
parent 7d59dbcf84
commit 9273066f61
2 changed files with 21 additions and 5 deletions

View File

@@ -2973,7 +2973,7 @@ class FalukantService extends BaseService {
const allFirstNameIds = [...new Set([...relationshipFirstNameIds, ...childFirstNameIds])];
// 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({
where: { id: { [Op.in]: allFirstNameIds } },
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
const firstNameMap = new Map(firstNames.map(fn => [fn.id, fn.name]));
const lastNameMap = new Map(lastNames.map(ln => [ln.id, ln.name]));
const titleMap = new Map(titles.map(t => [t.id, t.labelTr]));
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();
traits.forEach(t => {
traitRelations.forEach(t => {
if (!traitsMap.has(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;
@@ -3025,6 +3036,7 @@ class FalukantService extends BaseService {
firstName: firstNameMap.get(char2.firstName) || 'Unknown',
nobleTitle: titleMap.get(char2.titleOfNobility) || '',
mood: moodMap.get(char2.moodId) || null,
moodId: char2.moodId,
traits: traitsMap.get(char2.id) || []
} : null,
relationshipType: r.relationshipType?.tr || ''