Refactor proposal mapping in FalukantService to handle null characters

- Updated the proposal mapping logic to filter out proposals with null proposed characters, enhancing data integrity.
- Ensured that noble title is safely accessed with a fallback to null, improving robustness in character data handling.
This commit is contained in:
Torsten Schulz (local)
2026-01-14 14:57:45 +01:00
parent 52c7f1c7ba
commit d1359ccc36
2 changed files with 119 additions and 12 deletions

View File

@@ -3335,18 +3335,20 @@ class FalukantService extends BaseService {
}, },
], ],
}); });
return proposals.map(proposal => { return proposals
const birthdate = new Date(proposal.proposedCharacter.birthdate); .filter(proposal => proposal.proposedCharacter !== null)
const age = calcAge(birthdate); .map(proposal => {
return { const birthdate = new Date(proposal.proposedCharacter.birthdate);
id: proposal.id, const age = calcAge(birthdate);
requesterCharacterId: proposal.requesterCharacterId, return {
proposedCharacterId: proposal.proposedCharacter.id, id: proposal.id,
proposedCharacterName: `${proposal.proposedCharacter.definedFirstName?.name} ${proposal.proposedCharacter.definedLastName?.name}`, requesterCharacterId: proposal.requesterCharacterId,
proposedCharacterGender: proposal.proposedCharacter.gender, proposedCharacterId: proposal.proposedCharacter.id,
proposedCharacterRegionId: proposal.proposedCharacter.regionId, proposedCharacterName: `${proposal.proposedCharacter.definedFirstName?.name} ${proposal.proposedCharacter.definedLastName?.name}`,
proposedCharacterAge: age, proposedCharacterGender: proposal.proposedCharacter.gender,
proposedCharacterNobleTitle: proposal.proposedCharacter.nobleTitle.labelTr, proposedCharacterRegionId: proposal.proposedCharacter.regionId,
proposedCharacterAge: age,
proposedCharacterNobleTitle: proposal.proposedCharacter.nobleTitle?.labelTr || null,
cost: proposal.cost, cost: proposal.cost,
}; };
}); });

105
websocket-config-guide.md Normal file
View File

@@ -0,0 +1,105 @@
# WebSocket-Konfiguration für direkte Verbindungen
## Port-Aufteilung
- **Port 2020**: API (HTTP, intern, über Apache-Proxy)
- **Port 4443**: Socket.io (HTTPS, extern, direkt erreichbar)
- **Port 4551**: Daemon-WebSocket (HTTPS, extern, direkt erreichbar)
## Umgebungsvariablen für Backend-Server (Socket.io auf Port 4443)
Füge diese Variablen zur Backend `.env` oder Systemd-Service-Datei hinzu:
```bash
# Socket.io HTTPS-Server
SOCKET_IO_PORT=4443
SOCKET_IO_TLS=1
SOCKET_IO_TLS_KEY_PATH=/etc/letsencrypt/live/www.your-part.de/privkey.pem
SOCKET_IO_TLS_CERT_PATH=/etc/letsencrypt/live/www.your-part.de/fullchain.pem
# Optional:
# SOCKET_IO_TLS_CA_PATH=/etc/letsencrypt/live/www.your-part.de/chain.pem
```
## Umgebungsvariablen für Daemon (Port 4551)
Füge diese Variablen zur Daemon-Systemd-Service-Datei hinzu:
```bash
# Daemon WebSocket HTTPS-Server
DAEMON_PORT=4551
DAEMON_TLS=1
DAEMON_TLS_KEY_PATH=/etc/letsencrypt/live/www.your-part.de/privkey.pem
DAEMON_TLS_CERT_PATH=/etc/letsencrypt/live/www.your-part.de/fullchain.pem
# Optional:
# DAEMON_TLS_CA_PATH=/etc/letsencrypt/live/www.your-part.de/chain.pem
```
## Prüfen der Konfiguration
### 1. Backend-Server-Logs prüfen
```bash
sudo journalctl -u yourpart-backend -n 50 -f
```
Du solltest sehen:
- `[Socket.io] HTTPS-Server für Socket.io konfiguriert auf Port 4443`
- `[Socket.io] HTTPS-Server läuft auf Port 4443 (direkt erreichbar)`
Wenn du stattdessen siehst:
- `[Socket.io] TLS nicht konfiguriert - Socket.io wird nicht verfügbar sein`
Dann sind die Umgebungsvariablen nicht gesetzt.
### 2. Ports prüfen
```bash
sudo netstat -tlnp | grep -E "(4443|4551|2020)"
```
Du solltest sehen:
- Port 2020: Backend API (HTTP)
- Port 4443: Backend Socket.io (HTTPS)
- Port 4551: Daemon WebSocket (HTTPS)
### 3. Firewall prüfen
```bash
sudo ufw status | grep -E "(4443|4551)"
```
Beide Ports sollten erlaubt sein.
## Systemd-Service-Dateien aktualisieren
### Backend-Service (`/etc/systemd/system/yourpart-backend.service`)
Stelle sicher, dass die Umgebungsvariablen in der `[Service]`-Sektion gesetzt sind:
```ini
[Service]
Environment="SOCKET_IO_PORT=4443"
Environment="SOCKET_IO_TLS=1"
Environment="SOCKET_IO_TLS_KEY_PATH=/etc/letsencrypt/live/www.your-part.de/privkey.pem"
Environment="SOCKET_IO_TLS_CERT_PATH=/etc/letsencrypt/live/www.your-part.de/fullchain.pem"
```
### Daemon-Service (`/etc/systemd/system/yourpart-daemon.service`)
Stelle sicher, dass die Umgebungsvariablen in der `[Service]`-Sektion gesetzt sind:
```ini
[Service]
Environment="DAEMON_PORT=4551"
Environment="DAEMON_TLS=1"
Environment="DAEMON_TLS_KEY_PATH=/etc/letsencrypt/live/www.your-part.de/privkey.pem"
Environment="DAEMON_TLS_CERT_PATH=/etc/letsencrypt/live/www.your-part.de/fullchain.pem"
```
Nach dem Ändern der Service-Dateien:
```bash
sudo systemctl daemon-reload
sudo systemctl restart yourpart-backend
sudo systemctl restart yourpart-daemon
```