def close_class(): try: data = request.get_json() user_id = int(data.get("user_id")) class_id = int(data.get("class_id")) user = User.query.filter_by(id=user_id).first() if not user.is_teacher: return responseError(Responses.AUTHORIZATION_ERROR) found_class = Class.query.get(class_id) db.session.delete(found_class) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseSuccess(Responses.PARAMETERS_ERROR)
def add_single_std(): try: data = request.get_json() user_id = int(data.get("user_id")) class_id = int(data.get("class_id")) # 用户账号 account = data.get("account") # 用户名 username = data.get("username") user = User.query.filter_by(id=user_id).first() if not user.is_teacher: return responseError(Responses.AUTHORIZATION_ERROR) classes = Class.query.get(class_id) u = User.query.filter_by(account=account, username=username) # 若要添加的学生不存在则添加进User表后再加入班级 if u is None: new_user = User(account=account, username=username) # 初始密码可设置 new_user.set_password("2020") db.session.add(new_user) # 先插入用户 db.session.commit() found_user = User.query.filter_by(account=account, username=username) # 在加入班级关联 classes.stds.append(found_user) db.session.commit() else: classes.stds.append(u) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def submit_work(): try: data = request.get_json() # 提交用户 user_id = int(data.get("user_id")) # 作业id assignment_id = int(data.get("assignment_id")) # 提交内容 content = data.get("content") # 如果要判断答案,则先找到Assignment对象,然后获取answer,与用户的提交内容选择题部分判断 # 然后把分数加到score # 查看是否已存在提交记录 fs = FinishStatus.query.filter_by(assignment_id=assignment_id, finish_user_id=user_id).first() if fs is not None: # 存在提交记录则更新内容和提交时间 fs.finish_content = content fs.finish_time = datetime.datetime.utcnow else: # 否则构造提交记录并插入 fs = FinishStatus(assignment_id=assignment_id, finish_user_id=user_id, finish_content=content) db.session.add(fs) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def create_sc(): try: data = request.get_json() title = data.get("title") # 接受视频文件 movie_file = request.files.get("file") # 生成随机文件名 filename = random_filename(movie_file.filename) # 生成文件保存路径 save_path = '/%s' % filename # 保存文件 movie_file.save(save_path) # 该视频属于的大章节 fc_id = data.get("fc_id") fc_id = int(fc_id.split("-")[1]) # 构造二级目录 new_sc = SecondCategory(name=title, parent_category_id=fc_id, movie=save_path) db.session.add(new_sc) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def del_fc(): try: data = request.get_json() # fc_id 是 1-XX 的形式 # 获得要删除的章节的id fc_id = data.get("fc_id") fc_id = int(fc_id.split("-")[1]) fc = FirstCategory.query.get(fc_id) # 如果该章节是第一章 if fc.is_first_category: # 若总共只有一章则什么也不做 if fc.next_category_id != 0: # 否则该章节的下一章设为链表头 next_fc = FirstCategory.query.get(fc.next_category_id) next_fc.is_first_category = True # 如果该章节不是第一章 else: # 找到该章节的上一章 pre_fc = FirstCategory.query.filter_by( next_category_id=fc.id).first() # 上一章的指针指向要删除的章节的下一章 pre_fc.next_category_id = fc.next_category_id # 删除章节 db.session.delete(fc) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def create_first_category(): try: data = request.get_json() class_id = int(data.get("class_id")) title = data.get("title") # 若before为"front",则在最前加入 # 若before不为空,则在指定位置后插入 # 若before为"last",则在最后加入 before = data.get("before") user_class = Class.query.get(class_id) # 要插入的章节的id new_fc_id = max([c.id for c in FirstCategory.query.all()]) + 1 # 在最前面加入 if before.strip() == "front": next_id = 0 # 判断该班级是否已存在章节 fc = FirstCategory.query.with_parent(user_class).filter_by( is_first_category=True).first() if fc is not None: # 存在已有章节,则插到最前 # 修改第一个章节 fc.is_first_category = False next_id = fc.id # 若不存在已有章节,则该章节的next章节id为0 # 构造章节加入,该章节为第一章,下一章为原先的第一章 new_fc = FirstCategory(name=title, belong_class_id=class_id, next_category_id=next_id, is_first_category=True) elif before.strip() == "last": # 找到最后一个章节 lc = FirstCategory.query.with_parent(user_class).filter_by( next_category_id=0).first() # 最后一个章节的下一章为该章节的id lc.next_category_id = new_fc_id # 构造章节加入,该章节为最后一章 / 第一章 new_fc = FirstCategory(name=title, belong_class_id=class_id, next_category_id=0) else: # 插入到指定章节后 # 找到指定章节 found_fc = FirstCategory.query.filter_by(belong_class_id=class_id, name=before).first() # 保存原来的下一个章节id next = found_fc.next_category_id found_fc.next_category_id = new_fc_id # 构造新章节,该章节为id=next的章节的后面一章 new_fc = FirstCategory(name=title, belong_class_id=class_id, next_category_id=next) # 插入数据 db.session.add(new_fc) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def del_talking(): try: data = request.get_json() talking_id = int(data.get("talking_id")) t = Talkings.query.get(talking_id) db.session.delete(t) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def del_work(): try: data = request.get_json() assignment_id = int(data.get("assignment_id")) assign = Assignment.query.get(assignment_id) os.remove(assign.content) db.session.delete(assign) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def rename_work(): try: data = request.get_json() name = data.get("name") assignment_id = int(data.get("assignment_id")) assign = Assignment.query.get(assignment_id) assign.name = name db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def rename_fc(): try: data = request.get_json() name = data.get("name") fc_id = data.get("fc_id") fc_id = int(fc_id.split("-")[1]) fc = FirstCategory.query.get(fc_id) fc.name = name db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def delete_comments(): try: data = request.get_json() user_id = int(data.get("user_id")) comment_id = int(data.get("comment_id")) comments = Comments.query.filter_by(from_user_id=user_id, id=comment_id).first() db.session.delete(comments) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def rename_sc(): try: data = request.get_json() # sc_id 是 2-XX 的形式 # 获得要删除的章节的id sc_id = data.get("sc_id") sc_id = int(sc_id.split("-")[1]) name = data.get("name") sc = SecondCategory.query.get(sc_id) sc.name = name db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def correct_work(): try: data = request.get_json() # 获得要批改的某一份提交内容对象的id finish_id = int(data.get("finish_id")) # 简答题的得分 score = int(data.get("score")) fs = FinishStatus.query.get(finish_id) fs.is_correct = 1 # 得分加到成绩上 fs.score += score db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def del_sc(): try: data = request.get_json() # sc_id 是 2-XX 的形式 # 获得要删除的章节的id sc_id = data.get("sc_id") sc_id = int(sc_id.split("-")[1]) sc = SecondCategory.query.get(sc_id) # 删除小章节对应的视频 os.remove(sc.movie) db.session.delete(sc) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def post_discussion(): try: data = request.get_json() user_id = int(data.get("user_id")) class_id = int(data.get("class_id")) title = data.get("title") content = data.get("content") New_talkings = Talkings(title=title, content=content, belong_class_id=class_id, publish_user_id=user_id) db.session.add(New_talkings) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) return responseError(Responses.PARAMETERS_ERROR)
def send_comment(): try: data = request.get_json() user_id = int(data.get("user_id")) talking_id = int(data.get("talking_id")) content = data.get("content") comment = Comments(content=content, from_user_id=user_id, talking_id=talking_id, replied_id=None, is_reply=False) db.session.add(comment) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def del_notice(): try: data = request.get_json() user_id = int(data.get("user_id")) class_id = int(data.get("class_id")) notice_id = int(data.get("notice_id")) user = User.query.get(user_id) notice = Notices.query.get(notice_id) # 1.不是老师则无法删除 # 2.是老师,但删除的不是该班级下的公告则失败 if not user.is_teacher or notice.belong_class_id != class_id: return responseError(Responses.AUTHORIZATION_ERROR) db.session.delete(notice) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def update_password(): try: user_data = request.get_json() user_id = int(user_data.get("user_id")) old_password = user_data.get("old_password") new_password1 = user_data.get("new_password1") new_password2 = user_data.get("new_password2") users = User.query.filter_by(id=user_id).first() # 密码不等 if not users.check_password(old_password): return responseError(Responses.INCORRECT_PASSWORD) # 两次密码不一致 elif new_password1 != new_password2: return responseError(Responses.NOT_SAME_PASSWORD) else: users.set_password(new_password1) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) return responseError(Responses.PARAMETERS_ERROR)
def post_notices(): try: data = request.get_json() title = data.get("title") content = data.get("content") class_id = int(data.get("class_id")) user_id = int(data.get("user_id")) Tech = User.query.filter_by(id=user_id).first() if not Tech.is_teacher: return responseError(Responses.AUTHORIZATION_ERROR) else: notice = Notices(title=title, content=content, belong_class_id=class_id) db.session.add(notice) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def del_selected_stds(): try: data = request.get_json() class_id = int(data.get("class_id")) # 要删除的学生id列表 selected_stds = data.get("selected_stds") user_id = int(data.get("user_id")) user_class = Class.query.get(class_id) # 判断要操作的用户是不是老师 if not User.query.filter_by(id=user_id).first().is_teacher: return responseError(Responses.AUTHORIZATION_ERROR) for std in selected_stds: student = User.query.get(int(std)) # 解除该学生和班级的关联 user_class.stds.remove(student) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def apply_class(): try: data = request.get_json() user_id = int(data.get("user_id")) class_name = data.get("class_name") user = User.query.filter_by(id=user_id).first() if not user.is_teacher: return responseError(Responses.AUTHORIZATION_ERROR) # 若为空,则默认值 class_info = data.get("class_info") if class_info.strip() == "": c = Class(class_name=class_name) else: c = Class(class_name=class_name, info=class_info) c.stds.append(user) db.session.add(c) db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)
def logout(): try: # 清空session session["token"] = None session["user_id"] = None data = request.get_json() user_id = int(data.get("user_id")) # 计算时间差 logout_date = datetime.datetime.now() login_date = session.get("login_date", datetime.datetime.now()) # 时间差 result = (logout_date - login_date) diff_hours = int(result.days * 24 + result.seconds / 3600 + 1) user = User.query.get(user_id) # 更新用户学习时长 user.total_study += diff_hours db.session.commit() return responseSuccess(Responses.OPERATION_SUCCESS) except Exception as e: print(e) db.session.rollback() return responseError(Responses.PARAMETERS_ERROR)