Refaktoriere Controller-Methoden zur Benutzer-, Event- und Menü-Datenverwaltung, indem die Logik in separate Service-Klassen ausgelagert wird. Implementiere eine verbesserte Fehlerbehandlung und sichere Rückgaben. Füge eine neue Route zur Passwortänderung im Benutzer-Router hinzu.
This commit is contained in:
109
validators/UserValidator.js
Normal file
109
validators/UserValidator.js
Normal file
@@ -0,0 +1,109 @@
|
||||
class UserValidator {
|
||||
/**
|
||||
* User-Erstellungsdaten validieren
|
||||
*/
|
||||
validateCreateUser(userData) {
|
||||
const errors = [];
|
||||
|
||||
if (!userData.name || userData.name.trim().length < 2) {
|
||||
errors.push('Name muss mindestens 2 Zeichen lang sein');
|
||||
}
|
||||
|
||||
if (!userData.email || !this.isValidEmail(userData.email)) {
|
||||
errors.push('Gültige E-Mail-Adresse ist erforderlich');
|
||||
}
|
||||
|
||||
if (!userData.password || userData.password.length < 6) {
|
||||
errors.push('Passwort muss mindestens 6 Zeichen lang sein');
|
||||
}
|
||||
|
||||
if (errors.length > 0) {
|
||||
throw new Error(`VALIDATION_ERROR: ${errors.join(', ')}`);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* User-Update-Daten validieren
|
||||
*/
|
||||
validateUpdateUser(updateData) {
|
||||
const errors = [];
|
||||
|
||||
if (updateData.name !== undefined && (updateData.name.trim().length < 2)) {
|
||||
errors.push('Name muss mindestens 2 Zeichen lang sein');
|
||||
}
|
||||
|
||||
if (updateData.email !== undefined && !this.isValidEmail(updateData.email)) {
|
||||
errors.push('Gültige E-Mail-Adresse ist erforderlich');
|
||||
}
|
||||
|
||||
if (updateData.active !== undefined && typeof updateData.active !== 'boolean') {
|
||||
errors.push('Active muss ein Boolean-Wert sein');
|
||||
}
|
||||
|
||||
// Warnung für sensible Felder
|
||||
if (updateData.password !== undefined) {
|
||||
throw new Error('VALIDATION_ERROR: Passwort kann nicht über diese Route geändert werden');
|
||||
}
|
||||
|
||||
if (updateData.id !== undefined) {
|
||||
throw new Error('VALIDATION_ERROR: ID kann nicht geändert werden');
|
||||
}
|
||||
|
||||
if (updateData.created_at !== undefined) {
|
||||
throw new Error('VALIDATION_ERROR: Erstellungsdatum kann nicht geändert werden');
|
||||
}
|
||||
|
||||
if (errors.length > 0) {
|
||||
throw new Error(`VALIDATION_ERROR: ${errors.join(', ')}`);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Passwort-Änderung validieren
|
||||
*/
|
||||
validatePasswordChange(currentPassword, newPassword) {
|
||||
const errors = [];
|
||||
|
||||
if (!currentPassword) {
|
||||
errors.push('Aktuelles Passwort ist erforderlich');
|
||||
}
|
||||
|
||||
if (!newPassword || newPassword.length < 6) {
|
||||
errors.push('Neues Passwort muss mindestens 6 Zeichen lang sein');
|
||||
}
|
||||
|
||||
if (currentPassword === newPassword) {
|
||||
errors.push('Neues Passwort muss sich vom aktuellen unterscheiden');
|
||||
}
|
||||
|
||||
if (errors.length > 0) {
|
||||
throw new Error(`VALIDATION_ERROR: ${errors.join(', ')}`);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* E-Mail-Format validieren
|
||||
*/
|
||||
isValidEmail(email) {
|
||||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
return emailRegex.test(email);
|
||||
}
|
||||
|
||||
/**
|
||||
* ID validieren
|
||||
*/
|
||||
validateId(id) {
|
||||
if (!id || isNaN(parseInt(id))) {
|
||||
throw new Error('VALIDATION_ERROR: Ungültige ID');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new UserValidator();
|
||||
Reference in New Issue
Block a user