package nju.seec.helper.service.impl; import com.google.common.collect.Lists; import nju.seec.helper.api.dataanalysis.dto.EventDTO; import nju.seec.helper.api.dataanalysis.EventApi; import nju.seec.helper.dao.*; import nju.seec.helper.entity.*; import nju.seec.helper.enums.UserRole; import nju.seec.helper.service.EventService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; /** * @author cst */ @Service public class EventServiceImpl implements EventService { private final CourseDAO courseDAO; private final ChooseDAO chooseDAO; private final UserDAO userDAO; private final CommentDAO commentDAO; private final QuizStudentAnswerDAO quizStudentAnswerDAO; private final EventApi eventApi; public EventServiceImpl(CourseDAO courseDAO, ChooseDAO chooseDAO, UserDAO userDAO, CommentDAO commentDAO, QuizStudentAnswerDAO quizStudentAnswerDAO, EventApi eventApi) { this.courseDAO = courseDAO; this.chooseDAO = chooseDAO; this.userDAO = userDAO; this.commentDAO = commentDAO; this.quizStudentAnswerDAO = quizStudentAnswerDAO; this.eventApi = eventApi; } @Transactional(readOnly = true) @Override public List getAllEvents() { List eventDTOS = Lists.newArrayList(); List courses = courseDAO.findAll(); courses.forEach(course -> { List chooses = chooseDAO.findByCourseId(course.getId()); chooses.forEach( choose -> { User student = userDAO.findUserById(choose.getStudentId()); if (student.getPid() != null) { eventDTOS.add(eventApi.createParticipateClassEventDTO(String.valueOf(Objects.requireNonNull(student).getPid()), LocalDateTime.now(), course)); } } ); }); List comments = commentDAO.findAll(); comments.forEach(comment -> { User user = comment.getUser(); if (user.getPid() != null && user.getRole() == UserRole.STUDENT) { eventDTOS.add(eventApi.createInitPostEventDTO(String.valueOf(user.getPid()), comment.getCreateAt(), comment.getTitle())); } }); List quizStudentAnswers = quizStudentAnswerDAO.findAll(); quizStudentAnswers.forEach(quizStudentAnswer -> { User student = quizStudentAnswer.getStudent(); if (student.getPid() != null) { Quiz quiz = quizStudentAnswer.getQuiz(); eventDTOS.add(eventApi.createCompleteQuizEventDTO(String.valueOf(student.getPid()), quizStudentAnswer.getSubmitAt(), quiz)); } }); return eventDTOS; } }