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])];
|
||||
|
||||
// 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 || ''
|
||||
|
||||
Reference in New Issue
Block a user