fix: five dashboard improvements across booking, vehicles, profile, and UI
- fix(auth): guard extractNames() against Authentik sending full name in given_name field (e.g. "Matthias Hochmeister" + family_name "Hochmeister"); detect by checking given_name ends with family_name suffix, fall through to name-splitting so Vorname/Nachname display correctly in Profile - fix(db): add migration 018 to repair broken BEFORE UPDATE triggers on veranstaltungen and veranstaltung_kategorien; old triggers called update_updated_at_column() which references NEW.updated_at, but both tables use aktualisiert_am, causing every category/event edit to fail - feat(booking): open vehicle booking creation to all authenticated users; only dashboard_admin / dashboard_moderator can change the Buchungsart (type select disabled for regular members); edit and cancel still restricted to WRITE_GROUPS - feat(vehicles): VehicleDashboardCard now fetches equipment warnings via equipmentApi.getVehicleWarnings() in parallel and shows an alert when any vehicle equipment is not einsatzbereit - fix(ui): add MuiTextField defaultProps (InputLabelProps.shrink=true) and MuiOutlinedInput notch legend font-size override to theme to eliminate floating-label / border conflict on click Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -19,8 +19,16 @@ function extractNames(userInfo: { name?: string; given_name?: string; family_nam
|
||||
const familyName = userInfo.family_name?.trim();
|
||||
|
||||
// If Authentik provides both and they differ, use them directly
|
||||
// BUT: guard against the case where given_name is actually the full name
|
||||
// (e.g. Authentik sends given_name="Matthias Hochmeister", family_name="Hochmeister")
|
||||
if (givenName && familyName && givenName !== familyName) {
|
||||
return { given_name: givenName, family_name: familyName };
|
||||
const looksLikeFullName =
|
||||
givenName.includes(' ') &&
|
||||
(givenName.endsWith(' ' + familyName) || givenName === familyName);
|
||||
if (!looksLikeFullName) {
|
||||
return { given_name: givenName, family_name: familyName };
|
||||
}
|
||||
// Fall through to split the name field
|
||||
}
|
||||
|
||||
// Fall back to splitting the name field
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
-- Migration 018: Fix BEFORE UPDATE triggers on event tables
|
||||
-- Problem: update_updated_at_column() sets NEW.updated_at but both event tables
|
||||
-- use aktualisiert_am instead. This causes every UPDATE to fail inside the trigger.
|
||||
|
||||
-- Create a new trigger function that references the correct column name
|
||||
CREATE OR REPLACE FUNCTION update_aktualisiert_am_column()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.aktualisiert_am = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ language 'plpgsql';
|
||||
|
||||
-- Fix veranstaltungen table trigger
|
||||
DROP TRIGGER IF EXISTS update_veranstaltungen_aktualisiert_am ON veranstaltungen;
|
||||
CREATE TRIGGER update_veranstaltungen_aktualisiert_am
|
||||
BEFORE UPDATE ON veranstaltungen
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_aktualisiert_am_column();
|
||||
|
||||
-- Fix veranstaltung_kategorien table trigger (if it was added)
|
||||
DROP TRIGGER IF EXISTS update_veranstaltung_kategorien_aktualisiert_am ON veranstaltung_kategorien;
|
||||
CREATE TRIGGER update_veranstaltung_kategorien_aktualisiert_am
|
||||
BEFORE UPDATE ON veranstaltung_kategorien
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_aktualisiert_am_column();
|
||||
@@ -21,7 +21,7 @@ router.get('/calendar-token', authenticate, bookingController.getCalendarToken.b
|
||||
|
||||
// ── Write operations ──────────────────────────────────────────────────────────
|
||||
|
||||
router.post('/', authenticate, requireGroups(WRITE_GROUPS), bookingController.create.bind(bookingController));
|
||||
router.post('/', authenticate, bookingController.create.bind(bookingController));
|
||||
router.patch('/:id', authenticate, requireGroups(WRITE_GROUPS), bookingController.update.bind(bookingController));
|
||||
|
||||
// Soft-cancel (sets abgesagt=TRUE)
|
||||
|
||||
Reference in New Issue
Block a user