From 0f0281e9423833965d543bc36a1af3f0552ebf22 Mon Sep 17 00:00:00 2001 From: Harasees Singh Date: Tue, 10 Oct 2023 21:47:15 +0530 Subject: [PATCH 1/2] added api to retrieve events between 2 respective dates --- .../backend/controllers/EventsController.java | 21 ++++++++-- .../backend/repository/EventRepository.java | 7 ++-- .../pecacm/backend/services/EventService.java | 38 +++++++++---------- 3 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/pecacm/backend/controllers/EventsController.java b/src/main/java/com/pecacm/backend/controllers/EventsController.java index 0127e2e..0309b06 100644 --- a/src/main/java/com/pecacm/backend/controllers/EventsController.java +++ b/src/main/java/com/pecacm/backend/controllers/EventsController.java @@ -2,6 +2,8 @@ import com.pecacm.backend.constants.Constants; import com.pecacm.backend.entities.Event; +import com.pecacm.backend.enums.Branch; +import com.pecacm.backend.exception.AcmException; import com.pecacm.backend.model.EndEventDetails; import com.pecacm.backend.services.EventService; import jakarta.annotation.Nonnull; @@ -31,9 +33,22 @@ public EventsController(EventService eventService) { @GetMapping @PreAuthorize(Constants.HAS_ANY_ROLE) - public ResponseEntity> getAllEvents() { + public ResponseEntity> getAllEvents(@RequestParam @Nullable LocalDate eventsFrom, @RequestParam @Nullable LocalDate eventsTill) { + + if (eventsFrom==null){ + eventsFrom = LocalDate.now().minusYears(99); + } + if (eventsTill==null){ + eventsTill = LocalDate.now(); + } + + if (eventsFrom.isAfter(eventsTill)) { + throw new AcmException("eventsFrom Date must be <= eventsTill Date", HttpStatus.BAD_REQUEST); + } // TODO : Return pageable response - List events = eventService.getAllEvents(); + + List events = eventService.getEventsBetweenTwoTimestamps(eventsFrom, eventsTill); + return ResponseEntity.ok(events); } @@ -53,7 +68,7 @@ public ResponseEntity getSingleEvent(@PathVariable Integer eventId){ @GetMapping("/branches/{branch}") @PreAuthorize(Constants.HAS_ANY_ROLE) - public ResponseEntity> getEventsByBranch(@PathVariable String branch){ + public ResponseEntity> getEventsByBranch(@PathVariable Branch branch){ // TODO : Return pageable response List events = eventService.getEventsByBranch(branch); return ResponseEntity.ok(events); diff --git a/src/main/java/com/pecacm/backend/repository/EventRepository.java b/src/main/java/com/pecacm/backend/repository/EventRepository.java index b5ccf1d..1e85f9e 100644 --- a/src/main/java/com/pecacm/backend/repository/EventRepository.java +++ b/src/main/java/com/pecacm/backend/repository/EventRepository.java @@ -1,20 +1,19 @@ package com.pecacm.backend.repository; import com.pecacm.backend.entities.Event; +import com.pecacm.backend.enums.Branch; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; - import java.time.LocalDateTime; import java.util.List; @Repository public interface EventRepository extends JpaRepository { - List findByBranch(String branch); - + List findByBranch(Branch branch); List findAllByEndedFalse(); - @Query("SELECT e from Event e WHERE e.startDate > :currDateTime ORDER BY e.startDate ASC LIMIT 1") Event getNearestEvent(@Param("currDateTime") LocalDateTime currDate); + List findAllByStartDateGreaterThanEqualAndEndDateLessThanEqual(LocalDateTime startDate, LocalDateTime endDate); } \ No newline at end of file diff --git a/src/main/java/com/pecacm/backend/services/EventService.java b/src/main/java/com/pecacm/backend/services/EventService.java index 949be39..72858a9 100644 --- a/src/main/java/com/pecacm/backend/services/EventService.java +++ b/src/main/java/com/pecacm/backend/services/EventService.java @@ -4,6 +4,7 @@ import com.pecacm.backend.entities.Event; import com.pecacm.backend.entities.Transaction; import com.pecacm.backend.entities.User; +import com.pecacm.backend.enums.Branch; import com.pecacm.backend.enums.EventRole; import com.pecacm.backend.exception.AcmException; import com.pecacm.backend.model.EndEventDetails; @@ -13,10 +14,13 @@ import com.pecacm.backend.repository.UserRepository; import jakarta.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cglib.core.Local; +import org.springframework.cglib.core.Predicate; import org.springframework.data.util.Pair; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @@ -28,7 +32,6 @@ public class EventService { private final UserRepository userRepository; private final TransactionRepository transactionRepository; - @Autowired public EventService(EventRepository eventRepository, AttendanceRepository attendanceRepository, UserRepository userRepository, TransactionRepository transactionRepository) { this.eventRepository = eventRepository; this.attendanceRepository = attendanceRepository; @@ -37,8 +40,13 @@ public EventService(EventRepository eventRepository, AttendanceRepository attend } // TODO : change all GET events to pageable repositories - public List getAllEvents() { - return new ArrayList<>(eventRepository.findAll()); + + public List getEventsBetweenTwoTimestamps(LocalDate eventsFrom, LocalDate eventsTill) { + return eventRepository + .findAllByStartDateGreaterThanEqualAndEndDateLessThanEqual( + eventsFrom.atStartOfDay(), + eventsTill.plusDays(1).atStartOfDay() + ); } public List getOngoingEvents() { @@ -53,15 +61,13 @@ public Event getSingleEvent(Integer eventId) { return event.get(); } - public List getEventsByBranch(String branch) { + public List getEventsByBranch(Branch branch) { return eventRepository.findByBranch(branch); } public List getUserEvents(Integer userId) { List events = new ArrayList<>(); - attendanceRepository.findByUserId(userId).forEach( - attendance -> events.add(attendance.getEvent()) - ); + attendanceRepository.findByUserId(userId).forEach(attendance -> events.add(attendance.getEvent())); return events; } @@ -71,9 +77,7 @@ public List getUserEventsByRole(Integer userId, String role) { if (user.isEmpty()) { throw new AcmException(ErrorConstants.USER_NOT_FOUND, HttpStatus.NOT_FOUND); } - attendanceRepository.findByUserIdAndRole(userId, role).forEach( - attendance -> events.add(attendance.getEvent()) - ); + attendanceRepository.findByUserIdAndRole(userId, role).forEach(attendance -> events.add(attendance.getEvent())); return events; } @@ -105,11 +109,9 @@ public void deleteEvent(Integer eventId) { @Transactional public void endEvent(Integer eventId, EndEventDetails endEventDetails) { - Event event = eventRepository.findById(eventId).orElseThrow(() -> - new AcmException("Event not found", HttpStatus.NOT_FOUND) - ); + Event event = eventRepository.findById(eventId).orElseThrow(() -> new AcmException("Event not found", HttpStatus.NOT_FOUND)); - if(event.isEnded()) { + if (event.isEnded()) { throw new AcmException("Event has already ended", HttpStatus.BAD_REQUEST); } @@ -150,13 +152,7 @@ public void endEvent(Integer eventId, EndEventDetails endEventDetails) { user.setXp(user.getXp() + xp); - return Transaction.builder() - .event(event) - .xp(xp) - .user(user) - .role(eventRole) - .date(LocalDateTime.now()) - .build(); + return Transaction.builder().event(event).xp(xp).user(user).role(eventRole).date(LocalDateTime.now()).build(); }).toList(); transactionRepository.saveAll(transactions); From c759cb4bb4127143e199798470133ac2926c5cc9 Mon Sep 17 00:00:00 2001 From: Manjot Singh Oberoi <78747188+ken1000minus7@users.noreply.github.com> Date: Wed, 11 Oct 2023 01:00:22 +0530 Subject: [PATCH 2/2] Update EventService.java --- .../java/com/pecacm/backend/services/EventService.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/pecacm/backend/services/EventService.java b/src/main/java/com/pecacm/backend/services/EventService.java index 72858a9..4459f07 100644 --- a/src/main/java/com/pecacm/backend/services/EventService.java +++ b/src/main/java/com/pecacm/backend/services/EventService.java @@ -152,7 +152,13 @@ public void endEvent(Integer eventId, EndEventDetails endEventDetails) { user.setXp(user.getXp() + xp); - return Transaction.builder().event(event).xp(xp).user(user).role(eventRole).date(LocalDateTime.now()).build(); + return Transaction.builder() + .event(event) + .xp(xp) + .user(user) + .role(eventRole) + .date(LocalDateTime.now()) + .build(); }).toList(); transactionRepository.saveAll(transactions);