From f5aa3d6993972e8cfbe7667455478d02e7c93a3e Mon Sep 17 00:00:00 2001 From: Lurkars Date: Fri, 14 Nov 2025 22:18:59 +0100 Subject: [PATCH] big improvements yay! --- pom.xml | 2 +- .../buisinesslogic/ContactDataManager.java | 9 + .../abi/controller/ContactDataController.java | 45 +++- .../response/ContactDataResponse.java | 12 + .../abi/repository/ContactDataRepository.java | 3 + src/main/resources/templates/index.html | 227 +++++++++++++----- 6 files changed, 231 insertions(+), 67 deletions(-) create mode 100644 src/main/java/de/champonthis/abi/controller/response/ContactDataResponse.java diff --git a/pom.xml b/pom.xml index 4cbef9b..12dbe24 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 de.champonthis abi - 0.2.8 + 0.3.0 abi diff --git a/src/main/java/de/champonthis/abi/buisinesslogic/ContactDataManager.java b/src/main/java/de/champonthis/abi/buisinesslogic/ContactDataManager.java index 3a3853e..a2a5c88 100644 --- a/src/main/java/de/champonthis/abi/buisinesslogic/ContactDataManager.java +++ b/src/main/java/de/champonthis/abi/buisinesslogic/ContactDataManager.java @@ -1,6 +1,7 @@ package de.champonthis.abi.buisinesslogic; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; @@ -37,6 +38,14 @@ public class ContactDataManager { contactDataRepository.save(contactData); } + public List findPendingContactData(Long reportedBy) { + return contactDataRepository.findByReportedBy(reportedBy).stream() + .filter(cd -> !cd.getContact().equals(reportedBy)) + .filter(cd -> findByContactAndReportedBy(cd.getContact(), cd.getContact()) == null) + .sorted((cd1, cd2) -> cd1.getContact().compareTo(cd2.getContact())) + .toList(); + } + public void sendInviteMail(Contact contact, ContactData contactData, Contact reportedBy) { if (StringUtils.isNoneEmpty(contactData.getEmail()) && StringUtils.isNoneEmpty(contactData.getInviteToken())) { Map variables = new HashMap<>(); diff --git a/src/main/java/de/champonthis/abi/controller/ContactDataController.java b/src/main/java/de/champonthis/abi/controller/ContactDataController.java index ada6c24..edc10d8 100644 --- a/src/main/java/de/champonthis/abi/controller/ContactDataController.java +++ b/src/main/java/de/champonthis/abi/controller/ContactDataController.java @@ -1,10 +1,16 @@ package de.champonthis.abi.controller; +import java.util.List; +import java.util.stream.Collectors; + import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; @@ -12,6 +18,7 @@ import org.springframework.web.server.ResponseStatusException; import de.champonthis.abi.buisinesslogic.ContactDataManager; import de.champonthis.abi.buisinesslogic.ContactManager; import de.champonthis.abi.controller.request.ContactDataRequest; +import de.champonthis.abi.controller.response.ContactDataResponse; import de.champonthis.abi.entity.Contact; import de.champonthis.abi.entity.ContactData; import jakarta.validation.Valid; @@ -58,13 +65,14 @@ public class ContactDataController { contactData.setEmail(request.getEmail().toLowerCase()); contactData.setPhone(request.getPhone()); - if (!contact.getId().equals(reportedBy.getId()) - && (contactData.getInviteToken() == null || StringUtils.isEmpty(contactData.getInviteToken()))) { - String inviteToken = ContactManager.generateToken(); - while (contactDataManager.findByinviteToken(inviteToken) != null) { - inviteToken = ContactManager.generateToken(); + if (!contact.getId().equals(reportedBy.getId()) && StringUtils.isEmpty(contact.getToken())) { + if (contactData.getInviteToken() == null || StringUtils.isEmpty(contactData.getInviteToken())) { + String inviteToken = ContactManager.generateToken(); + while (contactDataManager.findByinviteToken(inviteToken) != null) { + inviteToken = ContactManager.generateToken(); + } + contactData.setInviteToken(inviteToken); } - contactData.setInviteToken(inviteToken); if (contactDataManager.findByContactAndEmail(contact.getId(), contactData.getEmail()) == null) { contactDataManager.sendInviteMail(contact, contactData, reportedBy); @@ -80,4 +88,29 @@ public class ContactDataController { return ResponseEntity.status(status.value()).body(contactData); } + + @GetMapping("/pending") + public List getPending( + @RequestHeader(name = HttpHeaders.AUTHORIZATION, required = false) String authToken) { + if (StringUtils.isEmpty(authToken)) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED); + } + + Contact contact = contactManager.findByToken(authToken); + if (contact == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED); + } + + return contactDataManager.findPendingContactData(contact.getId()).stream() + .map(cd -> { + Contact contactEntity = contactManager.findById(cd.getContact()); + String contactName = contactEntity != null ? contactEntity.getName() : "Unbekannt"; + return new ContactDataResponse( + contactName, + cd.getEmail(), + cd.getPhone()); + }) + .collect(Collectors.toList()); + } + } diff --git a/src/main/java/de/champonthis/abi/controller/response/ContactDataResponse.java b/src/main/java/de/champonthis/abi/controller/response/ContactDataResponse.java new file mode 100644 index 0000000..42def5b --- /dev/null +++ b/src/main/java/de/champonthis/abi/controller/response/ContactDataResponse.java @@ -0,0 +1,12 @@ +package de.champonthis.abi.controller.response; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class ContactDataResponse { + private String contactName; + private String email; + private String phone; +} \ No newline at end of file diff --git a/src/main/java/de/champonthis/abi/repository/ContactDataRepository.java b/src/main/java/de/champonthis/abi/repository/ContactDataRepository.java index 4d85c5d..255bea9 100644 --- a/src/main/java/de/champonthis/abi/repository/ContactDataRepository.java +++ b/src/main/java/de/champonthis/abi/repository/ContactDataRepository.java @@ -1,5 +1,6 @@ package de.champonthis.abi.repository; +import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; @@ -15,4 +16,6 @@ public interface ContactDataRepository extends JpaRepository Optional findByContactAndEmail(Long contact, String email); Optional findByinviteToken(String inviteToken); + + List findByReportedBy(Long reportedBy); } diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 42eabd3..e923c37 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -201,27 +201,54 @@
-
-

-
-
- - -
-
- - -
- -
-
-
    -