Die folgenden PUT-Methoden wurden zum User-Controller hinzugefügt:
Endpoint: PUT /api/user/change-password
Authentifizierung: Bearer Token erforderlich
Request Body:
{
"oldPassword": "aktuellesPasswort123",
"newPassword": "neuesPasswort456"
}Response (Erfolg):
Status: 200 OK
Body: "Passwort erfolgreich geändert"
Response (Fehler):
Status: 400 Bad Request
Body: "Altes Passwort ist nicht korrekt"
Validierung:
oldPassword: PflichtfeldnewPassword: Pflichtfeld, mindestens 6 Zeichen
Endpoint: PUT /api/user/profile-image
Authentifizierung: Bearer Token erforderlich
Content-Type: multipart/form-data
Request Parameter:
file: Bilddatei (MultipartFile)
Response (Erfolg):
{
"id": "309a03f1-2711-4515-a557-9a429816583f",
"username": "johndoe",
"name": "John Doe",
"email": "john@example.com",
"profileImageUrl": "/uploads/profile-images/309a03f1-2711-4515-a557-9a429816583f_abc123.jpg"
}Validierung:
- Nur Bilddateien erlaubt (Content-Type muss
image/*sein) - Datei darf nicht leer sein
- Das alte Profilbild wird automatisch aus dem Storage gelöscht
- Vor dem Speichern wird das Bild als JPEG mit ~75% Qualität komprimiert (Datei wird ggf. konvertiert)
- Vor dem Speichern wird das Bild auf maximal
1024x1024skaliert (proportional) und als WebP (fallback JPEG) mit ~75% Qualität gespeichert
Endpoint: DELETE /api/user/profile-image
Authentifizierung: Bearer Token erforderlich
Response (Erfolg):
{
"id": "309a03f1-2711-4515-a557-9a429816583f",
"username": "johndoe",
"name": "John Doe",
"email": "john@example.com",
"profileImageUrl": null
}Funktionalität:
- Löscht das Profilbild vollständig aus dem Storage (Dateisystem)
- Setzt die
profileImageUrldes Users aufnull - Gibt eine Fehlermeldung zurück, wenn das Löschen fehlschlägt
Endpoint: GET /api/user/profile
Authentifizierung: Bearer Token erforderlich
Response:
{
"id": "309a03f1-2711-4515-a557-9a429816583f",
"username": "johndoe",
"name": "John Doe",
"email": "john@example.com",
"profileImageUrl": "/uploads/profile-images/309a03f1-2711-4515-a557-9a429816583f_abc123.jpg"
}curl -X PUT http://localhost:8080/api/user/change-password \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"oldPassword": "altesPasswort",
"newPassword": "neuesPasswort123"
}'curl -X PUT http://localhost:8080/api/user/profile-image \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-F "file=@/path/to/image.jpg"curl -X DELETE http://localhost:8080/api/user/profile-image \
-H "Authorization: Bearer YOUR_JWT_TOKEN"curl -X GET http://localhost:8080/api/user/profile \
-H "Authorization: Bearer YOUR_JWT_TOKEN"- Controller:
/src/main/java/org/example/javamusicapp/controller/userController/UserController.java - DTOs:
/src/main/java/org/example/javamusicapp/controller/userController/dto/ChangePasswordRequest.java/src/main/java/org/example/javamusicapp/controller/userController/dto/UserResponse.java
- Service:
/src/main/java/org/example/javamusicapp/service/auth/UserService.java(erweitert) - Model:
/src/main/java/org/example/javamusicapp/model/User.java(FeldprofileImageUrlhinzugefügt) - Config:
/src/main/java/org/example/javamusicapp/config/WebConfig.java(für statische Ressourcen)
Profilbilder werden gespeichert in: uploads/profile-images/
Format: {userId}_{randomUUID}.{extension}
- Alle Endpoints sind durch JWT-Authentifizierung geschützt
- User kann nur sein eigenes Passwort ändern und Profilbild hochladen/löschen
- Passwortänderung erfordert Validierung des alten Passworts
- Nur Bilddateien sind für den Upload erlaubt
- Beim Hochladen eines neuen Profilbilds wird das alte automatisch aus dem Storage gelöscht
- Beim expliziten Löschen des Profilbilds (
DELETE /api/user/profile-image) wird die Datei vollständig aus dem Dateisystem entfernt - Die
profileImageUrlwird in beiden Fällen entsprechend aktualisiert (neue URL odernull)