1 | package project.educatum.service.impl;
|
---|
2 |
|
---|
3 | import org.springframework.security.crypto.password.PasswordEncoder;
|
---|
4 | import org.springframework.stereotype.Service;
|
---|
5 | import project.educatum.model.*;
|
---|
6 | import project.educatum.model.exceptions.*;
|
---|
7 | import project.educatum.model.primarykeys.InterestID;
|
---|
8 | import project.educatum.model.primarykeys.ListeningID;
|
---|
9 | import project.educatum.model.relations.TeacherStudentRelation;
|
---|
10 | import project.educatum.repository.*;
|
---|
11 | import project.educatum.service.StudentService;
|
---|
12 |
|
---|
13 | import java.time.LocalDate;
|
---|
14 | import java.util.ArrayList;
|
---|
15 | import java.util.HashSet;
|
---|
16 | import java.util.List;
|
---|
17 | import java.util.Set;
|
---|
18 | import java.util.stream.Collectors;
|
---|
19 |
|
---|
20 | @Service
|
---|
21 | public class StudentServiceImpl implements StudentService {
|
---|
22 |
|
---|
23 | private final StudentRepository studentsRepository;
|
---|
24 | private final PasswordEncoder passwordEncoder;
|
---|
25 | private final AdminRepository adminRepository;
|
---|
26 | private final TeacherRepository teachersRepository;
|
---|
27 | private final InterestRepository interestRepository;
|
---|
28 | private static Integer counter = 0;
|
---|
29 | private final ListeningRepository listeningRepository;
|
---|
30 | private final PaymentRepository paymentRepository;
|
---|
31 | private final TeacherStudentRepository teacherStudentRepository;
|
---|
32 |
|
---|
33 | public StudentServiceImpl(StudentRepository studentsRepository, PasswordEncoder passwordEncoder, AdminRepository adminRepository, TeacherRepository teachersRepository, InterestRepository interestRepository, ListeningRepository listeningRepository, PaymentRepository paymentRepository, TeacherStudentRepository teacherStudentRepository) {
|
---|
34 | this.studentsRepository = studentsRepository;
|
---|
35 | this.passwordEncoder = passwordEncoder;
|
---|
36 | this.adminRepository = adminRepository;
|
---|
37 | this.teachersRepository = teachersRepository;
|
---|
38 | this.interestRepository = interestRepository;
|
---|
39 | this.listeningRepository = listeningRepository;
|
---|
40 | this.paymentRepository = paymentRepository;
|
---|
41 | this.teacherStudentRepository = teacherStudentRepository;
|
---|
42 | }
|
---|
43 |
|
---|
44 | @Override
|
---|
45 | public void register(String name, String surname, String email, String password, String repeatPassword, String telNum, String desc) {
|
---|
46 | if (email == null || email.isEmpty() || password == null || password.isEmpty())
|
---|
47 | throw new InvalidArgumentsException();
|
---|
48 | if (!password.equals(repeatPassword))
|
---|
49 | throw new PasswordsDoNotMatchException();
|
---|
50 |
|
---|
51 | for (Teacher n : teachersRepository.findAll())
|
---|
52 | if (n.getEmail().equals(email)) throw new UsernameAlreadyExistsException("Username already exists!");
|
---|
53 |
|
---|
54 | for (Student u : studentsRepository.findAll())
|
---|
55 | if (u.getEmail().equals(email)) throw new UsernameAlreadyExistsException("Username already exists!");
|
---|
56 |
|
---|
57 | for (Admin a : adminRepository.findAll())
|
---|
58 | if (a.getEmail().equals(email)) throw new UsernameAlreadyExistsException("Username already exists!");
|
---|
59 |
|
---|
60 | Student user = new Student(desc, name, surname, email, passwordEncoder.encode(password), telNum);
|
---|
61 | studentsRepository.save(user);
|
---|
62 | }
|
---|
63 |
|
---|
64 | @Override
|
---|
65 | public List<Student> findAll() {
|
---|
66 | return studentsRepository.findAll();
|
---|
67 | }
|
---|
68 |
|
---|
69 | @Override
|
---|
70 | public Student findByEmail(String email) {
|
---|
71 | return studentsRepository.findByEmail(email);
|
---|
72 | }
|
---|
73 |
|
---|
74 | @Override
|
---|
75 | public List<Student> findAllByNameLike(String name, List<Student> students) {
|
---|
76 | List<Student> searchedStudents = studentsRepository.findAllByNameContainingIgnoreCase(name);
|
---|
77 | Set<Student> result = new HashSet<>();
|
---|
78 | for (Student u : searchedStudents) {
|
---|
79 | for (Student u2 : students)
|
---|
80 | if (u.getId().equals(u2.getId())) result.add(u2);
|
---|
81 | }
|
---|
82 | return new ArrayList<>(result);
|
---|
83 | }
|
---|
84 |
|
---|
85 | @Override
|
---|
86 | public void delete(Integer id) {
|
---|
87 | Student u = studentsRepository.findById(id).orElseThrow(StudentNotFoundException::new);
|
---|
88 | studentsRepository.delete(u);
|
---|
89 | }
|
---|
90 |
|
---|
91 | @Override
|
---|
92 | public Student findById(Integer id) {
|
---|
93 | return studentsRepository.findById(id).orElseThrow(StudentNotFoundException::new);
|
---|
94 | }
|
---|
95 |
|
---|
96 | @Override
|
---|
97 | public List<Student> findAllByName(String name) {
|
---|
98 | return studentsRepository.findAllByNameContainingIgnoreCase(name);
|
---|
99 | }
|
---|
100 |
|
---|
101 | @Override
|
---|
102 | public void interestedIn(Integer subjectId, Integer studentId) {
|
---|
103 | InterestID zId = new InterestID(subjectId, studentId);
|
---|
104 | Interest z = new Interest(zId, LocalDate.now());
|
---|
105 | interestRepository.save(z);
|
---|
106 | }
|
---|
107 |
|
---|
108 |
|
---|
109 | @Override
|
---|
110 | public void save(Student student){
|
---|
111 | studentsRepository.save(student);
|
---|
112 | }
|
---|
113 |
|
---|
114 | @Override
|
---|
115 | public void addListening(Integer studentID, Integer classID, Integer teacherID) {
|
---|
116 | Teacher t = teachersRepository.findById(teacherID).orElseThrow(TeacherNotFoundException::new);
|
---|
117 | Payment p = new Payment(0, t);
|
---|
118 | paymentRepository.save(p);
|
---|
119 | Student s = studentsRepository.findById(studentID).orElseThrow(StudentNotFoundException::new);
|
---|
120 | ListeningID listeningID = new ListeningID(classID, counter++);
|
---|
121 | Listening l = new Listening(listeningID, p, s, false);
|
---|
122 | listeningRepository.save(l);
|
---|
123 | }
|
---|
124 |
|
---|
125 |
|
---|
126 | @Override
|
---|
127 | public boolean rateTeacher(Teacher teacher, Student student, Float rating) {
|
---|
128 | List<TeacherStudentRelation> list = teacherStudentRepository.findAll().stream()
|
---|
129 | .filter(t -> t.getId().getStudentID().equals(student.getId()) && t.getId().getTeacherID().equals(teacher.getId()))
|
---|
130 | .collect(Collectors.toList());
|
---|
131 | if (list.size() > 0) {
|
---|
132 | TeacherStudentRelation teacherStudent = list.get(0);
|
---|
133 | teacherStudent.setRating(rating);
|
---|
134 | teacher.setRating(rating);
|
---|
135 | teacherStudent.setHasRated(true);
|
---|
136 | teacherStudentRepository.save(teacherStudent);
|
---|
137 | return true;
|
---|
138 | }
|
---|
139 | return false;
|
---|
140 |
|
---|
141 | }
|
---|
142 |
|
---|
143 | @Override
|
---|
144 | public Student edit(Integer id, String ime, String prezime, String opis, String email, String telefonskiBroj) {
|
---|
145 | Student student = this.findById(id);
|
---|
146 | student.setName(ime);
|
---|
147 | student.setSurname(prezime);
|
---|
148 | student.setDescription(opis);
|
---|
149 | student.setEmail(email);
|
---|
150 | student.setTelephoneNumber(telefonskiBroj);
|
---|
151 | return this.studentsRepository.save(student);
|
---|
152 | }
|
---|
153 | }
|
---|