From a41c6f2583f8e60b9e2f60008dcd19c69243862e Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sat, 2 Jan 2021 13:45:03 +0100 Subject: [PATCH 01/14] Added points ranking to entity --- .../java/com/plannaplan/entities/User.java | 35 +++++++++++++++++++ .../src/main/java/com/plannaplan/App.java | 18 ++++++++-- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/User.java b/buisnesslogic/src/main/java/com/plannaplan/entities/User.java index 24e45bc..422ae1f 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/User.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/User.java @@ -32,6 +32,7 @@ public class User { private String token; private String refreshToken; private Timestamp tokenUsageDate; + private Integer ranking; public User() { } @@ -63,6 +64,21 @@ public class User { this.usosId = usosId; } + /** + * + * @param name name given to the user + * @param surname surname given to the user + * @param mail mail given to the user + * @param usosId id in the USOS system + * @param role user's role + * @param ranking ranking points <100;500>. It's calculated by + * gradesAvg*100*studiesYear + */ + public User(String name, String surname, String mail, String usosId, UserRoles role, Integer ranking) { + this(name, surname, mail, usosId, role); + this.ranking = ranking; + } + /** * usos id getter * @@ -189,6 +205,25 @@ public class User { return this.id; } + /** + * Ranking points are <100;500>. It's calculated by gradesAvg*100*studiesYear + * + * @return ranking points <100;500> + */ + public Integer getRanking() { + return ranking; + } + + /** + * Ranking points setter. Ranking points are <100;500>. It's calculated by + * gradesAvg*100*studiesYear + * + * @param ranking ranking points <100;500> + */ + public void setRanking(Integer ranking) { + this.ranking = ranking; + } + /** * updates user entity with data got by UsosApiService::getUserData * diff --git a/restservice/src/main/java/com/plannaplan/App.java b/restservice/src/main/java/com/plannaplan/App.java index d77366b..7f9885c 100755 --- a/restservice/src/main/java/com/plannaplan/App.java +++ b/restservice/src/main/java/com/plannaplan/App.java @@ -2,6 +2,7 @@ package com.plannaplan; import java.io.InputStream; import java.sql.Date; +import java.util.Random; import com.plannaplan.models.ConfigData; import com.plannaplan.models.TourData; @@ -30,7 +31,7 @@ public class App { private ConfiguratorService contrl; @Autowired - UserService userService; + private UserService userService; @Value("${plannaplan.dev}") private boolean isDev; @@ -52,8 +53,9 @@ public class App { System.out.println(Logo.getInitInfo(isDev)); if (this.isDev) { - InputStream inputStream = getClass().getClassLoader().getResourceAsStream("Zajecia.xlsx"); - ConfigData data = new ConfigData( + final Random generator = new Random(); + final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("Zajecia.xlsx"); + final ConfigData data = new ConfigData( new TourData(new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 86400000)), new TourData(new Date(System.currentTimeMillis() + 86400000), @@ -65,6 +67,7 @@ public class App { newuser.setEmail("tommy@st.amu.edu.pl"); newuser.setName("Tomek"); newuser.setSurname("Atomek"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); @@ -72,6 +75,7 @@ public class App { newuser.setEmail("robercik@st.amu.edu.pl"); newuser.setName("Robert"); newuser.setSurname("Głowacki"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); @@ -79,6 +83,7 @@ public class App { newuser.setEmail("mewa@st.amu.edu.pl"); newuser.setName("Poznanska"); newuser.setSurname("Mewa"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); @@ -86,6 +91,7 @@ public class App { newuser.setEmail("tkul2@st.amu.edu.pl"); newuser.setName("Tomasz"); newuser.setSurname("Kula"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); @@ -93,6 +99,7 @@ public class App { newuser.setEmail("annana@st.amu.edu.pl"); newuser.setName("Anna"); newuser.setSurname("Na"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); @@ -100,6 +107,7 @@ public class App { newuser.setEmail("mnart@st.amu.edu.pl"); newuser.setName("Marta"); newuser.setSurname("Narta"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); @@ -107,6 +115,7 @@ public class App { newuser.setEmail("zmineniane@st.amu.edu.pl"); newuser.setName("Tutaj"); newuser.setSurname("Koncza"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); @@ -114,6 +123,7 @@ public class App { newuser.setEmail("mi@st.amu.edu.pl"); newuser.setName("Mi"); newuser.setSurname("Sie"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); @@ -121,11 +131,13 @@ public class App { newuser.setEmail("pms@st.amu.edu.pl"); newuser.setName("Pomysly"); newuser.setSurname("Sad"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); newuser = new User(); newuser.setEmail("iamnull@st.amu.edu.pl"); + newuser.setRanking(generator.nextInt(400) + 100); newuser.setRole(UserRoles.STUDENT); this.userService.save(newuser); } From ff9aa644701c211b288f02f437d86841c6ade9aa Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sat, 2 Jan 2021 14:01:50 +0100 Subject: [PATCH 02/14] Added accepted status to assignments --- .../com/plannaplan/entities/Assignment.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/Assignment.java b/buisnesslogic/src/main/java/com/plannaplan/entities/Assignment.java index 81642a6..e53bed8 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/Assignment.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/Assignment.java @@ -25,6 +25,7 @@ public class Assignment { @JoinColumn(name = "commision_id") private Commision commision; private boolean isPastAssignment; + private boolean isAccepted; /** * Assignment @@ -36,6 +37,25 @@ public class Assignment { public Assignment(Groups group, Commision commision, boolean isPastAssignment) { this.commision = commision; this.group = group; + this.isAccepted = false; + } + + /** + * If it returns trues it mesans u are assigned to group accepted by algorythm + * + * @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; } /** From 4b096a50bffc4f4f7064c3ff78cdcf761017e93e Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sat, 2 Jan 2021 14:35:00 +0100 Subject: [PATCH 03/14] Added getting sorted students --- .../repositories/UserRepository.java | 4 ++-- .../services/AssignmentService.java | 23 +++++++++++++++---- .../com/plannaplan/services/UserService.java | 12 ++++++++++ .../services/AssignmentServiceTest.java | 20 ++++++++++++++++ 4 files changed, 52 insertions(+), 7 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/repositories/UserRepository.java b/buisnesslogic/src/main/java/com/plannaplan/repositories/UserRepository.java index 4c0b0ab..aea1bee 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/repositories/UserRepository.java +++ b/buisnesslogic/src/main/java/com/plannaplan/repositories/UserRepository.java @@ -35,13 +35,13 @@ import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends JpaRepository { - @Query("FROM User WHERE email = ?1 OR usosId = ?1") /** * return user by given authority * * @param authority user usosId or email * @return optional with user if found */ + @Query("FROM User WHERE email = ?1 OR usosId = ?1") Optional getByAuthority(@Param("authority") String authority); @Query("FROM User WHERE email = ?1") @@ -56,7 +56,6 @@ public interface UserRepository extends JpaRepository { @Query("FROM User WHERE (name LIKE %?1% OR surname LIKE %?1%)") List searchForUsers(@Param("query") String query); - @Query("FROM User WHERE (name LIKE %?1% OR surname LIKE %?1%) AND role=?2") /** * search for user with given query * @@ -64,6 +63,7 @@ public interface UserRepository extends JpaRepository { * @param role limits results by role * @return list opf results */ + @Query("FROM User WHERE (name LIKE %?1% OR surname LIKE %?1%) AND role=?2") List searchForUsers(@Param("query") String query, @Param("role") UserRoles role); @Query("FROM User WHERE role=?1") diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java index ce21a8f..dc27cb2 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java @@ -5,13 +5,15 @@ import java.util.Optional; import com.plannaplan.entities.Assignment; import com.plannaplan.entities.Commision; +import com.plannaplan.entities.User; import com.plannaplan.repositories.AssignmentRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** - * Service of Assignment which can save assignments, diplay assignments, get ammount of assigments. + * Service of Assignment which can save assignments, diplay assignments, get + * ammount of assigments. */ @Service @@ -19,11 +21,15 @@ public class AssignmentService { @Autowired private AssignmentRepository repo; + @Autowired + private UserService userService; + public AssignmentService() { } /** * Save given assignment + * * @param assignment assignment to save * @return assignment saved assignment with database id */ @@ -32,16 +38,14 @@ public class AssignmentService { } /* - * getCommisionAssignments - * Return id of the commision + * getCommisionAssignments Return id of the commision */ public List getCommisionAssignments(Commision com) { return this.repo.getByCommision(com.getId()); } /* - * getAssignmentsAmmount - * Return count assignments ammount + * getAssignmentsAmmount Return count assignments ammount */ public long getAssignmentsAmmount() { return this.repo.count(); @@ -49,10 +53,19 @@ public class AssignmentService { /** * Get assigmnent by id + * * @param id id of assigmnent * @return Optional of assignment */ public Optional getById(Long id) { return this.repo.findById(id); } + + public void callAcceptAlgorythm() { + final List students = this.userService.getStudentsSortedByRanking(); + + students.forEach(e -> { + System.out.println(e.getRanking()); + }); + } } diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 16de2d8..1c8533a 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -3,6 +3,7 @@ package com.plannaplan.services; import java.util.List; import java.util.Optional; import java.util.UUID; +import java.util.stream.Collectors; import com.plannaplan.entities.User; import com.plannaplan.exceptions.UserNotFoundException; @@ -153,4 +154,15 @@ public class UserService { return this.repo.getAllByRole(UserRoles.ADMIN).size() > 0; } + /** + * get students sorted by their ranking + * + * @return list of students + */ + public List getStudentsSortedByRanking() { + return this.repo.getAllByRole(UserRoles.STUDENT).stream().sorted((u1, u2) -> { + return -1 * u1.getRanking().compareTo(u2.getRanking()); + }).collect(Collectors.toList()); + } + } \ No newline at end of file diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java index 1f4bb31..10ec7cf 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java @@ -2,12 +2,19 @@ package com.plannaplan.services; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.MethodMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.assertTrue; import java.util.List; +import java.util.Random; +import java.util.UUID; +import java.util.stream.IntStream; + +import javax.management.relation.Role; import com.plannaplan.entities.Assignment; import com.plannaplan.entities.Commision; @@ -56,6 +63,19 @@ public class AssignmentServiceTest { assertTrue("Returned list size should be 1", response.size() == 1); } + @Test + @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) + public void shouldPerformAcceptAlgorythm() { + final Random generator = new Random(); + IntStream.range(0, 1700).forEach(i -> { + this.userService.save(new User(null, null, + "shouldPerformAcceptAlgorythm-" + UUID.randomUUID().toString() + "@AssignmentService.test", null, + UserRoles.STUDENT, generator.nextInt(400) + 100)); + }); + this.service.callAcceptAlgorythm(); + System.out.println("-X_-x-x-x-_X-x-x-x-X_-x-x-x-"); + } + private void addAssignmentToCommision(Commision com) { Assignment a = new Assignment(null, com); this.service.save(a); From 2c0008afe1bbf279a463d614f7db35c7aa95a3bf Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sat, 2 Jan 2021 15:26:05 +0100 Subject: [PATCH 04/14] Checkpoint - added many to many user group relations and test cerating users and groups to accept test --- .../java/com/plannaplan/entities/Groups.java | 25 +++++++++++++--- .../java/com/plannaplan/entities/User.java | 19 ++++++++++++ .../services/AssignmentServiceTest.java | 30 +++++++++++++++++++ 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/Groups.java b/buisnesslogic/src/main/java/com/plannaplan/entities/Groups.java index eccbdc5..1a2b5a3 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/Groups.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/Groups.java @@ -1,10 +1,14 @@ package com.plannaplan.entities; +import java.util.HashSet; +import java.util.Set; + import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import com.plannaplan.types.GroupType; @@ -36,23 +40,36 @@ public class Groups { private Lecturer lecturer; private Integer zajCykId; private Integer grNr; + @ManyToMany(mappedBy = "studentRegisteredGrups") + private Set registeredStudents; + + public Set getRegisteredStudents() { + return this.registeredStudents; + } + + public void assignUser(User user) { + if (this.registeredStudents == null) { + this.registeredStudents = new HashSet<>(); + } + this.registeredStudents.add(user); + } public Groups() { } - public Integer getGr_nr() { + public Integer getGrNr() { return grNr; } - public void setGr_nr(Integer grNr) { + public void setGrNr(Integer grNr) { this.grNr = grNr; } - public Integer getZaj_cyk_id() { + public Integer getZajCykId() { return zajCykId; } - public void setZaj_cyk_id(Integer zajCykId) { + public void setZajCykId(Integer zajCykId) { this.zajCykId = zajCykId; } diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/User.java b/buisnesslogic/src/main/java/com/plannaplan/entities/User.java index 422ae1f..26cac76 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/User.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/User.java @@ -1,13 +1,18 @@ package com.plannaplan.entities; import java.sql.Timestamp; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; +import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; import com.plannaplan.models.UserApiResponse; import com.plannaplan.types.UserRoles; @@ -33,6 +38,20 @@ public class User { private String refreshToken; private Timestamp tokenUsageDate; private Integer ranking; + @ManyToMany(cascade = CascadeType.ALL) + @JoinTable + private Set studentRegisteredGrups; + + public Set getStudentRegisteredGrups() { + return this.studentRegisteredGrups; + } + + public void claimGroup(Groups group) { + if (this.studentRegisteredGrups == null) { + this.studentRegisteredGrups = new HashSet<>(); + } + this.studentRegisteredGrups.add(group); + } public User() { } diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java index 10ec7cf..93bc604 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java @@ -18,8 +18,10 @@ import javax.management.relation.Role; import com.plannaplan.entities.Assignment; import com.plannaplan.entities.Commision; +import com.plannaplan.entities.Groups; import com.plannaplan.entities.User; import com.plannaplan.types.UserRoles; +import com.plannaplan.types.WeekDay; import org.junit.Test; @@ -36,6 +38,8 @@ public class AssignmentServiceTest { private CommisionService comServie; @Autowired private UserService userService; + @Autowired + private GroupService groupService; @Test public void shouldSaveAssignment() { @@ -67,11 +71,37 @@ 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, "shouldPerformAcceptAlgorythm-" + UUID.randomUUID().toString() + "@AssignmentService.test", null, UserRoles.STUDENT, generator.nextInt(400) + 100)); }); + + IntStream.range(0, 418).forEach(i -> { + this.groupService.save(new Groups(generator.nextInt(80) + 20, null, null, + 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-"); } From 0f8b4eafb5631e76b75a6a6c7465bf5b9dd3eb10 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sun, 3 Jan 2021 16:21:06 +0100 Subject: [PATCH 05/14] Checkpint - algorythm works --- .../com/plannaplan/entities/Assignment.java | 13 +---- .../java/com/plannaplan/entities/Groups.java | 3 +- .../java/com/plannaplan/entities/User.java | 3 +- .../services/AssignmentService.java | 19 ++++++- .../services/AssignmentServiceTest.java | 55 ++++++++++++------- 5 files changed, 59 insertions(+), 34 deletions(-) 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); From 61d035e342bf8263ff66461d49512dc13b4b173f Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sun, 3 Jan 2021 16:30:15 +0100 Subject: [PATCH 06/14] Code cleaning --- .../main/java/com/plannaplan/services/AssignmentService.java | 3 --- .../java/com/plannaplan/services/AssignmentServiceTest.java | 3 --- 2 files changed, 6 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java index 272494a..e1f5f31 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java @@ -25,9 +25,6 @@ public class AssignmentService { @Autowired private CommisionService service; - @Autowired - private GroupService groupService; - @Autowired private UserService userService; diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java index d787ab2..5260f34 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java @@ -9,14 +9,11 @@ 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; import java.util.stream.IntStream; -import javax.management.relation.Role; - import com.plannaplan.entities.Assignment; import com.plannaplan.entities.Commision; import com.plannaplan.entities.Groups; From 95cc34c67679c56e36b3d8ce0d0dbaf2a4caa90d Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sun, 3 Jan 2021 17:10:36 +0100 Subject: [PATCH 07/14] Docs + email sending --- .../plannaplan/models/EmailAcceptedData.java | 97 +++++++++++++++++++ .../services/AssignmentService.java | 17 ++++ .../com/plannaplan/services/EmailService.java | 19 ++++ .../services/AssignmentServiceTest.java | 4 + 4 files changed, 137 insertions(+) create mode 100755 buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java diff --git a/buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java b/buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java new file mode 100755 index 0000000..c17ffd0 --- /dev/null +++ b/buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java @@ -0,0 +1,97 @@ +package com.plannaplan.models; + +import java.util.Iterator; +import java.util.List; + +import com.plannaplan.entities.Groups; + +/** + * Instance to keep data to send in mail about accepted courses results + */ +public class EmailAcceptedData { + private List accepted; + private List removed; + + public EmailAcceptedData() { + + } + + /** + * creates instance of class + * + * @param accepted list of groups that user joined to + * @param removed lsit of groups that user failed to join + */ + public EmailAcceptedData(List accepted, List removed) { + this.accepted = accepted; + this.removed = removed; + } + + /** + * get list of removed assignments + * + * @return removed assingments + */ + public List getRemoved() { + return removed; + } + + /** + * set list of removed assignments + * + * @param removed list of removed assignments + */ + public void setRemoved(List removed) { + this.removed = removed; + } + + /** + * get list of accepted assignments + * + * @return accepted assingments + */ + public List getAccepted() { + return accepted; + } + + /** + * set list of accepted assignments + * + * @param removed list of accepted assignments + */ + public void setAccepted(List accepted) { + this.accepted = accepted; + } + + /** + * it creates and return email message body + * + * @return string with emiale massage + */ + public String getEmailMessage() { + String response = "Akceptacja Twoich przedmiotów właśnie dobiegła końca.\n\n"; + if (this.accepted != null && this.accepted.size() > 0) { + response += "Zatwierdzone grupy: \n"; + Iterator iterator = accepted.iterator(); + while (iterator.hasNext()) { + final Groups gorup = iterator.next(); + final String courseName = gorup.getCourseId() != null ? gorup.getCourseId().getName() + : "Nieznana grupa"; + response += (" - " + courseName + " - " + gorup.getType() + "\n"); + } + + } + if (this.removed != null && this.removed.size() > 0) { + response += "Usunięte grupy: \n"; + Iterator iterator = removed.iterator(); + while (iterator.hasNext()) { + final Groups gorup = iterator.next(); + final String courseName = gorup.getCourseId() != null ? gorup.getCourseId().getName() + : "Nieznana grupa"; + response += (" - " + courseName + " - " + gorup.getType() + "\n"); + } + + } + return response; + } +} diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java index e1f5f31..90d62d6 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java @@ -1,5 +1,6 @@ package com.plannaplan.services; +import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -7,6 +8,7 @@ import com.plannaplan.entities.Assignment; import com.plannaplan.entities.Commision; import com.plannaplan.entities.Groups; import com.plannaplan.entities.User; +import com.plannaplan.models.EmailAcceptedData; import com.plannaplan.repositories.AssignmentRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +30,9 @@ public class AssignmentService { @Autowired private UserService userService; + @Autowired + private EmailService emailService; + public AssignmentService() { } @@ -65,11 +70,19 @@ public class AssignmentService { return this.repo.findById(id); } + /** + * this method will activate accept algorythm for all students. Algorythm is + * takeing each student in order defined by ranking and accept for him groups + * that are joinable for him + */ public void callAcceptAlgorythm() { final List students = this.userService.getStudentsSortedByRanking(); students.forEach(e -> { final Optional com = this.service.getNewestCommision(e); + final List accepted = new ArrayList<>(); + final List removed = new ArrayList<>(); + if (com.isPresent()) { final List assignments = this.getCommisionAssignments(com.get()); assignments.forEach(a -> { @@ -77,9 +90,13 @@ public class AssignmentService { if (group.getCapacity() > group.getRegisteredStudents().size()) { e.claimGroup(group); this.userService.save(e); + accepted.add(group); + } else { + removed.add(group); } }); } + this.emailService.sendAcceptationResult(e, new EmailAcceptedData(accepted, removed)); }); } } diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/EmailService.java b/buisnesslogic/src/main/java/com/plannaplan/services/EmailService.java index a26495e..cfa0bee 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/EmailService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/EmailService.java @@ -1,5 +1,8 @@ package com.plannaplan.services; +import com.plannaplan.entities.User; +import com.plannaplan.models.EmailAcceptedData; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.SimpleMailMessage; @@ -35,4 +38,20 @@ public class EmailService { mailMessage.setText(message); emailSender.send(mailMessage); } + + /** + * sends email with infromation about accepted groups + * + * @param user user to send a mail + * @param data EmailAcceptedData instance containing informations about accepted + * and removed groups + */ + public void sendAcceptationResult(User user, EmailAcceptedData data) { + SimpleMailMessage mailMessage = new SimpleMailMessage(); + mailMessage.setFrom(appEmail); + mailMessage.setTo(user.getEmail()); + mailMessage.setSubject("[PlanNaPlan] Akceptacja przedmiotów"); + mailMessage.setText(data.getEmailMessage()); + emailSender.send(mailMessage); + } } diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java index 5260f34..afa4405 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java @@ -85,6 +85,10 @@ public class AssignmentServiceTest { System.out.println("-X_-x-x-x-_X-x-x-x-X_-x-x-x-"); } + /** + * This test will also sand a mail to users as a side effect. U can check them + * in mailcater + */ @Test @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) public void shouldNotAcceptForOnePerson() { From 44f8c610d9c0ab882be9994c71d01d5e77ba164d Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sun, 3 Jan 2021 17:57:32 +0100 Subject: [PATCH 08/14] Tested in big data set --- .../services/AssignmentService.java | 2 +- .../com/plannaplan/services/UserService.java | 4 ++++ .../services/AssignmentServiceTest.java | 23 ++++++++++++------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java index 90d62d6..cb449d8 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java @@ -89,13 +89,13 @@ public class AssignmentService { final Groups group = a.getGroup(); if (group.getCapacity() > group.getRegisteredStudents().size()) { e.claimGroup(group); - this.userService.save(e); accepted.add(group); } else { removed.add(group); } }); } + this.userService.save(e); this.emailService.sendAcceptationResult(e, new EmailAcceptedData(accepted, removed)); }); } diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 1c8533a..64cbe9d 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -154,6 +154,10 @@ public class UserService { return this.repo.getAllByRole(UserRoles.ADMIN).size() > 0; } + public void saveAll(List users) { + this.repo.saveAll(users); + } + /** * get students sorted by their ranking * diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/AssignmentServiceTest.java index afa4405..efe00fa 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; @@ -21,6 +22,7 @@ import com.plannaplan.entities.User; import com.plannaplan.types.UserRoles; import com.plannaplan.types.WeekDay; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -66,23 +68,28 @@ public class AssignmentServiceTest { } @Test + @Ignore @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) public void shouldPerformAcceptAlgorythm() { final Random generator = new Random(); - IntStream.range(0, 1700).forEach(i -> { - this.userService.save(new User(null, null, - "shouldPerformAcceptAlgorythm-" + UUID.randomUUID().toString() + "@AssignmentService.test", null, - UserRoles.STUDENT, generator.nextInt(400) + 100)); - }); + final List groups = new ArrayList<>(); IntStream.range(0, 418).forEach(i -> { - this.groupService.save(new Groups(generator.nextInt(80) + 20, null, null, - generator.nextInt(9) * 30 + 9 * 30, WeekDay.getDay(generator.nextInt(5)), null)); + groups.add(this.groupService.save(new Groups(generator.nextInt(80) + 20, null, null, + generator.nextInt(9) * 30 + 9 * 30, WeekDay.getDay(generator.nextInt(5)), null))); }); + IntStream.range(0, 1700).forEach(i -> { + final User user = this.userService.save(new User(null, null, + "shouldPerformAcceptAlgorythm-" + UUID.randomUUID().toString() + "@AssignmentService.test", null, + UserRoles.STUDENT, generator.nextInt(400) + 100)); + final Commision com = this.comServie.save(new Commision(user)); + IntStream.range(0, 5).forEach(j -> { + this.service.save(new Assignment(groups.get(generator.nextInt(groups.size())), com)); + }); + }); this.service.callAcceptAlgorythm(); - System.out.println("-X_-x-x-x-_X-x-x-x-X_-x-x-x-"); } /** From a6e66182025eaa8c2d19849a3a95f6337a59e1e9 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sun, 3 Jan 2021 18:06:25 +0100 Subject: [PATCH 09/14] Added structare for tour endindgs --- .../java/com/plannaplan/services/EventService.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java b/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java index 7569bd0..56a1cca 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java @@ -1,5 +1,6 @@ package com.plannaplan.services; +import org.springframework.context.annotation.Bean; // import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -14,4 +15,14 @@ public class EventService { public void collectGroupLosses() { System.out.println("Checking for groups"); } + + @Scheduled(cron = "#{@getTourValue}") + public void performAcceptAction() { + System.out.println("Checking for hahaha"); + } + + @Bean + public String getTourValue() { + return "0 6 18 * * *"; + } } From 2141f35e3faa098a055e9e05b620441b8373e18e Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Mon, 4 Jan 2021 18:10:14 +0100 Subject: [PATCH 10/14] Chcekpoint - needs docs cleaning and tests --- .../com/plannaplan/entities/AppConfig.java | 26 +++++++ .../services/ConfiguratorService.java | 30 ++++++-- .../com/plannaplan/services/EventService.java | 68 +++++++++++++++++-- .../tasks/PerformAcceptAlgorythmTask.java | 11 +++ .../plannaplan/entities/AppConfigTest.java | 21 ++++++ .../services/ConfiguratorServiceTest.java | 15 ++-- .../src/main/java/com/plannaplan/App.java | 4 +- 7 files changed, 155 insertions(+), 20 deletions(-) create mode 100755 buisnesslogic/src/main/java/com/plannaplan/tasks/PerformAcceptAlgorythmTask.java diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java b/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java index 6487691..a130e8e 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java @@ -2,6 +2,8 @@ package com.plannaplan.entities; import java.sql.Date; import java.sql.Timestamp; +import java.time.LocalDate; +import java.util.TimeZone; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -11,6 +13,8 @@ import javax.persistence.Id; import com.plannaplan.models.TourData; import com.plannaplan.types.AppState; +import org.springframework.scheduling.support.CronTrigger; + /** * entity that keeps app configurations */ @@ -115,4 +119,26 @@ public class AppConfig { return AppState.NO_TOUR; } + public CronTrigger getFirstTourEndCron() { + return getCron(this.firstTourEnd); + } + + public CronTrigger getSecondTourEndCron() { + return getCron(this.secondTourEnd); + } + + public CronTrigger getFirstTourStartCron() { + return getCron(this.firstTourStart); + } + + public CronTrigger getSecondTourStartCron() { + return getCron(this.secondTourStart); + } + + private CronTrigger getCron(Date date) { + final LocalDate tourEnd = date.toLocalDate(); + return new CronTrigger("0 0 0 " + tourEnd.getDayOfMonth() + " " + tourEnd.getMonthValue() + " ?", + TimeZone.getTimeZone(TimeZone.getDefault().getID())); + } + } diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java b/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java index baa7510..e528033 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java @@ -4,6 +4,7 @@ import com.plannaplan.models.ConfigData; import com.plannaplan.models.FileData; import com.plannaplan.models.TourData; import com.plannaplan.repositories.AppConfigRepository; +import com.plannaplan.tasks.PerformAcceptAlgorythmTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -26,29 +27,38 @@ public class ConfiguratorService { private FileToDatabaseMigrator migrator; @Autowired private AppConfigRepository configRepo; + @Autowired + private EventService eventService; public ConfiguratorService() { } /** - * methoid to config system + * methoid to config system. it shedules PerformAcceptAlgorythmTask as a side + * effect * * @param data ConfigData containng system configs */ public void config(ConfigData data) { FileReader reader = new FileReader(data.getFilestream()); FileData coursesData = reader.read(); - this.configRepo.save(new AppConfig(data.getFirstTour(), data.getSecondTour())); + final AppConfig config = new AppConfig(data.getFirstTour(), data.getSecondTour()); + this.configRepo.save(config); migrator.migrate(coursesData); + this.shceduleTaskAfterToursDateChange(config); } /** - * Save tours to DataBase - * @param firstTour First tour period. + * Save tours to DataBase and shedule PerformAcceptAlgorythmTask as a side + * effect + * + * @param firstTour First tour period. * @param secondTour Second tour period. */ public void saveTours(TourData firstTour, TourData secondTour) { - this.configRepo.save(new AppConfig(firstTour, secondTour)); + final AppConfig config = new AppConfig(firstTour, secondTour); + this.configRepo.save(config); + this.shceduleTaskAfterToursDateChange(config); } /** @@ -78,9 +88,17 @@ public class ConfiguratorService { * * @param inputStream This input stream contains new courses to import. */ - public void importCoursesStream(InputStream inputStream) { + public void importCoursesStream(InputStream inputStream) { FileReader reader = new FileReader(inputStream); FileData coursesData = reader.read(); migrator.migrate(coursesData); } + + private void shceduleTaskAfterToursDateChange(AppConfig config) { + this.eventService.scheduleTask(EventService.FIRST_TOUR_SCHEDULE, new PerformAcceptAlgorythmTask(), + config.getFirstTourEndCron()); + + this.eventService.scheduleTask(EventService.SECOND_TOUR_SCHEDULE, new PerformAcceptAlgorythmTask(), + config.getSecondTourEndCron()); + } } \ No newline at end of file diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java b/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java index 56a1cca..132dafc 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java @@ -1,28 +1,82 @@ package com.plannaplan.services; +import java.sql.Date; +import java.time.LocalDate; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; +import java.util.concurrent.ScheduledFuture; + +import javax.annotation.PostConstruct; + +import com.plannaplan.entities.AppConfig; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; +import org.springframework.scheduling.TaskScheduler; // import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Service; @Service public class EventService { + public static final int FIRST_TOUR_SCHEDULE = 0; + public static final int SECOND_TOUR_SCHEDULE = 1; + // @Autowired // private EmailService emailService; - @Scheduled(cron = "0 2 17 * * *") + private ThreadPoolTaskScheduler scheduler; + private Map> jobsMap = new HashMap<>(); + + // @Autowired + // private ConfiguratorService configService; + + @Scheduled(cron = "0 24 17 * * *") public void collectGroupLosses() { System.out.println("Checking for groups"); } - @Scheduled(cron = "#{@getTourValue}") - public void performAcceptAction() { - System.out.println("Checking for hahaha"); + // @Scheduled(cron = "#{eventService.getFirstTourValue()}") + // public void performAcceptAction() { + // System.out.println("Checking for hahaha"); + // } + + // new CronTrigger("0 0 0 * * ?", + // TimeZone.getTimeZone(TimeZone.getDefault().getID())) + + public void scheduleTask(int taskId, Runnable task, CronTrigger cronTrigger) { + ScheduledFuture scheduledTask = jobsMap.get(taskId); + if (scheduledTask != null) { + scheduledTask.cancel(true); + jobsMap.put(taskId, null); + } + scheduledTask = this.scheduler.schedule(task, cronTrigger); + jobsMap.put(taskId, scheduledTask); } - @Bean - public String getTourValue() { - return "0 6 18 * * *"; + // @Bean + // public String getFirstTourValue() { + // final AppConfig config = this.configService.getCurrentConfig(); + // final LocalDate tourEnd = config.getFirstTourEnd().toLocalDate(); + // final String cronExp = "0 0 0 " + tourEnd.getDayOfMonth() + " " + + // tourEnd.getMonthValue() + " " + // + tourEnd.getYear(); + // return cronExp; + // } + + // @Bean + // public String getSecondTourValue() { + // return "0 6 18 * * *"; + // } + + @PostConstruct + public void initialize() { + this.scheduler = new ThreadPoolTaskScheduler(); + this.scheduler.initialize(); } } diff --git a/buisnesslogic/src/main/java/com/plannaplan/tasks/PerformAcceptAlgorythmTask.java b/buisnesslogic/src/main/java/com/plannaplan/tasks/PerformAcceptAlgorythmTask.java new file mode 100755 index 0000000..943e904 --- /dev/null +++ b/buisnesslogic/src/main/java/com/plannaplan/tasks/PerformAcceptAlgorythmTask.java @@ -0,0 +1,11 @@ +package com.plannaplan.tasks; + +public class PerformAcceptAlgorythmTask implements Runnable { + + @Override + public void run() { + System.out.println("XDDDDDDDd"); + + } + +} diff --git a/buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java b/buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java index a280c22..f03fc6e 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java @@ -1,5 +1,6 @@ package com.plannaplan.entities; +import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.sql.Date; @@ -138,4 +139,24 @@ public class AppConfigTest { assertTrue(config.getCurrentState() == AppState.SECOND_TOUR); } + @Test + public void shouldReturnFirstStartDatesCorns() { + assertFalse(false); + } + + @Test + public void shouldReturnSecondStartDatesCorns() { + assertFalse(false); + } + + @Test + public void shouldReturnFirstEndDatesCorns() { + assertFalse(false); + } + + @Test + public void shouldReturnSecondEndDatesCorns() { + assertFalse(false); + } + } diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/ConfiguratorServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/ConfiguratorServiceTest.java index d69754d..1cd01d4 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/services/ConfiguratorServiceTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/services/ConfiguratorServiceTest.java @@ -66,20 +66,20 @@ public class ConfiguratorServiceTest { @Test @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) - public void shouldUpdatePreviousImport(){ + public void shouldUpdatePreviousImport() { final InputStream inputStream = getClass().getClassLoader() - .getResourceAsStream(ConfiguratorServiceTest.BEFORE_UPDATE_FILE); + .getResourceAsStream(ConfiguratorServiceTest.BEFORE_UPDATE_FILE); this.configuratorService.importCoursesStream(inputStream); int groups_ammount = this.groupService.getGroupsAmmount(); - + assertTrue(groups_ammount == 2); final InputStream inputStream2 = getClass().getClassLoader() - .getResourceAsStream(ConfiguratorServiceTest.AFTER_UPDATE_FILE); + .getResourceAsStream(ConfiguratorServiceTest.AFTER_UPDATE_FILE); this.configuratorService.importCoursesStream(inputStream2); int groups_ammount2 = this.groupService.getGroupsAmmount(); - Optional newGroup = this.groupService.find(456458, 3); + Optional newGroup = this.groupService.find(456458, 3); Optional updateGroup = this.groupService.find(456457, 2); assertTrue(groups_ammount2 == 3); @@ -101,4 +101,9 @@ public class ConfiguratorServiceTest { } + @Test + public void shlouldScheduleTaskWhenSetTourDate() { + assertTrue(false); + } + } diff --git a/restservice/src/main/java/com/plannaplan/App.java b/restservice/src/main/java/com/plannaplan/App.java index 7f9885c..5369a49 100755 --- a/restservice/src/main/java/com/plannaplan/App.java +++ b/restservice/src/main/java/com/plannaplan/App.java @@ -56,8 +56,8 @@ public class App { final Random generator = new Random(); final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("Zajecia.xlsx"); final ConfigData data = new ConfigData( - new TourData(new Date(System.currentTimeMillis()), - new Date(System.currentTimeMillis() + 86400000)), + new TourData(new Date(System.currentTimeMillis() - 86400000), + new Date(System.currentTimeMillis())), new TourData(new Date(System.currentTimeMillis() + 86400000), new Date(System.currentTimeMillis() + 2 * 86400000)), inputStream); From 3485dff86fda92b6fbc335111953f78730b46fe7 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Tue, 5 Jan 2021 11:14:10 +0100 Subject: [PATCH 11/14] Added performing tours and docs --- .../com/plannaplan/entities/AppConfig.java | 29 +++++++++++- .../services/ConfiguratorService.java | 42 +++++++++++++++-- .../com/plannaplan/services/EventService.java | 47 ++++--------------- .../tasks/PerformAcceptAlgorythmTask.java | 11 ----- 4 files changed, 73 insertions(+), 56 deletions(-) delete mode 100755 buisnesslogic/src/main/java/com/plannaplan/tasks/PerformAcceptAlgorythmTask.java diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java b/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java index a130e8e..2de1520 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java @@ -119,25 +119,52 @@ public class AppConfig { return AppState.NO_TOUR; } + /** + * get cron expression of first tour end + * + * @return spring cron expression + */ public CronTrigger getFirstTourEndCron() { return getCron(this.firstTourEnd); } + /** + * get cron expression of second tour end + * + * @return spring cron expression + */ public CronTrigger getSecondTourEndCron() { return getCron(this.secondTourEnd); } + /** + * get cron expression of first tour start + * + * @return spring cron expression + */ public CronTrigger getFirstTourStartCron() { return getCron(this.firstTourStart); } + /** + * get cron expression of second tour start + * + * @return spring cron expression + */ public CronTrigger getSecondTourStartCron() { return getCron(this.secondTourStart); } + /** + * create spring cron expression + * + * @param date date to create cron exp from + * @return spring cron expression. Remember that spring's cron deosn't contain + * year in it. + */ private CronTrigger getCron(Date date) { final LocalDate tourEnd = date.toLocalDate(); - return new CronTrigger("0 0 0 " + tourEnd.getDayOfMonth() + " " + tourEnd.getMonthValue() + " ?", + return new CronTrigger("0 11 11 " + tourEnd.getDayOfMonth() + " " + tourEnd.getMonthValue() + " ?", TimeZone.getTimeZone(TimeZone.getDefault().getID())); } diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java b/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java index e528033..6d045c8 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/ConfiguratorService.java @@ -4,12 +4,13 @@ import com.plannaplan.models.ConfigData; import com.plannaplan.models.FileData; import com.plannaplan.models.TourData; import com.plannaplan.repositories.AppConfigRepository; -import com.plannaplan.tasks.PerformAcceptAlgorythmTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.InputStream; +import java.sql.Date; +import java.time.LocalDate; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -29,6 +30,8 @@ public class ConfiguratorService { private AppConfigRepository configRepo; @Autowired private EventService eventService; + @Autowired + private AssignmentService assignmentService; public ConfiguratorService() { } @@ -95,10 +98,39 @@ public class ConfiguratorService { } private void shceduleTaskAfterToursDateChange(AppConfig config) { - this.eventService.scheduleTask(EventService.FIRST_TOUR_SCHEDULE, new PerformAcceptAlgorythmTask(), - config.getFirstTourEndCron()); - this.eventService.scheduleTask(EventService.SECOND_TOUR_SCHEDULE, new PerformAcceptAlgorythmTask(), - config.getSecondTourEndCron()); + this.eventService.scheduleTask(EventService.FIRST_TOUR_SCHEDULE, + new AlgorythmAcceptTask(config.getFirstTourEnd()), config.getFirstTourEndCron()); + + this.eventService.scheduleTask(EventService.SECOND_TOUR_SCHEDULE, + new AlgorythmAcceptTask(config.getSecondTourEnd()), config.getSecondTourEndCron()); + } + + /** + * It's local class to perform accept Task. It's needed to be here due to have + * acces to AssignmentService. + */ + private class AlgorythmAcceptTask implements Runnable { + + private LocalDate localDate; + + /** + * create instance of AlgorythmAcceptTask + * + * @param date date of algorythm perform. Needed to check if ti's being called + * in correct year + */ + public AlgorythmAcceptTask(Date date) { + this.localDate = date.toLocalDate(); + } + + @Override + public void run() { + if (localDate.getYear() == LocalDate.now().getYear()) { + assignmentService.callAcceptAlgorythm(); + } + + } + } } \ No newline at end of file diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java b/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java index 132dafc..b70af1b 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/EventService.java @@ -1,21 +1,11 @@ package com.plannaplan.services; -import java.sql.Date; -import java.time.LocalDate; -import java.util.Calendar; import java.util.HashMap; import java.util.Map; -import java.util.TimeZone; import java.util.concurrent.ScheduledFuture; import javax.annotation.PostConstruct; -import com.plannaplan.entities.AppConfig; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.scheduling.TaskScheduler; -// import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; @@ -27,28 +17,22 @@ public class EventService { public static final int FIRST_TOUR_SCHEDULE = 0; public static final int SECOND_TOUR_SCHEDULE = 1; - // @Autowired - // private EmailService emailService; - private ThreadPoolTaskScheduler scheduler; private Map> jobsMap = new HashMap<>(); - // @Autowired - // private ConfiguratorService configService; - @Scheduled(cron = "0 24 17 * * *") public void collectGroupLosses() { System.out.println("Checking for groups"); } - // @Scheduled(cron = "#{eventService.getFirstTourValue()}") - // public void performAcceptAction() { - // System.out.println("Checking for hahaha"); - // } - - // new CronTrigger("0 0 0 * * ?", - // TimeZone.getTimeZone(TimeZone.getDefault().getID())) - + /** + * Schedule provided task to perform + * + * @param taskId static filed of this class that represents to what event + * we want to assign task + * @param task runnable class that perform task in implemented run method + * @param cronTrigger CronTrigger instance with date to perform + */ public void scheduleTask(int taskId, Runnable task, CronTrigger cronTrigger) { ScheduledFuture scheduledTask = jobsMap.get(taskId); if (scheduledTask != null) { @@ -59,21 +43,6 @@ public class EventService { jobsMap.put(taskId, scheduledTask); } - // @Bean - // public String getFirstTourValue() { - // final AppConfig config = this.configService.getCurrentConfig(); - // final LocalDate tourEnd = config.getFirstTourEnd().toLocalDate(); - // final String cronExp = "0 0 0 " + tourEnd.getDayOfMonth() + " " + - // tourEnd.getMonthValue() + " " - // + tourEnd.getYear(); - // return cronExp; - // } - - // @Bean - // public String getSecondTourValue() { - // return "0 6 18 * * *"; - // } - @PostConstruct public void initialize() { this.scheduler = new ThreadPoolTaskScheduler(); diff --git a/buisnesslogic/src/main/java/com/plannaplan/tasks/PerformAcceptAlgorythmTask.java b/buisnesslogic/src/main/java/com/plannaplan/tasks/PerformAcceptAlgorythmTask.java deleted file mode 100755 index 943e904..0000000 --- a/buisnesslogic/src/main/java/com/plannaplan/tasks/PerformAcceptAlgorythmTask.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.plannaplan.tasks; - -public class PerformAcceptAlgorythmTask implements Runnable { - - @Override - public void run() { - System.out.println("XDDDDDDDd"); - - } - -} From 0b40d3729c899097054ddaa3a448007cb334adbd Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Tue, 5 Jan 2021 11:14:29 +0100 Subject: [PATCH 12/14] 0 0 --- .../src/main/java/com/plannaplan/entities/AppConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java b/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java index 2de1520..52db7a1 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/AppConfig.java @@ -164,7 +164,7 @@ public class AppConfig { */ private CronTrigger getCron(Date date) { final LocalDate tourEnd = date.toLocalDate(); - return new CronTrigger("0 11 11 " + tourEnd.getDayOfMonth() + " " + tourEnd.getMonthValue() + " ?", + return new CronTrigger("0 0 0 " + tourEnd.getDayOfMonth() + " " + tourEnd.getMonthValue() + " ?", TimeZone.getTimeZone(TimeZone.getDefault().getID())); } From 463af01dc6d4dc876f6dfd834a5ed4292eb57057 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Tue, 5 Jan 2021 11:44:54 +0100 Subject: [PATCH 13/14] Added tests --- .../services/AssignmentService.java | 13 +++++-- .../plannaplan/services/CommisionService.java | 33 +++++++++-------- .../plannaplan/entities/AppConfigTest.java | 37 ++++++++++++++++--- .../services/ConfiguratorServiceTest.java | 29 ++++++++++++++- 4 files changed, 85 insertions(+), 27 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java index cb449d8..e5a8ccf 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/AssignmentService.java @@ -46,15 +46,20 @@ public class AssignmentService { return this.repo.save(assignment); } - /* - * getCommisionAssignments Return id of the commision + /** + * gets list of assignments of given commision + * + * @param com Commision to get assinments from + * @return list of assignments */ public List getCommisionAssignments(Commision com) { return this.repo.getByCommision(com.getId()); } - /* - * getAssignmentsAmmount Return count assignments ammount + /** + * get ammount of all assignments (not only for selected commision) + * + * @return long - ammount of assingments */ public long getAssignmentsAmmount() { return this.repo.count(); diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/CommisionService.java b/buisnesslogic/src/main/java/com/plannaplan/services/CommisionService.java index 63d4c4f..109dfd4 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/CommisionService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/CommisionService.java @@ -12,7 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** - * Service of CommisionService which can save commision, get user's commisions, get newest user's commision, get ammount of commisions. + * Service of CommisionService which can save commision, get user's commisions, + * get newest user's commision, get ammount of commisions. */ @Service @@ -25,12 +26,6 @@ public class CommisionService { public CommisionService() { } - /* - * save - * - * @param commision which assignment should be save in service - * @return commision - */ public Commision save(Commision commision) { Optional lastCommision = this.getNewestCommision(commision.getCommisionOwner()); if (lastCommision.isPresent()) { @@ -45,25 +40,31 @@ public class CommisionService { } - /* - * getUsersCommisions - * Return given users id + /** + * gets user commisions + * + * @param user owner of commisions + * @return list of user commisions */ public List getUsersCommisions(User user) { return this.repo.getUsers(user.getId()); } - /* - * getNewestCommision - * Return the newest commision of the user + /** + * get newest commision ov given user + * + * @param user owener of commision we attemp to get + * @return optional if commition was found */ public Optional getNewestCommision(User user) { return this.repo.getNewestCommision(user.getId()).stream().findFirst(); } - /* - * getCommisionsAmmount - * Return ammount of commisions + /** + * get ammpounts of commisions + * + * @return long - ammounts of commisions (all even from history, not only + * cutrrent one) */ public long getCommisionsAmmount() { return this.repo.count(); diff --git a/buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java b/buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java index f03fc6e..2d8f64f 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/entities/AppConfigTest.java @@ -1,6 +1,5 @@ package com.plannaplan.entities; -import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.sql.Date; @@ -141,22 +140,50 @@ public class AppConfigTest { @Test public void shouldReturnFirstStartDatesCorns() { - assertFalse(false); + final Date firtstTourStart = Date.valueOf("2020-11-12"); + final Date firtstTourEnd = Date.valueOf("2020-11-13"); + final Date secondTourStart = Date.valueOf("2020-11-14"); + final Date secondTourEnd = Date.valueOf("2020-11-15"); + + final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd), + new TourData(secondTourStart, secondTourEnd)); + assertTrue(config.getFirstTourStartCron().getExpression().equals("0 0 0 12 11 ?")); } @Test public void shouldReturnSecondStartDatesCorns() { - assertFalse(false); + final Date firtstTourStart = Date.valueOf("2020-11-12"); + final Date firtstTourEnd = Date.valueOf("2020-11-13"); + final Date secondTourStart = Date.valueOf("2020-11-14"); + final Date secondTourEnd = Date.valueOf("2020-11-15"); + + final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd), + new TourData(secondTourStart, secondTourEnd)); + assertTrue(config.getSecondTourStartCron().getExpression().equals("0 0 0 14 11 ?")); } @Test public void shouldReturnFirstEndDatesCorns() { - assertFalse(false); + final Date firtstTourStart = Date.valueOf("2020-11-12"); + final Date firtstTourEnd = Date.valueOf("2020-11-13"); + final Date secondTourStart = Date.valueOf("2020-11-14"); + final Date secondTourEnd = Date.valueOf("2020-11-15"); + + final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd), + new TourData(secondTourStart, secondTourEnd)); + assertTrue(config.getFirstTourEndCron().getExpression().equals("0 0 0 13 11 ?")); } @Test public void shouldReturnSecondEndDatesCorns() { - assertFalse(false); + final Date firtstTourStart = Date.valueOf("2020-11-12"); + final Date firtstTourEnd = Date.valueOf("2020-11-13"); + final Date secondTourStart = Date.valueOf("2020-11-14"); + final Date secondTourEnd = Date.valueOf("2020-11-15"); + + final AppConfig config = new AppConfig(new TourData(firtstTourStart, firtstTourEnd), + new TourData(secondTourStart, secondTourEnd)); + assertTrue(config.getSecondTourEndCron().getExpression().equals("0 0 0 15 11 ?")); } } diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/ConfiguratorServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/ConfiguratorServiceTest.java index 1cd01d4..4e299d1 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/services/ConfiguratorServiceTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/services/ConfiguratorServiceTest.java @@ -10,8 +10,11 @@ import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.assertTrue; import java.io.InputStream; +import java.lang.reflect.Field; import java.sql.Date; +import java.util.Map; import java.util.Optional; +import java.util.concurrent.ScheduledFuture; import com.plannaplan.TestApplication; import com.plannaplan.entities.AppConfig; @@ -46,6 +49,9 @@ public class ConfiguratorServiceTest { @Autowired private AppConfigRepository appConfigRepo; + @Autowired + private EventService eventService; + @Test public void shouldImportDataToDataBase() { final InputStream inputStream = getClass().getClassLoader() @@ -102,8 +108,27 @@ public class ConfiguratorServiceTest { } @Test - public void shlouldScheduleTaskWhenSetTourDate() { - assertTrue(false); + @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) + public void shlouldScheduleTaskWhenSetTourDate() + throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { + final InputStream inputStream = getClass().getClassLoader() + .getResourceAsStream(TestApplication.TEST_CONFIG_FILE); + final ConfigData data = new ConfigData( + new TourData(new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 86400000)), + new TourData(new Date(System.currentTimeMillis() + 86400000), + new Date(System.currentTimeMillis() + 2 * 86400000)), + inputStream); + this.configuratorService.config(data); + + final Field reader = EventService.class.getDeclaredField("jobsMap"); + reader.setAccessible(true); + + @SuppressWarnings("unchecked") + final Map> map = (Map>) reader.get(this.eventService); + + assertTrue(map.size() == 2); + assertTrue(map.get(EventService.FIRST_TOUR_SCHEDULE).isDone() == false); + assertTrue(map.get(EventService.SECOND_TOUR_SCHEDULE).isDone() == false); } } From ddabc1a0b97bda682109f446050e1410937af6f6 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Tue, 5 Jan 2021 11:50:25 +0100 Subject: [PATCH 14/14] Docs fixes --- .../src/main/java/com/plannaplan/entities/User.java | 10 +++++----- .../java/com/plannaplan/models/EmailAcceptedData.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/entities/User.java b/buisnesslogic/src/main/java/com/plannaplan/entities/User.java index 2b43899..149880d 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/entities/User.java +++ b/buisnesslogic/src/main/java/com/plannaplan/entities/User.java @@ -91,7 +91,7 @@ public class User { * @param mail mail given to the user * @param usosId id in the USOS system * @param role user's role - * @param ranking ranking points <100;500>. It's calculated by + * @param ranking ranking points [100;500]. It's calculated by * gradesAvg*100*studiesYear */ public User(String name, String surname, String mail, String usosId, UserRoles role, Integer ranking) { @@ -226,19 +226,19 @@ public class User { } /** - * Ranking points are <100;500>. It's calculated by gradesAvg*100*studiesYear + * Ranking points are [100;500]. It's calculated by gradesAvg*100*studiesYear * - * @return ranking points <100;500> + * @return ranking points [100;500] */ public Integer getRanking() { return ranking; } /** - * Ranking points setter. Ranking points are <100;500>. It's calculated by + * Ranking points setter. Ranking points are [100;500]. It's calculated by * gradesAvg*100*studiesYear * - * @param ranking ranking points <100;500> + * @param ranking ranking points [100;500] */ public void setRanking(Integer ranking) { this.ranking = ranking; diff --git a/buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java b/buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java index c17ffd0..341b32b 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java +++ b/buisnesslogic/src/main/java/com/plannaplan/models/EmailAcceptedData.java @@ -57,7 +57,7 @@ public class EmailAcceptedData { /** * set list of accepted assignments * - * @param removed list of accepted assignments + * @param accepted list of accepted assignments */ public void setAccepted(List accepted) { this.accepted = accepted;