diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/Assignment.java b/buisnesslogic/src/main/java/com/plannaplan/entities/Assignment.java index e53bed8..2f0722b 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/Assignment.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/Assignment.java @@ -25,7 +25,6 @@ public class Assignment { @JoinColumn(name = "commision_id") private Commision commision; private boolean isPastAssignment; - private boolean isAccepted; /** * Assignment @@ -37,7 +36,6 @@ public class Assignment { public Assignment(Groups group, Commision commision, boolean isPastAssignment) { this.commision = commision; this.group = group; - this.isAccepted = false; } /** @@ -46,16 +44,7 @@ public class Assignment { * @return boolean isAccepted */ public boolean isAccepted() { - return isAccepted; - } - - /** - * Set is accepted by algorythm - * - * @param isAccepted boolean isAccepted - */ - public void setAccepted(boolean isAccepted) { - this.isAccepted = isAccepted; + return this.group.getRegisteredStudents().contains(this.commision.getCommisionOwner()); } /** diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/Groups.java b/buisnesslogic/src/main/java/com/plannaplan/entities/Groups.java index 1a2b5a3..95521c6 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/Groups.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/Groups.java @@ -4,6 +4,7 @@ import java.util.HashSet; import java.util.Set; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @@ -40,7 +41,7 @@ public class Groups { private Lecturer lecturer; private Integer zajCykId; private Integer grNr; - @ManyToMany(mappedBy = "studentRegisteredGrups") + @ManyToMany(mappedBy = "studentRegisteredGrups", fetch = FetchType.EAGER) private Set registeredStudents; public Set getRegisteredStudents() { diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/User.java b/buisnesslogic/src/main/java/com/plannaplan/entities/User.java index 26cac76..2b43899 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/User.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/User.java @@ -8,6 +8,7 @@ import java.util.concurrent.TimeUnit; import javax.persistence.CascadeType; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @@ -38,7 +39,7 @@ public class User { private String refreshToken; private Timestamp tokenUsageDate; private Integer ranking; - @ManyToMany(cascade = CascadeType.ALL) + @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinTable private Set studentRegisteredGrups; diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java index dc27cb2..272494a 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java @@ -5,6 +5,7 @@ import java.util.Optional; import com.plannaplan.entities.Assignment; import com.plannaplan.entities.Commision; +import com.plannaplan.entities.Groups; import com.plannaplan.entities.User; import com.plannaplan.repositories.AssignmentRepository; @@ -21,6 +22,12 @@ public class AssignmentService { @Autowired private AssignmentRepository repo; + @Autowired + private CommisionService service; + + @Autowired + private GroupService groupService; + @Autowired private UserService userService; @@ -65,7 +72,17 @@ public class AssignmentService { final List students = this.userService.getStudentsSortedByRanking(); students.forEach(e -> { - System.out.println(e.getRanking()); + final Optional com = this.service.getNewestCommision(e); + if (com.isPresent()) { + final List assignments = this.getCommisionAssignments(com.get()); + assignments.forEach(a -> { + final Groups group = a.getGroup(); + if (group.getCapacity() > group.getRegisteredStudents().size()) { + e.claimGroup(group); + this.userService.save(e); + } + }); + } }); } } diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java index 93bc604..d787ab2 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java @@ -9,6 +9,7 @@ import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.assertTrue; +import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.UUID; @@ -71,13 +72,6 @@ public class AssignmentServiceTest { @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) public void shouldPerformAcceptAlgorythm() { final Random generator = new Random(); - final User user1 = this.userService.save(new User(null, null, - "shouldPerformAcceptAlgorythm-" + UUID.randomUUID().toString() + "@AssignmentService.test", null, - UserRoles.STUDENT, generator.nextInt(400) + 100)); - - final User user2 = this.userService.save(new User(null, null, - "shouldPerformAcceptAlgorythm-" + UUID.randomUUID().toString() + "@AssignmentService.test", null, - UserRoles.STUDENT, generator.nextInt(400) + 100)); IntStream.range(0, 1700).forEach(i -> { this.userService.save(new User(null, null, @@ -90,22 +84,45 @@ public class AssignmentServiceTest { generator.nextInt(9) * 30 + 9 * 30, WeekDay.getDay(generator.nextInt(5)), null)); }); - IntStream.range(0, 12).forEach(i -> { - user1.claimGroup(this.groupService.save(new Groups(generator.nextInt(80) + 20, null, null, - generator.nextInt(9) * 30 + 9 * 30, WeekDay.getDay(generator.nextInt(5)), null))); - }); - this.userService.save(user1); - - IntStream.range(0, 12).forEach(i -> { - user2.claimGroup(this.groupService.save(new Groups(generator.nextInt(80) + 20, null, null, - generator.nextInt(9) * 30 + 9 * 30, WeekDay.getDay(generator.nextInt(5)), null))); - }); - this.userService.save(user2); - this.service.callAcceptAlgorythm(); System.out.println("-X_-x-x-x-_X-x-x-x-X_-x-x-x-"); } + @Test + @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) + public void shouldNotAcceptForOnePerson() { + final Random generator = new Random(); + final Groups group = this.groupService.save(new Groups(5, null, null, 840, WeekDay.MONDAY, null)); + + IntStream.range(0, 6).forEach(i -> { + final User user = this.userService.save(new User(null, null, + "shouldNotAcceptForOnePerson-" + UUID.randomUUID().toString() + "@AssignmentService.test", null, + UserRoles.STUDENT, generator.nextInt(400) + 100)); + + final Commision com = this.comServie.save(new Commision(user)); + + this.service.save(new Assignment(group, com)); + }); + + this.service.callAcceptAlgorythm(); + + final List users = this.userService.getStudentsSortedByRanking(); + final User loser = users.get(users.size() - 1); + + assertTrue(loser.getStudentRegisteredGrups().size() == 0); + + users.forEach(u -> { + final Commision com = this.comServie.getNewestCommision(u).get(); + final List assignments = com.getAssignments(); + if (u.getId() == loser.getId()) { + assertTrue(!assignments.get(0).isAccepted()); + } else { + assertTrue(assignments.get(0).isAccepted()); + } + }); + + } + private void addAssignmentToCommision(Commision com) { Assignment a = new Assignment(null, com); this.service.save(a);