diff --git a/backend/middleware/auth.js b/backend/middleware/auth.js index d4598b7..2c84caa 100644 --- a/backend/middleware/auth.js +++ b/backend/middleware/auth.js @@ -2,7 +2,7 @@ import jwt from 'jsonwebtoken'; import pool from '../config/database.js'; // Verifiziert JWT und stellt req.user bereit -// req.user enthaelt: { id, email, name, rolle, tenant_id } +// req.user enthält: { id, email, name, rolle, tenant_id } // tenant_id ist NULL für SuperAdmins. export const authenticateToken = (req, res, next) => { const authHeader = req.headers['authorization']; diff --git a/backend/routes/kunden-bilder.js b/backend/routes/kunden-bilder.js index 065e9e9..17e31e9 100644 --- a/backend/routes/kunden-bilder.js +++ b/backend/routes/kunden-bilder.js @@ -15,7 +15,7 @@ router.post('/:kunde_id', upload.single('foto'), async (req, res) => { const [[k]] = await pool.query('SELECT id FROM kunden WHERE id=? AND tenant_id=?', [req.params.kunde_id, req.user.tenant_id]); if (!k) { - // Datei aufraeumen + // Datei aufräumen try { fs.unlinkSync(req.file.path); } catch {} return res.status(404).json({ error: 'Kunde nicht gefunden' }); } diff --git a/backend/routes/lieferungen.js b/backend/routes/lieferungen.js index e8bebdb..95f07ca 100644 --- a/backend/routes/lieferungen.js +++ b/backend/routes/lieferungen.js @@ -44,7 +44,7 @@ router.post('/', upload.single('foto'), [ if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() }); const foto_url = req.file ? `/uploads/${req.file.filename}` : null; try { - // Sicherstellen: kunde_id + artikel_id gehoeren dem Tenant + // Sicherstellen: kunde_id + artikel_id gehören dem Tenant const [[k]] = await pool.query('SELECT id FROM kunden WHERE id=? AND tenant_id=?', [req.body.kunde_id, req.user.tenant_id]); const [[a]] = await pool.query('SELECT id FROM artikel WHERE id=? AND tenant_id=?', diff --git a/backend/routes/mitarbeiter.js b/backend/routes/mitarbeiter.js index 7110c6c..9aed4e3 100644 --- a/backend/routes/mitarbeiter.js +++ b/backend/routes/mitarbeiter.js @@ -90,7 +90,7 @@ router.put('/:id', [ }); router.delete('/:id', requireRole(['admin']), async (req, res) => { - if (req.params.id === req.user.id) return res.status(400).json({ error: 'Sie koennen sich nicht selbst löschen' }); + if (req.params.id === req.user.id) return res.status(400).json({ error: 'Sie können sich nicht selbst löschen' }); try { const [r] = await pool.query('DELETE FROM mitarbeiter WHERE id=? AND tenant_id=?', [req.params.id, req.user.tenant_id]); diff --git a/backend/server.js b/backend/server.js index 876ae13..db3e09c 100644 --- a/backend/server.js +++ b/backend/server.js @@ -57,7 +57,7 @@ bootstrapSuperAdmin() .catch(err => console.error('Bootstrap-Fehler:', err)) .finally(() => { app.listen(PORT, '0.0.0.0', () => { - console.log(`Backend laeuft auf Port ${PORT}`); + console.log(`Backend läuft auf Port ${PORT}`); }); }); diff --git a/src/components/Auth/PasswordChange.jsx b/src/components/Auth/PasswordChange.jsx index 9db8efe..93abd31 100644 --- a/src/components/Auth/PasswordChange.jsx +++ b/src/components/Auth/PasswordChange.jsx @@ -11,7 +11,7 @@ export default function PasswordChange() { const submit = async (e) => { e.preventDefault(); if (form.newPassword.length < 6) return setErr('Neues Passwort min. 6 Zeichen'); - if (form.newPassword !== form.confirm) return setErr('Passwoerter stimmen nicht überein'); + if (form.newPassword !== form.confirm) return setErr('Passwörter stimmen nicht überein'); setBusy(true); try { await api.changePassword(form.currentPassword, form.newPassword); diff --git a/src/components/Dashboard/AdminDashboard.jsx b/src/components/Dashboard/AdminDashboard.jsx index 00f1595..beb6ddd 100644 --- a/src/components/Dashboard/AdminDashboard.jsx +++ b/src/components/Dashboard/AdminDashboard.jsx @@ -96,7 +96,7 @@ export default function AdminDashboard() { {selectedKunde ? ( - rows.length === 0 ?