Skip to content
This repository was archived by the owner on Jan 28, 2026. It is now read-only.

Commit 4b4ea66

Browse files
author
ge85riz
committed
✨ feat(backend): add API that returns profileIds and their connections from previous events
1 parent 561ea06 commit 4b4ea66

7 files changed

Lines changed: 44 additions & 2 deletions

File tree

backend/src/main/java/com/itestra/eep/repositories/EmployeeParticipationRepository.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,14 @@ public interface EmployeeParticipationRepository extends JpaRepository<EmployeeP
2525
@Lock(LockModeType.PESSIMISTIC_READ)
2626
Optional<EmployeeParticipation> findByIdWithReadLock(UUID participationId);
2727

28-
@Query("select e.id from EmployeeParticipation e where e.id in ?1")
29-
Set<UUID> findExistingEmployeeParticipationIdsIn(List<UUID> ids);
28+
@Query("select pm.id.firstEmployeeId, pm.id.secondEmployeeId " +
29+
"from PreviousMatch pm " +
30+
"where pm.id.eventId = ?2 " +
31+
"and exists (select 1 from PreviousMatch pm2 " +
32+
" where pm2.id.eventId in ?1 " +
33+
" and pm.id.secondEmployeeId = pm2.id.firstEmployeeId " +
34+
" and pm.id.firstEmployeeId = pm2.id.secondEmployeeId)")
35+
List<Object[]> findEmployeePairsOfCurrentEventThatAreAcquaintedFromPreviousEvents(Set<UUID> previousEventIds, UUID currentEventId);
36+
3037

3138
}

backend/src/main/java/com/itestra/eep/repositories/EventRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.time.LocalDateTime;
1515
import java.util.List;
1616
import java.util.Optional;
17+
import java.util.Set;
1718
import java.util.UUID;
1819

1920
@Repository
@@ -27,6 +28,8 @@ public interface EventRepository extends JpaRepository<Event, UUID> {
2728
@EntityGraph(attributePaths = {"employeeParticipations.employee.previousMatches"})
2829
Optional<Event> findByIdJoinedWithPreviousMatches(UUID id);
2930

31+
@Query("select e.id from Event e where e.date between ?1 and ?2")
32+
Set<UUID> findEventsByDateBetween(LocalDateTime dateAfter, LocalDateTime dateBefore);
3033

3134
@EntityGraph(attributePaths = {"schematics", "fileEntities"})
3235
List<Event> findAllByDateAfter(LocalDateTime dateAfter);

backend/src/main/java/com/itestra/eep/repositories/custom/PreviousMatchesRepositoryCustom.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@
44
import com.itestra.eep.models.PreviousMatch;
55
import org.springframework.stereotype.Repository;
66

7+
import java.time.LocalDateTime;
78
import java.util.List;
9+
import java.util.Map;
810
import java.util.Set;
911
import java.util.UUID;
1012

1113
@Repository
1214
public interface PreviousMatchesRepositoryCustom {
1315

16+
Map<UUID, List<UUID>> findEmployeeIdsSittingWithAcquaintances(UUID eventId, int cutoffYear);
17+
1418
void batchInsertPreviousMatches(List<PreviousMatch.PreviousMatchId> matches);
1519

1620
Set<EmployeeParticipation> getEmployeeParticipationsWithFilteredPreviousMatches(UUID eventId, int cutoffYear);

backend/src/main/java/com/itestra/eep/repositories/custom/impl/PreviousMatchesRepositoryCustomImpl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,15 @@ public Set<EmployeeParticipation> getEmployeeParticipationsWithFilteredPreviousM
8484
return event.getEmployeeParticipations();
8585
}
8686

87+
private Map<UUID, List<UUID>> getAcquaintedEmployeesMap(List<Object[]> pairs) {
88+
Map<UUID, List<UUID>> result = new HashMap<>();
89+
for (Object[] pair : pairs) {
90+
UUID emp1 = (UUID) pair[0];
91+
UUID emp2 = (UUID) pair[1];
92+
93+
result.computeIfAbsent(emp1, k -> new ArrayList<>()).add(emp2);
94+
result.computeIfAbsent(emp2, k -> new ArrayList<>()).add(emp1);
95+
}
96+
return result;
97+
}
8798
}

backend/src/main/java/com/itestra/eep/services/SeatAllocationService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66

77
import java.io.IOException;
88
import java.util.List;
9+
import java.util.Map;
910
import java.util.UUID;
1011

1112
public interface SeatAllocationService {
1213

1314
List<SeatAllocationDetailsDTO> getSeatAllocations(UUID eventId);
1415

16+
Map<UUID, List<UUID>> findEmployeeIdsSittingWithAcquaintances(UUID eventId);
17+
1518
<T extends Participation> void assignOneParticipantToChairAndPersistNewNeighbors(UUID participationId, UUID chairId, UUID eventId,
1619
Class<T> participationClass, UUID[] neighborProfileIds);
1720

backend/src/main/java/com/itestra/eep/services/impl/SeatAllocationServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ public List<SeatAllocationDetailsDTO> getSeatAllocations(UUID eventId) {
6363
return eventRepository.findCurrentSeatAllocationsByEventId(eventId);
6464
}
6565

66+
@Transactional(readOnly = true)
67+
@Override
68+
public Map<UUID, List<UUID>> findEmployeeIdsSittingWithAcquaintances(UUID eventId) {
69+
return previousMatchesRepository.findEmployeeIdsSittingWithAcquaintances(eventId, CUT_OFF_YEAR);
70+
}
71+
6672
@Override
6773
public <T extends Participation> void assignOneParticipantToChairAndPersistNewNeighbors(UUID participationId, UUID chairId, UUID eventId,
6874
Class<T> participationClass, UUID[] neighborProfileIds) {

backend/src/main/java/com/itestra/eep/webcontroller/SeatAllocationController.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import java.io.IOException;
1515
import java.util.List;
16+
import java.util.Map;
1617
import java.util.UUID;
1718

1819

@@ -46,4 +47,11 @@ public ResponseEntity<Boolean> setSeatAllocations(@RequestBody SeatAllocationUps
4647
return ResponseEntity.ok(true);
4748
}
4849

50+
@GetMapping("/{eventId}/findAcquaintances")
51+
@PreAuthorize("hasAuthority('ADMIN')")
52+
public ResponseEntity<Map<UUID, List<UUID>>> findEmployeesSittingWithAcquaintances(@PathVariable UUID eventId) {
53+
Map<UUID, List<UUID>> acquaintancesMap = seatAllocationService.findEmployeeIdsSittingWithAcquaintances(eventId);
54+
return new ResponseEntity<>(acquaintancesMap, HttpStatus.OK);
55+
}
56+
4957
}

0 commit comments

Comments
 (0)