Remove deprecated relationship change log migration and enhance error handling in FalukantService for partner retrieval

This commit is contained in:
Torsten Schulz (local)
2026-01-26 10:10:22 +01:00
parent bba68da488
commit 80b639b511
3 changed files with 118 additions and 134 deletions

View File

@@ -3158,16 +3158,23 @@ class FalukantService extends BaseService {
const step7Start = Date.now();
const ownAge = calcAge(character.birthdate);
if (ownAge >= 12 && family.relationships.length === 0) {
family.possiblePartners = await this.getPossiblePartners(character.id);
if (family.possiblePartners.length === 0) {
// Asynchron erstellen, nicht blockieren
this.createPossiblePartners(
character.id,
character.gender,
character.regionId,
character.titleOfNobility,
ownAge
).catch(err => console.error('[getFamily] Error creating partners (async):', err));
try {
family.possiblePartners = await this.getPossiblePartners(character.id);
if (family.possiblePartners.length === 0) {
// Asynchron erstellen, nicht blockieren
this.createPossiblePartners(
character.id,
character.gender,
character.regionId,
character.titleOfNobility,
ownAge
).catch(err => console.error('[getFamily] Error creating partners (async):', err));
}
} catch (err) {
// Fehler beim Laden nicht an Frontend durchreichen Seite bleibt nutzbar, Log für Analyse
console.error('[getFamily] getPossiblePartners failed (characterId=%s):', character.id, err?.message || err);
if (err?.stack) console.error('[getFamily] getPossiblePartners stack:', err.stack);
family.possiblePartners = [];
}
}
timings.step7_possible_partners = Date.now() - step7Start;
@@ -3399,32 +3406,43 @@ class FalukantService extends BaseService {
{
model: FalukantCharacter,
as: 'proposedCharacter',
required: false,
attributes: ['id', 'firstName', 'lastName', 'gender', 'regionId', 'birthdate'],
include: [
{ model: FalukantPredefineFirstname, as: 'definedFirstName', attributes: ['name'] },
{ model: FalukantPredefineLastname, as: 'definedLastName', attributes: ['name'] },
{ model: TitleOfNobility, as: 'nobleTitle', attributes: ['labelTr'] },
{ model: FalukantPredefineFirstname, as: 'definedFirstName', attributes: ['name'], required: false },
{ model: FalukantPredefineLastname, as: 'definedLastName', attributes: ['name'], required: false },
{ model: TitleOfNobility, as: 'nobleTitle', attributes: ['labelTr'], required: false },
],
},
],
});
return proposals
.filter(proposal => proposal.proposedCharacter !== null)
.map(proposal => {
const birthdate = new Date(proposal.proposedCharacter.birthdate);
const age = calcAge(birthdate);
return {
id: proposal.id,
requesterCharacterId: proposal.requesterCharacterId,
proposedCharacterId: proposal.proposedCharacter.id,
proposedCharacterName: `${proposal.proposedCharacter.definedFirstName?.name} ${proposal.proposedCharacter.definedLastName?.name}`,
proposedCharacterGender: proposal.proposedCharacter.gender,
proposedCharacterRegionId: proposal.proposedCharacter.regionId,
proposedCharacterAge: age,
proposedCharacterNobleTitle: proposal.proposedCharacter.nobleTitle?.labelTr || null,
const valid = [];
for (const proposal of proposals) {
if (proposal.proposedCharacter == null) {
console.warn('[getPossiblePartners] Proposal id=%s filtered out (proposedCharacterId=%s missing)', proposal.id, proposal.proposedCharacterId);
continue;
}
const pc = proposal.proposedCharacter;
const birthdate = pc.birthdate ? new Date(pc.birthdate) : null;
const age = birthdate ? calcAge(birthdate) : 0;
const name = `${pc.definedFirstName?.name ?? ''} ${pc.definedLastName?.name ?? ''}`.trim() || null;
if (!name) {
console.warn('[getPossiblePartners] Proposal id=%s filtered out (proposedCharacterId=%s has no name)', proposal.id, pc.id);
continue;
}
valid.push({
id: proposal.id,
requesterCharacterId: proposal.requesterCharacterId,
proposedCharacterId: pc.id,
proposedCharacterName: name,
proposedCharacterGender: pc.gender,
proposedCharacterRegionId: pc.regionId,
proposedCharacterAge: age,
proposedCharacterNobleTitle: pc.nobleTitle?.labelTr ?? null,
cost: proposal.cost,
};
});
});
}
return valid;
}
async createPossiblePartners(requestingCharacterId, requestingCharacterGender, requestingRegionId, requestingCharacterTitleOfNobility, ownAge) {