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.Class;
|
---|
7 | import project.educatum.model.exceptions.*;
|
---|
8 | import project.educatum.model.primarykeys.TeacherStudentRelationID;
|
---|
9 | import project.educatum.model.primarykeys.TeacherSubjectRelationID;
|
---|
10 | import project.educatum.model.relations.TeacherStudentRelation;
|
---|
11 | import project.educatum.model.relations.TeacherSubjectRelation;
|
---|
12 | import project.educatum.repository.*;
|
---|
13 | import project.educatum.service.TeacherService;
|
---|
14 |
|
---|
15 | import java.util.ArrayList;
|
---|
16 | import java.util.Comparator;
|
---|
17 | import java.util.List;
|
---|
18 | import java.util.stream.Collectors;
|
---|
19 |
|
---|
20 | @Service
|
---|
21 | public class TeacherServiceImpl implements TeacherService {
|
---|
22 |
|
---|
23 | private final TeacherRepository teachersRepository;
|
---|
24 | private final PasswordEncoder passwordEncoder;
|
---|
25 | private final AdminRepository adminRepository;
|
---|
26 | private final StudentRepository studentsRepository;
|
---|
27 | private final TeacherStudentRepository teacherStudentRepository;
|
---|
28 | private final TeacherSubjectRepository teacherSubjectRepository;
|
---|
29 | private final SubjectRepository subjectRepository;
|
---|
30 | private final PaymentRepository paymentRepository;
|
---|
31 | private final ClassRepository classesRepository;
|
---|
32 | private final ListeningRepository listeningRepository;
|
---|
33 |
|
---|
34 |
|
---|
35 | public TeacherServiceImpl(TeacherRepository teachersRepository, PasswordEncoder passwordEncoder, AdminRepository adminRepository, StudentRepository studentsRepository, TeacherStudentRepository teacherStudentRepository, TeacherSubjectRepository teacherSubjectRepository, SubjectRepository subjectRepository, PaymentRepository paymentRepository, ClassRepository classesRepository, ListeningRepository listeningRepository) {
|
---|
36 | this.teachersRepository = teachersRepository;
|
---|
37 | this.passwordEncoder = passwordEncoder;
|
---|
38 | this.adminRepository = adminRepository;
|
---|
39 | this.studentsRepository = studentsRepository;
|
---|
40 | this.teacherStudentRepository = teacherStudentRepository;
|
---|
41 | this.teacherSubjectRepository = teacherSubjectRepository;
|
---|
42 | this.subjectRepository = subjectRepository;
|
---|
43 | this.paymentRepository = paymentRepository;
|
---|
44 | this.classesRepository = classesRepository;
|
---|
45 | this.listeningRepository = listeningRepository;
|
---|
46 | }
|
---|
47 |
|
---|
48 | @Override
|
---|
49 | public List<Teacher> findAll() {
|
---|
50 | return teachersRepository.findAll()
|
---|
51 | .stream()
|
---|
52 | .sorted(Comparator.comparing(Teacher::getEmail))
|
---|
53 | .collect(Collectors.toList());
|
---|
54 | }
|
---|
55 |
|
---|
56 | @Override
|
---|
57 | public void register(String ime, String prezime, String email, String password, String repeatPassword, String telBroj, String opis) {
|
---|
58 | if (email == null || email.isEmpty() || password == null || password.isEmpty())
|
---|
59 | throw new InvalidArgumentsException();
|
---|
60 |
|
---|
61 | if (!password.equals(repeatPassword)) throw new PasswordsDoNotMatchException();
|
---|
62 |
|
---|
63 | for (Teacher n : teachersRepository.findAll()) {
|
---|
64 | if (n.getEmail().equals(email)) {
|
---|
65 | throw new UsernameAlreadyExistsException("Username already exists!");
|
---|
66 | }
|
---|
67 | }
|
---|
68 | for (Student u : studentsRepository.findAll()) {
|
---|
69 | if (u.getEmail().equals(email)) {
|
---|
70 | throw new UsernameAlreadyExistsException("Username already exists!");
|
---|
71 | }
|
---|
72 | }
|
---|
73 | for (Admin a : adminRepository.findAll()) {
|
---|
74 | if (a.getEmail().equals(email)) {
|
---|
75 | throw new UsernameAlreadyExistsException("Username already exists!");
|
---|
76 | }
|
---|
77 | }
|
---|
78 |
|
---|
79 | Teacher user = new Teacher(ime, prezime, opis, email, passwordEncoder.encode(password), telBroj);
|
---|
80 | user.setIdAdmin(adminRepository.findAll().get(0));
|
---|
81 | teachersRepository.save(user);
|
---|
82 | }
|
---|
83 |
|
---|
84 | @Override
|
---|
85 | public Teacher findByEmail(String email) {
|
---|
86 | return teachersRepository.findByEmail(email);
|
---|
87 | }
|
---|
88 |
|
---|
89 | @Override
|
---|
90 | public List<Class> getClassesByTeacher(Integer id) {
|
---|
91 | return classesRepository.findAllByIdTeacher(id)
|
---|
92 | .stream()
|
---|
93 | .sorted(Comparator.comparing(Class::beginningDate))
|
---|
94 | .collect(Collectors.toList());
|
---|
95 | }
|
---|
96 |
|
---|
97 | @Override
|
---|
98 | public void save(Teacher teacher){
|
---|
99 | this.teachersRepository.save(teacher);
|
---|
100 | }
|
---|
101 |
|
---|
102 | @Override
|
---|
103 | public List<Teacher> findAllByNameLike(String name) {
|
---|
104 | return teachersRepository.findAllByNameContainingIgnoreCase(name);
|
---|
105 | }
|
---|
106 |
|
---|
107 | @Override
|
---|
108 | public void delete(Integer id) {
|
---|
109 | Teacher n = teachersRepository.findById(id).orElseThrow(TeacherNotFoundException::new);
|
---|
110 | teachersRepository.delete(n);
|
---|
111 | }
|
---|
112 |
|
---|
113 | @Override
|
---|
114 | public List<Student> getStudentsByTeacher(Integer id) {
|
---|
115 | List<Student> students;
|
---|
116 | List<TeacherStudentRelation> teacherStudentRelationList = teacherStudentRepository.findAll();
|
---|
117 | students = teacherStudentRelationList
|
---|
118 | .stream()
|
---|
119 | .map(TeacherStudentRelation::getId)
|
---|
120 | .filter(pId -> pId.getTeacherID().equals(id))
|
---|
121 | .map(TeacherStudentRelationID::getStudentID)
|
---|
122 | .map(studentID -> studentsRepository.findById(studentID).orElseThrow(StudentNotFoundException::new))
|
---|
123 | .collect(Collectors.toList());
|
---|
124 | return students;
|
---|
125 | }
|
---|
126 |
|
---|
127 | @Override
|
---|
128 | public List<Teacher> getAllTeachersBySubject(Integer id) {
|
---|
129 | List<Teacher> teachers;
|
---|
130 | List<TeacherSubjectRelation> teacherSubjectRelationList = teacherSubjectRepository.findAll();
|
---|
131 | teachers = teacherSubjectRelationList
|
---|
132 | .stream()
|
---|
133 | .map(TeacherSubjectRelation::getId)
|
---|
134 | .filter(ppId -> ppId.getSubjectID().equals(id))
|
---|
135 | .map(TeacherSubjectRelationID::getTeacherID)
|
---|
136 | .map(idTeacher -> teachersRepository.findById(idTeacher).orElseThrow(TeacherNotFoundException::new))
|
---|
137 | .collect(Collectors.toList());
|
---|
138 | return teachers;
|
---|
139 | }
|
---|
140 |
|
---|
141 | @Override
|
---|
142 | public Teacher edit(Integer id, String ime, String prezime,String description, String email, String telephoneNumber) {
|
---|
143 | Teacher teacher = this.findById(id);
|
---|
144 | teacher.setName(ime);
|
---|
145 | teacher.setSurname(prezime);
|
---|
146 | teacher.setDescription(description);
|
---|
147 | teacher.setEmail(email);
|
---|
148 | teacher.setTelephoneNumber(telephoneNumber);
|
---|
149 | return this.teachersRepository.save(teacher);
|
---|
150 | }
|
---|
151 |
|
---|
152 | @Override
|
---|
153 | public void updateEnabled(Integer teacherID) {
|
---|
154 | teachersRepository.updateEnabled(teacherID);
|
---|
155 | }
|
---|
156 |
|
---|
157 | @Override
|
---|
158 | public List<Subject> getSubjectsByTeacher(Integer id) {
|
---|
159 | List<Subject> subjects;
|
---|
160 | List<TeacherSubjectRelation> teacherSubjectRelationList = teacherSubjectRepository.findAll();
|
---|
161 | subjects = teacherSubjectRelationList
|
---|
162 | .stream()
|
---|
163 | .map(TeacherSubjectRelation::getId)
|
---|
164 | .filter(ppId -> ppId.getTeacherID().equals(id))
|
---|
165 | .map(TeacherSubjectRelationID::getSubjectID)
|
---|
166 | .map(subjectID -> subjectRepository.findById(subjectID).orElseThrow(SubjectNotFoundException::new))
|
---|
167 | .collect(Collectors.toList());
|
---|
168 | return subjects;
|
---|
169 | }
|
---|
170 |
|
---|
171 | @Override
|
---|
172 | public Teacher findById(Integer id) {
|
---|
173 | return teachersRepository.findById(id).orElseThrow(TeacherNotFoundException::new);
|
---|
174 | }
|
---|
175 |
|
---|
176 | @Override
|
---|
177 | public void addSubject(Integer teacherId, Integer subjectId, String desc) {
|
---|
178 | TeacherSubjectRelationID ppId = new TeacherSubjectRelationID(teacherId, subjectId);
|
---|
179 | teacherSubjectRepository.save(new TeacherSubjectRelation(ppId, desc));
|
---|
180 | }
|
---|
181 |
|
---|
182 |
|
---|
183 | @Override
|
---|
184 | public void addStudent(Integer teacherID, Integer studentID, Integer priceByClass, Integer numScheduledClasses) {
|
---|
185 | Teacher teacher = teachersRepository.findById(teacherID).orElseThrow(TeacherNotFoundException::new);
|
---|
186 | Student student = studentsRepository.findById(studentID).orElseThrow(StudentNotFoundException::new);
|
---|
187 | TeacherStudentRelationID pId = new TeacherStudentRelationID(teacher.getId(), student.getId());
|
---|
188 | teacherStudentRepository.save(new TeacherStudentRelation(pId, priceByClass, numScheduledClasses));
|
---|
189 | }
|
---|
190 |
|
---|
191 |
|
---|
192 | @Override
|
---|
193 | public double getRatingForTeacher(Long teacherID) {
|
---|
194 | List<TeacherStudentRelation> teacherStudentRelationList = teacherStudentRepository
|
---|
195 | .findAll()
|
---|
196 | .stream()
|
---|
197 | .filter(t -> t.getId().getTeacherID().equals(teacherID.intValue()))
|
---|
198 | .filter(TeacherStudentRelation::hasRated)
|
---|
199 | .collect(Collectors.toList());
|
---|
200 | float rating = 0;
|
---|
201 | for (TeacherStudentRelation t : teacherStudentRelationList) {
|
---|
202 | rating += t.getRating();
|
---|
203 | }
|
---|
204 | return rating / (teacherStudentRelationList.size() * 1.0);
|
---|
205 | }
|
---|
206 | } |
---|