From cf373c9be354d54c0c7420e87f48cc9cfd4d682c Mon Sep 17 00:00:00 2001 From: sBubshait Date: Tue, 22 Jul 2025 09:18:06 +0300 Subject: [PATCH] feat: create /available endpoint for invitations to get all available invitations --- .../wesal/wesal/controller/InvitationController.java | 12 ++++++++++++ .../wesal/wesal/repository/InvitationRepository.java | 6 ++++++ .../wesal/wesal/service/InvitationService.java | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/backend/src/main/java/online/wesal/wesal/controller/InvitationController.java b/backend/src/main/java/online/wesal/wesal/controller/InvitationController.java index 854fecc..75f5337 100644 --- a/backend/src/main/java/online/wesal/wesal/controller/InvitationController.java +++ b/backend/src/main/java/online/wesal/wesal/controller/InvitationController.java @@ -10,6 +10,7 @@ import online.wesal.wesal.service.InvitationService; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; +import java.util.List; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -78,4 +79,15 @@ public class InvitationController { return ResponseEntity.status(500).body(ApiResponse.error("Something went wrong.. We're sorry but try again later")); } } + + @GetMapping("/available") + @Operation(summary = "Get available invitations", description = "Get all invitations with available space") + public ResponseEntity>> getAvailableInvitations() { + try { + List invitations = invitationService.getAvailableInvitations(); + return ResponseEntity.ok(ApiResponse.success(invitations)); + } catch (Exception e) { + return ResponseEntity.status(500).body(ApiResponse.error("Something went wrong.. We're sorry but try again later")); + } + } } \ No newline at end of file diff --git a/backend/src/main/java/online/wesal/wesal/repository/InvitationRepository.java b/backend/src/main/java/online/wesal/wesal/repository/InvitationRepository.java index 2ea65c8..802354e 100644 --- a/backend/src/main/java/online/wesal/wesal/repository/InvitationRepository.java +++ b/backend/src/main/java/online/wesal/wesal/repository/InvitationRepository.java @@ -2,8 +2,14 @@ package online.wesal.wesal.repository; import online.wesal.wesal.entity.Invitation; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface InvitationRepository extends JpaRepository { + + @Query("SELECT i FROM Invitation i WHERE i.currentAttendees < i.maxParticipants ORDER BY i.id ASC") + List findAvailableInvitationsOrderByCreationDate(); } \ No newline at end of file diff --git a/backend/src/main/java/online/wesal/wesal/service/InvitationService.java b/backend/src/main/java/online/wesal/wesal/service/InvitationService.java index 1195d89..9ec3300 100644 --- a/backend/src/main/java/online/wesal/wesal/service/InvitationService.java +++ b/backend/src/main/java/online/wesal/wesal/service/InvitationService.java @@ -12,7 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; @Service public class InvitationService { @@ -54,6 +56,13 @@ public class InvitationService { .map(this::mapToResponse); } + public List getAvailableInvitations() { + return invitationRepository.findAvailableInvitationsOrderByCreationDate() + .stream() + .map(this::mapToResponse) + .collect(Collectors.toList()); + } + private InvitationResponse mapToResponse(Invitation invitation) { InvitationResponse response = new InvitationResponse(); response.setId(invitation.getId());