4.0 KiB
4.0 KiB
Church Models - Übersicht für Daemon-Entwicklung
1. ChurchOfficeType (falukant_type.church_office_type)
Schema: falukant_type
Tabelle: church_office_type
Zweck: Definiert die verschiedenen Kirchenämter-Typen
{
id: INTEGER (PK, auto-increment)
name: STRING (z.B. "pope", "cardinal", "lay-preacher")
seatsPerRegion: INTEGER (Anzahl verfügbarer Plätze pro Region)
regionType: STRING (z.B. "country", "duchy", "city")
hierarchyLevel: INTEGER (0-8, höhere Zahl = höhere Position)
}
Beziehungen:
hasManyChurchOffice (alsoffices)hasManyChurchApplication (alsapplications)hasManyChurchOfficeRequirement (alsrequirements)
2. ChurchOfficeRequirement (falukant_predefine.church_office_requirement)
Schema: falukant_predefine
Tabelle: church_office_requirement
Zweck: Definiert Voraussetzungen für Kirchenämter
{
id: INTEGER (PK, auto-increment)
officeTypeId: INTEGER (FK -> ChurchOfficeType.id)
prerequisiteOfficeTypeId: INTEGER (FK -> ChurchOfficeType.id, nullable)
minTitleLevel: INTEGER (nullable, optional)
}
Beziehungen:
belongsToChurchOfficeType (alsofficeType)belongsToChurchOfficeType (alsprerequisiteOfficeType)
3. ChurchOffice (falukant_data.church_office)
Schema: falukant_data
Tabelle: church_office
Zweck: Speichert tatsächlich besetzte Kirchenämter
{
id: INTEGER (PK, auto-increment)
officeTypeId: INTEGER (FK -> ChurchOfficeType.id)
characterId: INTEGER (FK -> FalukantCharacter.id)
regionId: INTEGER (FK -> RegionData.id)
supervisorId: INTEGER (FK -> FalukantCharacter.id, nullable)
createdAt: DATE
updatedAt: DATE
}
Beziehungen:
belongsToChurchOfficeType (alstype)belongsToFalukantCharacter (alsholder)belongsToFalukantCharacter (alssupervisor)belongsToRegionData (alsregion)
4. ChurchApplication (falukant_data.church_application)
Schema: falukant_data
Tabelle: church_application
Zweck: Speichert Bewerbungen für Kirchenämter
{
id: INTEGER (PK, auto-increment)
officeTypeId: INTEGER (FK -> ChurchOfficeType.id)
characterId: INTEGER (FK -> FalukantCharacter.id)
regionId: INTEGER (FK -> RegionData.id)
supervisorId: INTEGER (FK -> FalukantCharacter.id)
status: ENUM('pending', 'approved', 'rejected')
decisionDate: DATE (nullable)
createdAt: DATE
updatedAt: DATE
}
Beziehungen:
belongsToChurchOfficeType (alsofficeType)belongsToFalukantCharacter (alsapplicant)belongsToFalukantCharacter (alssupervisor)belongsToRegionData (alsregion)
Zusätzlich benötigte Models (für Daemon)
RegionData (falukant_data.region)
- Wird für
regionIdin ChurchOffice und ChurchApplication benötigt - Enthält
regionType(country, duchy, markgravate, shire, county, city) - Enthält
parentIdfür Hierarchie
FalukantCharacter (falukant_data.character)
- Wird für
characterId(Inhaber/Bewerber) benötigt - Wird für
supervisorIdbenötigt
Wichtige Queries für Daemon
Verfügbare Positionen finden
SELECT cot.*, COUNT(co.id) as occupied_seats
FROM falukant_type.church_office_type cot
LEFT JOIN falukant_data.church_office co
ON cot.id = co.office_type_id
AND co.region_id = ?
WHERE cot.region_type = ?
GROUP BY cot.id
HAVING COUNT(co.id) < cot.seats_per_region
Supervisor finden
SELECT co.*
FROM falukant_data.church_office co
JOIN falukant_type.church_office_type cot ON co.office_type_id = cot.id
WHERE co.region_id = ?
AND cot.hierarchy_level > (
SELECT hierarchy_level
FROM falukant_type.church_office_type
WHERE id = ?
)
ORDER BY cot.hierarchy_level ASC
LIMIT 1
Voraussetzungen prüfen
SELECT cor.*
FROM falukant_predefine.church_office_requirement cor
WHERE cor.office_type_id = ?
Bewerbungen für Supervisor
SELECT ca.*
FROM falukant_data.church_application ca
WHERE ca.supervisor_id = ?
AND ca.status = 'pending'