Enhance FalukantService error handling for debtors prison records: Implement try-catch logic to manage potential database errors when retrieving debtor records. Update nobility title requirements to include new house position values for various titles, ensuring consistency across the application. Adjust initialization script for title requirements to reflect these changes.
This commit is contained in:
@@ -5205,10 +5205,28 @@ class FalukantService extends BaseService {
|
|||||||
return this.serializeDebtorsPrisonRecord(null);
|
return this.serializeDebtorsPrisonRecord(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
const records = await DebtorsPrism.findAll({
|
let records = [];
|
||||||
|
try {
|
||||||
|
records = await DebtorsPrism.findAll({
|
||||||
where: { characterId: character.id },
|
where: { characterId: character.id },
|
||||||
order: [['createdAt', 'DESC']]
|
order: [['createdAt', 'DESC']]
|
||||||
});
|
});
|
||||||
|
} catch (error) {
|
||||||
|
const message = String(error?.original?.message || error?.message || '');
|
||||||
|
const missingLegacyDebtColumn =
|
||||||
|
message.includes('column') &&
|
||||||
|
message.includes('status') &&
|
||||||
|
message.includes('debtors_prism');
|
||||||
|
|
||||||
|
if (!missingLegacyDebtColumn) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Production can temporarily lag behind the expanded debtors_prism schema.
|
||||||
|
// In that case we degrade to "no active debtors prison state" instead of
|
||||||
|
// breaking unrelated Falukant endpoints such as family or gifts.
|
||||||
|
records = [];
|
||||||
|
}
|
||||||
|
|
||||||
const activeRecord = records.find((record) => record.status !== 'released' && !record.releasedAt)
|
const activeRecord = records.find((record) => record.status !== 'released' && !record.releasedAt)
|
||||||
|| records[0]
|
|| records[0]
|
||||||
|
|||||||
@@ -29,77 +29,87 @@ JOIN (
|
|||||||
VALUES
|
VALUES
|
||||||
('civil', 'money', 5000::numeric),
|
('civil', 'money', 5000::numeric),
|
||||||
('civil', 'cost', 500::numeric),
|
('civil', 'cost', 500::numeric),
|
||||||
|
('civil', 'house_position', 2::numeric),
|
||||||
|
|
||||||
('sir', 'branches', 2::numeric),
|
('sir', 'branches', 2::numeric),
|
||||||
('sir', 'cost', 1000::numeric),
|
('sir', 'cost', 1000::numeric),
|
||||||
|
('sir', 'house_position', 3::numeric),
|
||||||
|
|
||||||
('townlord', 'cost', 3000::numeric),
|
('townlord', 'cost', 3000::numeric),
|
||||||
('townlord', 'money', 12000::numeric),
|
('townlord', 'money', 12000::numeric),
|
||||||
('townlord', 'reputation', 18::numeric),
|
('townlord', 'reputation', 18::numeric),
|
||||||
|
('townlord', 'house_position', 4::numeric),
|
||||||
|
|
||||||
('by', 'cost', 5000::numeric),
|
('by', 'cost', 5000::numeric),
|
||||||
('by', 'money', 18000::numeric),
|
('by', 'money', 18000::numeric),
|
||||||
('by', 'house_position', 1::numeric),
|
('by', 'house_position', 4::numeric),
|
||||||
|
|
||||||
('landlord', 'cost', 7500::numeric),
|
('landlord', 'cost', 7500::numeric),
|
||||||
('landlord', 'money', 26000::numeric),
|
('landlord', 'money', 26000::numeric),
|
||||||
('landlord', 'reputation', 24::numeric),
|
('landlord', 'reputation', 24::numeric),
|
||||||
|
('landlord', 'house_position', 4::numeric),
|
||||||
('landlord', 'house_condition', 60::numeric),
|
('landlord', 'house_condition', 60::numeric),
|
||||||
|
|
||||||
('knight', 'cost', 11000::numeric),
|
('knight', 'cost', 11000::numeric),
|
||||||
('knight', 'money', 38000::numeric),
|
('knight', 'money', 38000::numeric),
|
||||||
('knight', 'office_rank_any', 1::numeric),
|
('knight', 'office_rank_any', 1::numeric),
|
||||||
|
('knight', 'house_position', 5::numeric),
|
||||||
|
|
||||||
('baron', 'branches', 4::numeric),
|
('baron', 'branches', 4::numeric),
|
||||||
('baron', 'cost', 16000::numeric),
|
('baron', 'cost', 16000::numeric),
|
||||||
('baron', 'money', 55000::numeric),
|
('baron', 'money', 55000::numeric),
|
||||||
('baron', 'house_position', 2::numeric),
|
('baron', 'house_position', 5::numeric),
|
||||||
|
|
||||||
('count', 'cost', 23000::numeric),
|
('count', 'cost', 23000::numeric),
|
||||||
('count', 'money', 80000::numeric),
|
('count', 'money', 80000::numeric),
|
||||||
('count', 'reputation', 32::numeric),
|
('count', 'reputation', 32::numeric),
|
||||||
|
('count', 'house_position', 5::numeric),
|
||||||
('count', 'house_condition', 68::numeric),
|
('count', 'house_condition', 68::numeric),
|
||||||
|
|
||||||
('palsgrave', 'cost', 32000::numeric),
|
('palsgrave', 'cost', 32000::numeric),
|
||||||
('palsgrave', 'money', 115000::numeric),
|
('palsgrave', 'money', 115000::numeric),
|
||||||
('palsgrave', 'office_rank_any', 2::numeric),
|
('palsgrave', 'office_rank_any', 2::numeric),
|
||||||
('palsgrave', 'house_position', 3::numeric),
|
('palsgrave', 'house_position', 6::numeric),
|
||||||
|
|
||||||
('margrave', 'cost', 45000::numeric),
|
('margrave', 'cost', 45000::numeric),
|
||||||
('margrave', 'money', 165000::numeric),
|
('margrave', 'money', 165000::numeric),
|
||||||
('margrave', 'reputation', 40::numeric),
|
('margrave', 'reputation', 40::numeric),
|
||||||
|
('margrave', 'house_position', 6::numeric),
|
||||||
('margrave', 'house_condition', 72::numeric),
|
('margrave', 'house_condition', 72::numeric),
|
||||||
('margrave', 'lover_count_min', 1::numeric),
|
('margrave', 'lover_count_min', 1::numeric),
|
||||||
|
|
||||||
('landgrave', 'cost', 62000::numeric),
|
('landgrave', 'cost', 62000::numeric),
|
||||||
('landgrave', 'money', 230000::numeric),
|
('landgrave', 'money', 230000::numeric),
|
||||||
('landgrave', 'office_rank_any', 3::numeric),
|
('landgrave', 'office_rank_any', 3::numeric),
|
||||||
('landgrave', 'house_position', 4::numeric),
|
('landgrave', 'house_position', 6::numeric),
|
||||||
|
|
||||||
('ruler', 'cost', 85000::numeric),
|
('ruler', 'cost', 85000::numeric),
|
||||||
('ruler', 'money', 320000::numeric),
|
('ruler', 'money', 320000::numeric),
|
||||||
('ruler', 'reputation', 48::numeric),
|
('ruler', 'reputation', 48::numeric),
|
||||||
|
('ruler', 'house_position', 7::numeric),
|
||||||
('ruler', 'house_condition', 76::numeric),
|
('ruler', 'house_condition', 76::numeric),
|
||||||
|
|
||||||
('elector', 'cost', 115000::numeric),
|
('elector', 'cost', 115000::numeric),
|
||||||
('elector', 'money', 440000::numeric),
|
('elector', 'money', 440000::numeric),
|
||||||
('elector', 'office_rank_political', 4::numeric),
|
('elector', 'office_rank_political', 4::numeric),
|
||||||
('elector', 'house_position', 5::numeric),
|
('elector', 'house_position', 7::numeric),
|
||||||
('elector', 'lover_count_max', 3::numeric),
|
('elector', 'lover_count_max', 3::numeric),
|
||||||
|
|
||||||
('imperial-prince', 'cost', 155000::numeric),
|
('imperial-prince', 'cost', 155000::numeric),
|
||||||
('imperial-prince', 'money', 600000::numeric),
|
('imperial-prince', 'money', 600000::numeric),
|
||||||
('imperial-prince', 'reputation', 56::numeric),
|
('imperial-prince', 'reputation', 56::numeric),
|
||||||
|
('imperial-prince', 'house_position', 7::numeric),
|
||||||
('imperial-prince', 'house_condition', 80::numeric),
|
('imperial-prince', 'house_condition', 80::numeric),
|
||||||
|
|
||||||
('duke', 'cost', 205000::numeric),
|
('duke', 'cost', 205000::numeric),
|
||||||
('duke', 'money', 820000::numeric),
|
('duke', 'money', 820000::numeric),
|
||||||
('duke', 'office_rank_any', 5::numeric),
|
('duke', 'office_rank_any', 5::numeric),
|
||||||
('duke', 'house_position', 6::numeric),
|
('duke', 'house_position', 8::numeric),
|
||||||
|
|
||||||
('grand-duke', 'cost', 270000::numeric),
|
('grand-duke', 'cost', 270000::numeric),
|
||||||
('grand-duke', 'money', 1120000::numeric),
|
('grand-duke', 'money', 1120000::numeric),
|
||||||
('grand-duke', 'reputation', 64::numeric),
|
('grand-duke', 'reputation', 64::numeric),
|
||||||
|
('grand-duke', 'house_position', 8::numeric),
|
||||||
('grand-duke', 'house_condition', 84::numeric),
|
('grand-duke', 'house_condition', 84::numeric),
|
||||||
('grand-duke', 'lover_count_min', 1::numeric),
|
('grand-duke', 'lover_count_min', 1::numeric),
|
||||||
('grand-duke', 'lover_count_max', 3::numeric),
|
('grand-duke', 'lover_count_max', 3::numeric),
|
||||||
@@ -107,12 +117,12 @@ JOIN (
|
|||||||
('prince-regent', 'cost', 360000::numeric),
|
('prince-regent', 'cost', 360000::numeric),
|
||||||
('prince-regent', 'money', 1520000::numeric),
|
('prince-regent', 'money', 1520000::numeric),
|
||||||
('prince-regent', 'office_rank_any', 6::numeric),
|
('prince-regent', 'office_rank_any', 6::numeric),
|
||||||
('prince-regent', 'house_position', 7::numeric),
|
('prince-regent', 'house_position', 9::numeric),
|
||||||
|
|
||||||
('king', 'cost', 500000::numeric),
|
('king', 'cost', 500000::numeric),
|
||||||
('king', 'money', 2100000::numeric),
|
('king', 'money', 2100000::numeric),
|
||||||
('king', 'reputation', 72::numeric),
|
('king', 'reputation', 72::numeric),
|
||||||
('king', 'house_position', 8::numeric),
|
('king', 'house_position', 9::numeric),
|
||||||
('king', 'house_condition', 88::numeric),
|
('king', 'house_condition', 88::numeric),
|
||||||
('king', 'lover_count_min', 1::numeric),
|
('king', 'lover_count_min', 1::numeric),
|
||||||
('king', 'lover_count_max', 4::numeric)
|
('king', 'lover_count_max', 4::numeric)
|
||||||
|
|||||||
@@ -297,24 +297,24 @@ async function initializeFalukantProducts() {
|
|||||||
|
|
||||||
async function initializeFalukantTitleRequirements() {
|
async function initializeFalukantTitleRequirements() {
|
||||||
const titleRequirements = [
|
const titleRequirements = [
|
||||||
{ labelTr: "civil", requirements: [{ type: "money", value: 5000 }, { type: "cost", value: 500 }] },
|
{ labelTr: "civil", requirements: [{ type: "money", value: 5000 }, { type: "cost", value: 500 }, { type: "house_position", value: 2 }] },
|
||||||
{ labelTr: "sir", requirements: [{ type: "branches", value: 2 }, { type: "cost", value: 1000 }] },
|
{ labelTr: "sir", requirements: [{ type: "branches", value: 2 }, { type: "cost", value: 1000 }, { type: "house_position", value: 3 }] },
|
||||||
{ labelTr: "townlord", requirements: [{ type: "cost", value: 3000 }, { type: "money", value: 12000 }, { type: "reputation", value: 18 }] },
|
{ labelTr: "townlord", requirements: [{ type: "cost", value: 3000 }, { type: "money", value: 12000 }, { type: "reputation", value: 18 }, { type: "house_position", value: 4 }] },
|
||||||
{ labelTr: "by", requirements: [{ type: "cost", value: 5000 }, { type: "money", value: 18000 }, { type: "house_position", value: 1 }] },
|
{ labelTr: "by", requirements: [{ type: "cost", value: 5000 }, { type: "money", value: 18000 }, { type: "house_position", value: 4 }] },
|
||||||
{ labelTr: "landlord", requirements: [{ type: "cost", value: 7500 }, { type: "money", value: 26000 }, { type: "reputation", value: 24 }, { type: "house_condition", value: 60 }] },
|
{ labelTr: "landlord", requirements: [{ type: "cost", value: 7500 }, { type: "money", value: 26000 }, { type: "reputation", value: 24 }, { type: "house_position", value: 4 }, { type: "house_condition", value: 60 }] },
|
||||||
{ labelTr: "knight", requirements: [{ type: "cost", value: 11000 }, { type: "money", value: 38000 }, { type: "office_rank_any", value: 1 }] },
|
{ labelTr: "knight", requirements: [{ type: "cost", value: 11000 }, { type: "money", value: 38000 }, { type: "office_rank_any", value: 1 }, { type: "house_position", value: 5 }] },
|
||||||
{ labelTr: "baron", requirements: [{ type: "branches", value: 4 }, { type: "cost", value: 16000 }, { type: "money", value: 55000 }, { type: "house_position", value: 2 }] },
|
{ labelTr: "baron", requirements: [{ type: "branches", value: 4 }, { type: "cost", value: 16000 }, { type: "money", value: 55000 }, { type: "house_position", value: 5 }] },
|
||||||
{ labelTr: "count", requirements: [{ type: "cost", value: 23000 }, { type: "money", value: 80000 }, { type: "reputation", value: 32 }, { type: "house_condition", value: 68 }] },
|
{ labelTr: "count", requirements: [{ type: "cost", value: 23000 }, { type: "money", value: 80000 }, { type: "reputation", value: 32 }, { type: "house_position", value: 5 }, { type: "house_condition", value: 68 }] },
|
||||||
{ labelTr: "palsgrave", requirements: [{ type: "cost", value: 32000 }, { type: "money", value: 115000 }, { type: "office_rank_any", value: 2 }, { type: "house_position", value: 3 }] },
|
{ labelTr: "palsgrave", requirements: [{ type: "cost", value: 32000 }, { type: "money", value: 115000 }, { type: "office_rank_any", value: 2 }, { type: "house_position", value: 6 }] },
|
||||||
{ labelTr: "margrave", requirements: [{ type: "cost", value: 45000 }, { type: "money", value: 165000 }, { type: "reputation", value: 40 }, { type: "house_condition", value: 72 }, { type: "lover_count_min", value: 1 }] },
|
{ labelTr: "margrave", requirements: [{ type: "cost", value: 45000 }, { type: "money", value: 165000 }, { type: "reputation", value: 40 }, { type: "house_position", value: 6 }, { type: "house_condition", value: 72 }, { type: "lover_count_min", value: 1 }] },
|
||||||
{ labelTr: "landgrave", requirements: [{ type: "cost", value: 62000 }, { type: "money", value: 230000 }, { type: "office_rank_any", value: 3 }, { type: "house_position", value: 4 }] },
|
{ labelTr: "landgrave", requirements: [{ type: "cost", value: 62000 }, { type: "money", value: 230000 }, { type: "office_rank_any", value: 3 }, { type: "house_position", value: 6 }] },
|
||||||
{ labelTr: "ruler", requirements: [{ type: "cost", value: 85000 }, { type: "money", value: 320000 }, { type: "reputation", value: 48 }, { type: "house_condition", value: 76 }] },
|
{ labelTr: "ruler", requirements: [{ type: "cost", value: 85000 }, { type: "money", value: 320000 }, { type: "reputation", value: 48 }, { type: "house_position", value: 7 }, { type: "house_condition", value: 76 }] },
|
||||||
{ labelTr: "elector", requirements: [{ type: "cost", value: 115000 }, { type: "money", value: 440000 }, { type: "office_rank_political", value: 4 }, { type: "house_position", value: 5 }, { type: "lover_count_max", value: 3 }] },
|
{ labelTr: "elector", requirements: [{ type: "cost", value: 115000 }, { type: "money", value: 440000 }, { type: "office_rank_political", value: 4 }, { type: "house_position", value: 7 }, { type: "lover_count_max", value: 3 }] },
|
||||||
{ labelTr: "imperial-prince", requirements: [{ type: "cost", value: 155000 }, { type: "money", value: 600000 }, { type: "reputation", value: 56 }, { type: "house_condition", value: 80 }] },
|
{ labelTr: "imperial-prince", requirements: [{ type: "cost", value: 155000 }, { type: "money", value: 600000 }, { type: "reputation", value: 56 }, { type: "house_position", value: 7 }, { type: "house_condition", value: 80 }] },
|
||||||
{ labelTr: "duke", requirements: [{ type: "cost", value: 205000 }, { type: "money", value: 820000 }, { type: "office_rank_any", value: 5 }, { type: "house_position", value: 6 }] },
|
{ labelTr: "duke", requirements: [{ type: "cost", value: 205000 }, { type: "money", value: 820000 }, { type: "office_rank_any", value: 5 }, { type: "house_position", value: 8 }] },
|
||||||
{ labelTr: "grand-duke",requirements: [{ type: "cost", value: 270000 }, { type: "money", value: 1120000 }, { type: "reputation", value: 64 }, { type: "house_condition", value: 84 }, { type: "lover_count_min", value: 1 }, { type: "lover_count_max", value: 3 }] },
|
{ labelTr: "grand-duke",requirements: [{ type: "cost", value: 270000 }, { type: "money", value: 1120000 }, { type: "reputation", value: 64 }, { type: "house_position", value: 8 }, { type: "house_condition", value: 84 }, { type: "lover_count_min", value: 1 }, { type: "lover_count_max", value: 3 }] },
|
||||||
{ labelTr: "prince-regent", requirements: [{ type: "cost", value: 360000 }, { type: "money", value: 1520000 }, { type: "office_rank_any", value: 6 }, { type: "house_position", value: 7 }] },
|
{ labelTr: "prince-regent", requirements: [{ type: "cost", value: 360000 }, { type: "money", value: 1520000 }, { type: "office_rank_any", value: 6 }, { type: "house_position", value: 9 }] },
|
||||||
{ labelTr: "king", requirements: [{ type: "cost", value: 500000 }, { type: "money", value: 2100000 }, { type: "reputation", value: 72 }, { type: "house_position", value: 8 }, { type: "house_condition", value: 88 }, { type: "lover_count_min", value: 1 }, { type: "lover_count_max", value: 4 }] },
|
{ labelTr: "king", requirements: [{ type: "cost", value: 500000 }, { type: "money", value: 2100000 }, { type: "reputation", value: 72 }, { type: "house_position", value: 9 }, { type: "house_condition", value: 88 }, { type: "lover_count_min", value: 1 }, { type: "lover_count_max", value: 4 }] },
|
||||||
];
|
];
|
||||||
|
|
||||||
const titles = await TitleOfNobility.findAll();
|
const titles = await TitleOfNobility.findAll();
|
||||||
|
|||||||
Reference in New Issue
Block a user