From 95cc34c67679c56e36b3d8ce0d0dbaf2a4caa90d Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Sun, 3 Jan 2021 17:10:36 +0100 Subject: [PATCH] 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() {