diff --git a/eeg_backend/iam.http b/eeg_backend/iam.http
index cb1c210..5ecff6b 100644
--- a/eeg_backend/iam.http
+++ b/eeg_backend/iam.http
@@ -1 +1,43 @@
-GET {{host}}
\ No newline at end of file
+### User Register
+POST {{host}}/api/auth/register
+Content-Type: application/json
+
+{
+ "firstName": "Admin",
+ "lastName": "Admin",
+ "email": "admin@admin.at",
+ "password": "SuperAdmin",
+ "atNumber": "AT0010000000000000000000001234567"
+}
+
+### User Login
+POST {{host}}/api/auth/login
+Content-Type: application/json
+
+{
+ "email": "admin@admin.at",
+ "password": "SuperAdmin"
+}
+
+> {%
+ client.global.set("auth_token", response.body.token);
+%}
+
+### Admin User Pending
+GET {{host}}/api/admin/users/pending
+Content-Type: application/json
+Authorization: Bearer {{auth_token}}
+
+> {%
+ if (response.status === 200 && response.body.length > 0) {
+ client.global.set("pending_user_id", response.body[0].id);
+ client.log("Gespeicherte User ID: " + client.global.get("pending_user_id"));
+ } else {
+ client.log("Keine Pending Users gefunden oder Fehler beim Abruf.");
+ }
+%}
+
+### Admin User Approve
+POST {{host}}/api/admin/users/{{pending_user_id}}/approve
+Content-Type: application/json
+Authorization: Bearer {{auth_token}}
\ No newline at end of file
diff --git a/eeg_backend/pom.xml b/eeg_backend/pom.xml
index 9f11765..f740058 100644
--- a/eeg_backend/pom.xml
+++ b/eeg_backend/pom.xml
@@ -39,7 +39,7 @@
org.springdoc
- springdoc-openapi-starter-webmvc-api
+ springdoc-openapi-starter-webmvc-ui
3.0.3
diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java
index 54f5966..18eeb8d 100644
--- a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java
+++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java
@@ -8,7 +8,6 @@ import at.mueller.eeg.backend.community.repository.MeteringPointRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;
@@ -20,7 +19,6 @@ public class MeteringPointEventListener {
private final ApplicationEventPublisher eventPublisher;
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
- @Transactional
public void handleUserRegistered(UserRegisteredEvent event) {
MeteringPoint point = new MeteringPoint();
point.setUserId(event.userId());
diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/api/AdminIamController.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/api/AdminIamController.java
index 74f441c..d12bd78 100644
--- a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/api/AdminIamController.java
+++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/api/AdminIamController.java
@@ -1,15 +1,21 @@
package at.mueller.eeg.backend.iam.api;
import at.mueller.eeg.backend.iam.api.dto.IamDtos.UserProfileResponse;
+import at.mueller.eeg.backend.iam.domain.RegistrationStatus;
+import at.mueller.eeg.backend.iam.domain.User;
+import at.mueller.eeg.backend.iam.mapper.UserMapper;
import at.mueller.eeg.backend.iam.repository.UserRepository;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ResponseStatusException;
import java.util.List;
+import java.util.Optional;
import java.util.UUID;
@RestController
@@ -21,20 +27,35 @@ public class AdminIamController {
private final UserRepository userRepository;
+ private final UserMapper userMapper;
+
@GetMapping("/pending")
@Operation(summary = "Lädt alle wartenden User",
description = "Zeigt User im Status PENDING inkl. der Ergebnisse des EDA-Netz-Checks.")
public ResponseEntity> getPendingUsers() {
-
-
- //return ResponseEntity.ok(userRepository.findAllByStatus(RegistrationStatus.PENDING));
- return null;
+ List allByStatus = userRepository.findAllByStatus(RegistrationStatus.PENDING);
+ return ResponseEntity.ok(userMapper.mapToDto(allByStatus));
}
@PostMapping("/{userId}/approve")
@Operation(summary = "User freigeben",
description = "Setzt enabled=true, status=APPROVED und triggert die finale EDA-Anmeldung.")
public ResponseEntity approveUser(@PathVariable UUID userId) {
+
+ Optional userOptional = userRepository.findById(userId);
+ if (userOptional.isPresent()) {
+ User user = userOptional.get();
+ if (RegistrationStatus.PENDING.equals(user.getStatus())) {
+ user.setStatus(RegistrationStatus.APPROVED);
+ } else {
+ throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User in wrong status");
+ }
+ if (user.isEnabled()) {
+ throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User already enabled");
+ }
+ user.setEnabled(true);
+ userRepository.save(user);
+ }
// Logik: status auf APPROVED, enabled auf true
// Event feuern: UserApprovedEvent (Schickt E-Mail an User)
diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/mapper/UserMapper.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/mapper/UserMapper.java
index 05a0a19..4e2baf2 100644
--- a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/mapper/UserMapper.java
+++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/mapper/UserMapper.java
@@ -6,11 +6,15 @@ import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
+import java.util.List;
+
@Mapper(
uses = PasswordHashMapper.class
)
public interface UserMapper {
+ List mapToDto(List users);
+
@Mapping(target = "primaryAtNumber", ignore = true)
IamDtos.UserProfileResponse mapToDto(User user);
diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/repository/UserRepository.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/repository/UserRepository.java
index 6025aeb..bb992bb 100644
--- a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/repository/UserRepository.java
+++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/repository/UserRepository.java
@@ -6,8 +6,9 @@ import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
+import java.util.UUID;
-public interface UserRepository extends JpaRepository {
+public interface UserRepository extends JpaRepository {
Optional findByEmail(String email);