package com.nju.edu.eval.service; import com.nju.edu.eval.data.entity.Exam; import com.nju.edu.eval.model.vo.exam.*; import com.nju.edu.eval.model.vo.question.QuestionAndScoreVO; import java.util.Date; import java.util.List; import java.util.Optional; /** * @author mars */ public interface ExamService { /** * 创建考试 * @param examVO exam的vo * @param creatorId 创建考试者id * @return 邀请码,题目等内容 */ NewExamVO createExam(CreateExamVO examVO, Integer creatorId); /** * 获得所有考试 * @param userId * @param pageSize * @param pageNum * @return 考试列表 */ ExamListAndNumVO getExamList(int userId, int pageSize, int pageNum); /** * 获得某个时间段内的考试 * @param startTime 开始时间 * @param endTime 结束时间 * @return 考试信息列表 * @see ExamInfoVO */ List getExamListOfTimeRange(Date startTime, Date endTime); /** * 根据id获得考试 * @param id 考试id * @return 该id对应的考试 */ ExamVO getExamById(Integer id); /** * 获得id对应考试的题目和分值 * @param id 考试Id * @return 题目id 和 分值映射的list */ QuestionAndScoreVO getExamQuestionAndScoreById(Integer id); /** * 获得某次考试的代码题列表 * @param id 考试id * @return 代码题id列表 */ List getCodeQuestionIdsByExamId(Integer id); /** * 为考试更新题目 * @param examId 考试Id * @param questionScoreMapVO 题目和分值的映射 */ void updateQuestionsOfExam(Integer examId, QuestionScoreMapVO questionScoreMapVO); /** * 延长考试时间 * @param examId 考试id * @param endTime 延长后的时间 * @return exam的optional值 */ Optional extendExamTime(Integer examId, Date endTime); /** * 获得某学生参加的考试相关信息 * @param id 学生id * @param pageSize * @param pageNum * @param state * @return */ ExamListAndNumVO getExamsByCurrentStudent(Integer id, int pageSize, int pageNum, int state); /** * 获得由老师或者HR创建的考试 * @param id 老师/HR id * @param pageSize * @param pageNum * @param state * @return */ ExamListAndNumVO getExamsCreatedByCurrentTeacherOrHR(Integer id, int pageSize, int pageNum, int state); /** * 学生通过邀请码参加考试 * @param userId 学生id * @param examId 考试id * @param inviteCodeInput 输入的邀请码 * @return 是否成功加入考试 */ boolean takeExam(Integer userId, Integer examId, String inviteCodeInput); /** * 给某次考试设置题目 * @param examId 考试Id * @param sampleExamPaperId 样卷Id */ void setExamQuestionsBySampleExamPaper(int examId, int sampleExamPaperId); }