Reviewnacharbeitung

This commit is contained in:
2026-06-03 20:58:26 +02:00
parent bfc9ee4d01
commit a0a79e0191
6 changed files with 209 additions and 133 deletions
+58 -38
View File
@@ -6,6 +6,13 @@ class LocalUserDAO implements UserDAOInterface {
private string $file = "data/users.json";
/**
* Lädt alle Benutzer aus der JSON-Datei.
*
* @return array Liste aller Benutzer
* @throws RuntimeException wenn die Datei nicht gelesen werden kann
* oder fehlerhafte JSON-Daten enthält
*/
private function loadUsers() {
if (!file_exists($this->file)) {
return [];
@@ -26,40 +33,35 @@ class LocalUserDAO implements UserDAOInterface {
return is_array($users) ? $users : [];
}
/**
* Speichert alle Benutzer in die JSON-Datei.
*
* @param array $users Liste aller Benutzer
* @return void
* @throws RuntimeException wenn die Daten nicht gespeichert werden können
*/
private function saveUsers($users) {
$result = file_put_contents(
$this->file,
json_encode($users, JSON_PRETTY_PRINT)
);
$json = json_encode($users, JSON_PRETTY_PRINT);
if ($json === false) {
throw new RuntimeException("Benutzerdaten konnten nicht umgewandelt werden.");
}
$result = file_put_contents($this->file, $json);
if ($result === false) {
throw new RuntimeException("Benutzerdaten konnten nicht gespeichert werden.");
}
}
private function validateEmail($email) {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException("Ungültige E-Mail-Adresse.");
}
}
private function validateName($name, $fieldName) {
if (!preg_match("/^[a-zA-ZäöüÄÖÜß -]{2,50}$/", $name)) {
throw new InvalidArgumentException(
$fieldName . " darf nur Buchstaben, Leerzeichen und Bindestriche enthalten."
);
}
}
private function validatePassword($password) {
if (empty($password)) {
throw new InvalidArgumentException("Passwort darf nicht leer sein.");
}
}
/**
* Sucht einen Benutzer anhand seiner E-Mail-Adresse.
*
* @param string $email E-Mail-Adresse des gesuchten Benutzers
* @return array|null Benutzerdaten oder null, wenn kein Benutzer gefunden wurde
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen werden können
*/
public function findUser($email) {
$this->validateEmail($email);
$users = $this->loadUsers();
foreach ($users as $user) {
@@ -78,12 +80,18 @@ class LocalUserDAO implements UserDAOInterface {
return null;
}
/**
* Fügt einen neuen Benutzer hinzu.
*
* @param string $email E-Mail-Adresse
* @param string $vorname Vorname
* @param string $nachname Nachname
* @param string $password Passwort-Hash
* @return void
* @throws InvalidArgumentException wenn die E-Mail-Adresse bereits verwendet wird
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function addUser($email, $vorname, $nachname, $password) {
$this->validateEmail($email);
$this->validateName($vorname, "Vorname");
$this->validateName($nachname, "Nachname");
$this->validatePassword($password);
$users = $this->loadUsers();
foreach ($users as $user) {
@@ -102,12 +110,19 @@ class LocalUserDAO implements UserDAOInterface {
$this->saveUsers($users);
}
/**
* Aktualisiert einen bestehenden Benutzer.
*
* @param string $oldEmail Alte E-Mail-Adresse
* @param string $newEmail Neue E-Mail-Adresse
* @param string $vorname Neuer Vorname
* @param string $nachname Neuer Nachname
* @param string|null $password Neues Passwort oder null
* @return bool true, wenn der Benutzer aktualisiert wurde, sonst false
* @throws InvalidArgumentException wenn die neue E-Mail-Adresse bereits verwendet wird
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null) {
$this->validateEmail($oldEmail);
$this->validateEmail($newEmail);
$this->validateName($vorname, "Vorname");
$this->validateName($nachname, "Nachname");
$users = $this->loadUsers();
foreach ($users as $user) {
@@ -140,9 +155,14 @@ class LocalUserDAO implements UserDAOInterface {
return false;
}
/**
* Löscht einen Benutzer anhand seiner E-Mail-Adresse.
*
* @param string $email E-Mail-Adresse des zu löschenden Benutzers
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function deleteUser($email) {
$this->validateEmail($email);
$users = $this->loadUsers();
foreach ($users as $i => $user) {
+5 -11
View File
@@ -21,7 +21,6 @@ interface UserDAOInterface {
* @return array|null Benutzerdaten als Array oder null
*
* Mögliche Fehler:
* @throws InvalidArgumentException wenn die E-Mail-Adresse ungültig ist
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen werden können
*/
public function findUser($email);
@@ -43,9 +42,8 @@ interface UserDAOInterface {
* @return void
*
* Mögliche Fehler:
* @throws InvalidArgumentException wenn Eingabedaten ungültig sind
* oder die E-Mail-Adresse bereits verwendet wird
* @throws RuntimeException wenn die Benutzerdaten nicht gespeichert werden können
* @throws InvalidArgumentException wenn die E-Mail-Adresse bereits verwendet wird
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function addUser($email, $vorname, $nachname, $password);
@@ -67,10 +65,8 @@ interface UserDAOInterface {
* @return bool true, wenn der Benutzer aktualisiert wurde, sonst false
*
* Mögliche Fehler:
* @throws InvalidArgumentException wenn Eingabedaten ungültig sind
* oder die neue E-Mail-Adresse bereits verwendet wird
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen
* oder gespeichert werden können
* @throws InvalidArgumentException wenn die neue E-Mail-Adresse bereits verwendet wird
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null);
@@ -87,9 +83,7 @@ interface UserDAOInterface {
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false
*
* Mögliche Fehler:
* @throws InvalidArgumentException wenn die E-Mail-Adresse ungültig ist
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen
* oder gespeichert werden können
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
*/
public function deleteUser($email);
}