feat(politics): enhance office application feedback with required title details
This commit is contained in:
@@ -7197,6 +7197,27 @@ class FalukantService extends BaseService {
|
||||
const nameToId = new Map(allTypes.map((t) => [t.name, t.id]));
|
||||
const titleId = character.titleOfNobility ?? character.nobleTitle?.id;
|
||||
const allowedOfficeNames = await getAllowedOfficeTypeNamesByTitle(titleId);
|
||||
const [titles, officeEligibilityBenefits] = await Promise.all([
|
||||
TitleOfNobility.findAll({ attributes: ['id', 'labelTr', 'level'] }),
|
||||
TitleBenefit.findAll({
|
||||
where: { benefitType: 'office_eligibility' },
|
||||
attributes: ['titleId', 'parameters']
|
||||
})
|
||||
]);
|
||||
const titleById = new Map(titles.map((title) => [Number(title.id), title]));
|
||||
const minimumTitleByOfficeName = new Map();
|
||||
for (const benefit of officeEligibilityBenefits) {
|
||||
const officeNames = benefit.parameters?.officeTypeNames;
|
||||
const title = titleById.get(Number(benefit.titleId));
|
||||
if (!Array.isArray(officeNames) || !title) continue;
|
||||
|
||||
for (const officeName of officeNames) {
|
||||
const currentMinimum = minimumTitleByOfficeName.get(officeName);
|
||||
if (!currentMinimum || title.level < currentMinimum.level) {
|
||||
minimumTitleByOfficeName.set(officeName, title);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return allTypes.map((typeRow) => {
|
||||
const type = typeRow.get({ plain: true });
|
||||
@@ -7213,6 +7234,7 @@ class FalukantService extends BaseService {
|
||||
const prerequisitesMet = requiredOfficeNames.length === 0 || matchedOfficeNames.length > 0;
|
||||
const titleEligible = allowedOfficeNames.size === 0 || allowedOfficeNames.has(type.name);
|
||||
const canApplyNow = canApplyByAge && titleEligible && prerequisitesMet;
|
||||
const requiredTitle = minimumTitleByOfficeName.get(type.name);
|
||||
|
||||
return {
|
||||
officeTypeId: type.id,
|
||||
@@ -7225,6 +7247,8 @@ class FalukantService extends BaseService {
|
||||
matchedOfficeNames,
|
||||
prerequisitesMet,
|
||||
titleEligible,
|
||||
requiredTitleLabelTr: requiredTitle?.labelTr ?? null,
|
||||
characterGender: character.gender,
|
||||
canApplyByAge,
|
||||
canApplyNow
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user