def publish_homework(request, post_data): """ 老师发布作业 :param request: :param post_data: """ account = post_data.get('account') course_id = post_data.get('course_id') tasks = post_data.get('task') role = get_user_role(account) if role != UserRole.TEACHER.value: raise ValidationError('only teacher can publish homework') course = COURSE.objects.filter(course_id=course_id).first() if not course: raise ValidationError('course id does not exist') homework = json.loads(course.homework) if not homework.get('task'): # 初始化作业表 homework['task'] = [] homework['status'] = CourseStatus.NOT_START.value homework['start_time'] = post_data.get('start_time', int(time.time())) homework['finish_time'] = post_data.get('finish_time', int(time.time())) homework['task'] += tasks course.homework = json.dumps(homework) course.save() return ObjectStatus.SUCCESS.value
def get_course_room(request, post_data): """ 获取房间链接 :param request: :param post_data: """ account = post_data.get('account') course_id = post_data.get('course_id') role = get_user_role(account) room_url = get_room_url(course_id, role) if role == UserRole.STUDENT.value: room_url.replace(RoomRole.HOST.value, RoomRole.GUEST.value) index = room_url[:-1].rfind('/') + 1 return room_url[:index] + account + '/'
def publish_course(request, post_data): """ 学生发布课程任务 :param request: :param post_data: """ account = post_data.get('account') role = get_user_role(account) data = post_data.get('course_info', {}) data['course_id'] = random_str(8) data['status'] = CourseStatus.NOT_START.value data["info"] = json.dumps(data.get('info', {})) data['s_account'] = account if role == UserRole.STUDENT.value else ObjectStatus.UNDEFINED.value data['t_account'] = account if role == UserRole.TEACHER.value else ObjectStatus.UNDEFINED.value return ObjectStatus.SUCCESS.value if COURSE.objects.create(**data) else ObjectStatus.FAILED.value
def check_course(request, post_data): """ 认领课程 :param request: :param post_data: """ account = post_data.get('account') course_id = post_data.get("course_id") role = get_user_role(account) query = Q(course_id=course_id) if role == UserRole.STUDENT.value: status = COURSE.objects.select_for_update().filter( query and Q(s_account=ObjectStatus.UNDEFINED.value)).update(s_account=account) else: status = COURSE.objects.select_for_update().filter( query and Q(t_account=ObjectStatus.UNDEFINED.value)).update(t_account=account) return ObjectStatus.SUCCESS.value if status else ObjectStatus.FAILED.value
def correct_homework(request, post_data): """ 老师批改作业 :param request: :param post_data: """ account = post_data.get('account') course_id = post_data.get('course_id') score = post_data.get('score') role = get_user_role(account) if role != UserRole.TEACHER.value: raise ValidationError('only teacher can correct homework') course = COURSE.objects.filter(course_id=course_id).first() if not course: raise ValidationError('course id does not exist') homework = json.loads(course.homework) if homework['finish_time'] >= int(time.time()): raise ValidationError('the homework is not over yet') homework['score'] = score course.homework = json.dumps(homework) course.save() return ObjectStatus.SUCCESS.value
def search_pending(request, post_data): """ 查找和自己有关的请求 :param request: :param post_data: :return: """ re = [] account = post_data.get("account") obj = PENDING.objects.filter(Q(another_id=account) | Q(applicant_id=account)) obj1 = obj.filter(another_id=account, another_op='').order_by("-_t") re.append("need my opinion") for ob in obj1: dic = {"course_id": ob.course_id, "info": ob.info, "applicant": ob.applicant_id} re.append(dic) re.append("my pending") obj2 = obj.filter(applicant_id=account).order_by("-_t") for ob in obj2: if get_user_role(ob.another_id) == UserRole.STUDENT.value: dic = {"course_id": ob.course_id, "student_op": ob.another_op, "admin_op": ob.admin_op} else: dic = {"course_id": ob.course_id, "teacher_op": ob.another_op, "admin_op": ob.admin_op} re.append(dic) return re
def get_homework(request, post_data): """ 老师或学生获取作业 :param request: :param post_data: """ account = post_data.get('account') course_id = post_data.get('course_id') role = get_user_role(account) course = COURSE.objects.filter(course_id=course_id).first() if not course: raise ValidationError('course id does not exist') homework = json.loads(course.homework) if role == UserRole.STUDENT.value and homework['start_time'] > int(time.time()): raise ValidationError('the homework has not started') if homework['status'] == CourseStatus.NOT_START.value: homework['status'] = CourseStatus.ONGOING.value if homework['finish_time'] <= int(time.time()): homework['status'] = CourseStatus.FINISH.value homework = json.dumps(homework) if course.homework != homework: course.homework = homework course.save() return homework