diff --git a/src/main/java/com/pecacm/backend/controllers/EventsController.java b/src/main/java/com/pecacm/backend/controllers/EventsController.java index 8afb694..492ca92 100644 --- a/src/main/java/com/pecacm/backend/controllers/EventsController.java +++ b/src/main/java/com/pecacm/backend/controllers/EventsController.java @@ -6,6 +6,7 @@ import com.pecacm.backend.enums.EventRole; import com.pecacm.backend.exception.AcmException; import com.pecacm.backend.model.EndEventDetails; +import com.pecacm.backend.model.EndEventSidDetails; import com.pecacm.backend.response.EventAttendeesResponse; import com.pecacm.backend.services.EventService; import jakarta.annotation.Nonnull; @@ -132,6 +133,13 @@ public ResponseEntity endEvent(@PathVariable Integer eventId, @RequestBody return ResponseEntity.ok().build(); } + @PostMapping("/{eventId}/end/sid") + @PreAuthorize(Constants.HAS_ROLE_CORE_AND_ABOVE) + public ResponseEntity endEventBySid(@PathVariable Integer eventId, @RequestBody EndEventSidDetails endEventSidDetails) { + eventService.endEventBySid(eventId, endEventSidDetails); + return ResponseEntity.ok().build(); + } + @GetMapping("/next") @PreAuthorize(Constants.HAS_ANY_ROLE) public ResponseEntity nextEvent(@RequestParam("date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @Nonnull LocalDate date) { diff --git a/src/main/java/com/pecacm/backend/model/EndEventDetails.java b/src/main/java/com/pecacm/backend/model/EndEventDetails.java index b22d361..ae3e553 100644 --- a/src/main/java/com/pecacm/backend/model/EndEventDetails.java +++ b/src/main/java/com/pecacm/backend/model/EndEventDetails.java @@ -5,6 +5,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.Builder; import java.util.ArrayList; import java.util.List; @@ -13,6 +14,7 @@ @Setter @AllArgsConstructor @NoArgsConstructor +@Builder public class EndEventDetails { private List contributors = new ArrayList<>(); private List publicity = new ArrayList<>(); diff --git a/src/main/java/com/pecacm/backend/model/EndEventSidDetails.java b/src/main/java/com/pecacm/backend/model/EndEventSidDetails.java new file mode 100644 index 0000000..985f7ef --- /dev/null +++ b/src/main/java/com/pecacm/backend/model/EndEventSidDetails.java @@ -0,0 +1,22 @@ +package com.pecacm.backend.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class EndEventSidDetails { + private List contributors = new ArrayList<>(); + private List publicity = new ArrayList<>(); + private List participants = new ArrayList<>(); + private Integer contributorXp = 5; + private Integer publicityXp = 2; + private Integer participantXp = 1; +} diff --git a/src/main/java/com/pecacm/backend/repository/UserRepository.java b/src/main/java/com/pecacm/backend/repository/UserRepository.java index 45f178c..0a7d0f4 100644 --- a/src/main/java/com/pecacm/backend/repository/UserRepository.java +++ b/src/main/java/com/pecacm/backend/repository/UserRepository.java @@ -60,4 +60,6 @@ public interface UserRepository extends JpaRepository { List findByEmailIn(List emails); + List findBySidIn(List sids); + } diff --git a/src/main/java/com/pecacm/backend/services/EventService.java b/src/main/java/com/pecacm/backend/services/EventService.java index 833b086..06b38ff 100644 --- a/src/main/java/com/pecacm/backend/services/EventService.java +++ b/src/main/java/com/pecacm/backend/services/EventService.java @@ -7,6 +7,7 @@ import com.pecacm.backend.enums.EventRole; import com.pecacm.backend.exception.AcmException; import com.pecacm.backend.model.EndEventDetails; +import com.pecacm.backend.model.EndEventSidDetails; import com.pecacm.backend.repository.EventRepository; import com.pecacm.backend.repository.TransactionRepository; import com.pecacm.backend.repository.UserRepository; @@ -20,7 +21,10 @@ import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; @Service public class EventService { @@ -126,6 +130,23 @@ public void endEvent(Integer eventId, EndEventDetails endEventDetails) { eventRepository.save(event); } + @Transactional + public void endEventBySid(Integer eventId, EndEventSidDetails endEventSidDetails) { + List participants = userRepository.findBySidIn(endEventSidDetails.getParticipants()) + .stream() + .map(User::getEmail) + .toList(); + EndEventDetails endEventDetails = EndEventDetails.builder() + .contributors(endEventSidDetails.getContributors()) + .publicity(endEventSidDetails.getPublicity()) + .participants(participants) + .contributorXp(endEventSidDetails.getContributorXp()) + .publicityXp(endEventSidDetails.getPublicityXp()) + .participantXp(endEventSidDetails.getParticipantXp()) + .build(); + endEvent(eventId, endEventDetails); + } + private void updateEventRoles(List emails, EventRole eventRole, Event event, EndEventDetails endEventDetails) { List users = userRepository.findByEmailIn(emails);