Add region relationship to ChurchOffice model: Establish associations between ChurchOffice and RegionData, allowing for better organization of church offices by region. Enhance logging in getChurchOverview method for improved debugging and error handling.
This commit is contained in:
@@ -4825,20 +4825,23 @@ class FalukantService extends BaseService {
|
||||
}
|
||||
|
||||
async getChurchOverview(hashedUserId) {
|
||||
const user = await getFalukantUserOrFail(hashedUserId);
|
||||
const character = await FalukantCharacter.findOne({
|
||||
where: { userId: user.id },
|
||||
attributes: ['id', 'regionId']
|
||||
});
|
||||
if (!character) {
|
||||
return [];
|
||||
}
|
||||
try {
|
||||
const user = await getFalukantUserOrFail(hashedUserId);
|
||||
const character = await FalukantCharacter.findOne({
|
||||
where: { userId: user.id },
|
||||
attributes: ['id', 'regionId']
|
||||
});
|
||||
if (!character) {
|
||||
console.log('[getChurchOverview] No character found for user', user.id);
|
||||
return [];
|
||||
}
|
||||
|
||||
// Alle relevanten Regionen (Region + Eltern) laden
|
||||
const relevantRegionIds = await this.getRegionAndParentIds(character.regionId);
|
||||
// Alle relevanten Regionen (Region + Eltern) laden
|
||||
const relevantRegionIds = await this.getRegionAndParentIds(character.regionId);
|
||||
console.log('[getChurchOverview] Relevant region IDs:', relevantRegionIds);
|
||||
|
||||
// Aktuell besetzte Kirchenämter in diesen Regionen laden
|
||||
const offices = await ChurchOffice.findAll({
|
||||
// Aktuell besetzte Kirchenämter in diesen Regionen laden
|
||||
const offices = await ChurchOffice.findAll({
|
||||
where: {
|
||||
regionId: {
|
||||
[Op.in]: relevantRegionIds
|
||||
@@ -4859,21 +4862,25 @@ class FalukantService extends BaseService {
|
||||
model: FalukantCharacter,
|
||||
as: 'holder',
|
||||
attributes: ['id', 'gender'],
|
||||
required: false,
|
||||
include: [
|
||||
{
|
||||
model: FalukantPredefineFirstname,
|
||||
as: 'definedFirstName',
|
||||
attributes: ['name']
|
||||
attributes: ['name'],
|
||||
required: false
|
||||
},
|
||||
{
|
||||
model: FalukantPredefineLastname,
|
||||
as: 'definedLastName',
|
||||
attributes: ['name']
|
||||
attributes: ['name'],
|
||||
required: false
|
||||
},
|
||||
{
|
||||
model: TitleOfNobility,
|
||||
as: 'nobleTitle',
|
||||
attributes: ['labelTr']
|
||||
attributes: ['labelTr'],
|
||||
required: false
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -4881,19 +4888,21 @@ class FalukantService extends BaseService {
|
||||
model: FalukantCharacter,
|
||||
as: 'supervisor',
|
||||
attributes: ['id', 'gender'],
|
||||
required: false,
|
||||
include: [
|
||||
{
|
||||
model: FalukantPredefineFirstname,
|
||||
as: 'definedFirstName',
|
||||
attributes: ['name']
|
||||
attributes: ['name'],
|
||||
required: false
|
||||
},
|
||||
{
|
||||
model: FalukantPredefineLastname,
|
||||
as: 'definedLastName',
|
||||
attributes: ['name']
|
||||
attributes: ['name'],
|
||||
required: false
|
||||
}
|
||||
],
|
||||
required: false
|
||||
]
|
||||
}
|
||||
],
|
||||
order: [
|
||||
@@ -4902,32 +4911,38 @@ class FalukantService extends BaseService {
|
||||
]
|
||||
});
|
||||
|
||||
return offices.map(office => {
|
||||
const o = office.get({ plain: true });
|
||||
return {
|
||||
id: o.id,
|
||||
officeType: {
|
||||
name: o.type?.name
|
||||
},
|
||||
region: {
|
||||
name: o.region?.name
|
||||
},
|
||||
character: o.holder
|
||||
? {
|
||||
id: o.holder.id,
|
||||
name: `${o.holder.definedFirstName?.name || ''} ${o.holder.definedLastName?.name || ''}`.trim(),
|
||||
gender: o.holder.gender,
|
||||
title: o.holder.nobleTitle?.labelTr
|
||||
}
|
||||
: null,
|
||||
supervisor: o.supervisor
|
||||
? {
|
||||
id: o.supervisor.id,
|
||||
name: `${o.supervisor.definedFirstName?.name || ''} ${o.supervisor.definedLastName?.name || ''}`.trim()
|
||||
}
|
||||
: null
|
||||
};
|
||||
});
|
||||
console.log('[getChurchOverview] Found', offices.length, 'offices');
|
||||
return offices.map(office => {
|
||||
const o = office.get({ plain: true });
|
||||
return {
|
||||
id: o.id,
|
||||
officeType: {
|
||||
name: o.type?.name
|
||||
},
|
||||
region: {
|
||||
name: o.region?.name
|
||||
},
|
||||
character: o.holder
|
||||
? {
|
||||
id: o.holder.id,
|
||||
name: `${o.holder.definedFirstName?.name || ''} ${o.holder.definedLastName?.name || ''}`.trim(),
|
||||
gender: o.holder.gender,
|
||||
title: o.holder.nobleTitle?.labelTr
|
||||
}
|
||||
: null,
|
||||
supervisor: o.supervisor
|
||||
? {
|
||||
id: o.supervisor.id,
|
||||
name: `${o.supervisor.definedFirstName?.name || ''} ${o.supervisor.definedLastName?.name || ''}`.trim()
|
||||
}
|
||||
: null
|
||||
};
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[getChurchOverview] Error:', error);
|
||||
console.error('[getChurchOverview] Stack:', error.stack);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async getAvailableChurchPositions(hashedUserId) {
|
||||
|
||||
Reference in New Issue
Block a user