//通过用户获取grade或者job_title private static bool getGradeOrTitle(NBackendContext ctx, User user, ref int grade, ref string job_title) { //根据用户的类型去分发逻辑 if (user.role.Equals(STUDENT)) { var q = ctx.Students.Where(_stu => _stu.StudentId == user.Id); if (!q.Any()) { return(false); } var stu = q.Single(); grade = stu.grade; } else { var q = ctx.Teachers.Where(_tea => _tea.TeacherId == user.Id); if (!q.Any()) { return(false); } var tea = q.Single(); job_title = tea.job_title; } return(true); }
private static object ListToObj(NBackendContext ctx, List <User> _users) { var users = new List <object>(); foreach (var user in _users) { int grade = -1; string job_title = ""; if (!getGradeOrTitle(ctx, user, ref grade, ref job_title)) { return(JsonConverter.Error(400, "用户信息有误")); } users.Add(new { role = user.role, user_id = user.Id, user_name = user.user_name, department = user.department, phone_number = user.phone_number, email = user.mail, avatar = user.avatar, grade = grade, job_title = job_title, }); } var data = new { users = users, }; return(JsonConverter.BuildResult(data, 200, "ok")); }
public static object deleteFollow(string token, object json) { try { Dictionary <string, string> body = JsonConverter.Decode(json); NBackendContext ctx = new NBackendContext(); int following_id = int.Parse(body["user_id"]); int user_id = Helper.JwtManager.DecodeToken(token); User user = getUserById(ctx, user_id); User following = getUserById(ctx, following_id); if (!containsUser(user.following.ToList(), following)) { return(Helper.JsonConverter.Error(400, "你并没有follow")); } if (!containsUser(following.followers.ToList(), user)) { return(Helper.JsonConverter.Error(400, "follow信息有误"));//表不一致 } user.following.Remove(following); following.followers.Remove(user); ctx.SaveChanges(); return(Helper.JsonConverter.BuildResult(null)); } catch (Exception e) { return(Helper.JsonConverter.Error(400, "取消关注失败")); } }
//获取班级的所有广播 private static List <object> getBroadcastsOfClass(string token, object json) { try { int user_id = JwtManager.DecodeToken(token); //做验证 var body = JsonConverter.Decode(json); int sec_id = int.Parse(body["sec_id"]); int course_id = int.Parse(body["course_id"]); int year = int.Parse(body["year"]); string semester = body["semester"]; NBackendContext ctx = new NBackendContext(); var class_bros = _getBroadcastsOfClass(ctx, sec_id, course_id, year, semester); if (class_bros == null) { return(new List <object>()); } return(ListToObj(class_bros)); } catch (Exception e) { return(null); } }
//获取某个班级的开课时间段 public static object get_time_info(int sec_id, int course_id, string semester, int year) { using (var context = new NBackendContext()) { var time_info = (from section in context.Sections join multiSectionTime in context.MultiSectionTimes on new { section.SecId, section.courseId, section.semester, section.year } equals new { multiSectionTime.SecId, multiSectionTime.courseId, multiSectionTime.semester, multiSectionTime.year } join sectionTime in context.SectionTimes on multiSectionTime.section_timeId equals sectionTime.SectionTimeId where section.SecId == sec_id && section.courseId == course_id && section.semester == semester && section.year == year select new { year = section.year, semester = section.semester, course_id = section.courseId, sec_id = section.SecId, day = multiSectionTime.day, single_or_double = multiSectionTime.single_or_double, start_section = sectionTime.start_section, length = sectionTime.length }); var list = new List <object>(); foreach (var each_time_info in time_info) { list.Add(new { day = each_time_info.day, single_or_double = each_time_info.single_or_double, start_section = each_time_info.start_section, length = each_time_info.length }); } return(list); } }
//删除广播 public static object deleteBroadcast(string token, object json) { try { var body = JsonConverter.Decode(json); int broadcast_id = int.Parse(body["broadcast_id"]); int user_id = JwtManager.DecodeToken(token); NBackendContext ctx = new NBackendContext(); var q = ctx.TeacherBroadcasts.Where(tb => tb.broadcastId == broadcast_id && tb.teacherId == user_id); var q1 = ctx.Broadcasts.Where(bro => bro.BroadcastId == broadcast_id); if (!q.Any()) { return(JsonConverter.Error(400, "该广播不存在或者你没有创建过该广播")); } var _tb = q.Single(); var broadcast = q1.Single(); ctx.TeacherBroadcasts.Remove(_tb); ctx.Broadcasts.Remove(broadcast); ctx.SaveChanges(); return(JsonConverter.BuildResult(null)); } catch (Exception e) { return(JsonConverter.Error(400, e.Message)); } }
public static void safeSaveChanges(NBackendContext ctx) { try { ctx.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } catch (Exception e) { throw; } }
public static object getTwis(string token) { NBackendContext ctx = new NBackendContext(); int user_id = JwtManager.DecodeToken(token); return(ListToObj(ctx, getAllTwis(ctx, user_id))); }
//教师允许学生加入班级 public static object PermitApplication(object json) { var body = Helper.JsonConverter.Decode(json); var sec_id = int.Parse(body["sec_id"]); var course_id = int.Parse(body["course_id"]); var semester = body["semester"]; var year = int.Parse(body["year"]); var student_id = int.Parse(body["user_id"]); var status = int.Parse(body["status"]); using (var context = new NBackendContext()) { var a_student = context.Takes.Where(a => a.StudentId == student_id && a.secId == sec_id && a.courseId == course_id && a.year == year && a.semester == semester); if (!a_student.Any()) { return(Helper.JsonConverter.Error(401, "学生在出席记录中不存在")); } else { if (status == 1) { a_student.Single().validate_status = true; } else { context.Takes.Remove(a_student.Single()); } context.SaveChanges(); return(Helper.JsonConverter.BuildResult(null)); } } }
//获取开设的所有课程id public static object GetCourses() { try { using (var context = new NBackendContext()) { var some_courses = context.Courses; var list = new List <object>(); foreach (var each_course in some_courses) { list.Add(new { course_id = each_course.CourseId, course_name = each_course.course_name }); } var data = new { courses = list }; return(Helper.JsonConverter.BuildResult(data)); } } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "数据库中可能存在不一致现象,请检查")); } }
//创建一个队伍 public static object PostTeam(object json, string token) { try { var body = Helper.JsonConverter.Decode(json); var sec_id = int.Parse(body["sec_id"]); var course_id = int.Parse(body["course_id"]); var semester = body["semester"]; var year = int.Parse(body["year"]); var team_name = body["team_name"]; var user_id = Helper.JwtManager.DecodeToken(token); using (var context = new NBackendContext()) { var any_section = context.Sections.Where(a => a.SecId == sec_id && a.courseId == course_id && a.semester == semester && a.year == year); if (!any_section.Any()) { return(Helper.JsonConverter.Error(400, "不存在这个班")); } var new_team = new Team { secId = sec_id, courseId = course_id, semester = semester, year = year, team_name = team_name, }; context.Teams.Add(new_team); try { context.SaveChanges(); } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "向team表中加入数据时发生错误")); } context.TeamStudents.Add(new TeamStudent { teamId = new_team.TeamId, studentId = user_id }); context.SaveChanges(); var data = new { team_id = new_team.TeamId }; return(Helper.JsonConverter.BuildResult(data)); } } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "数据库中可能存在不一致现象,请检查")); } }
public static object getUsersByNameOrId(object json) { var body = JsonConverter.Decode(json); var list = new List <object>(); NBackendContext ctx = new NBackendContext(); if (body.ContainsKey("user_id")) { int id = int.Parse(body["user_id"]); var user = getUserById(ctx, id); if (user == null) { return(JsonConverter.Error(400, "火星用户!")); } int grade = -1; string job_title = ""; if (!getGradeOrTitle(ctx, user, ref grade, ref job_title)) { return(JsonConverter.Error(400, "用户信息有误")); } var data = new { role = user.role, user_id = user.Id, user_name = user.user_name, department = user.department, phone_number = user.phone_number, email = user.mail, avatar = user.avatar, job_title = job_title, grade = grade, following = user.following.Count(), follower = user.followers.Count(), }; return(JsonConverter.BuildResult(data, 200, "ok")); } else if (body.ContainsKey("user_name") && !body["user_name"].Equals("")) { string name = body["user_name"]; var q = ctx.Users.Where(_user => _user.user_name == name); var _users = q.ToList(); return(ListToObj(ctx, _users)); } else { //无字段,暂时返回所有用户? var data = ListToObj(ctx.Users.ToList()); } return(list); }
//教师查看待审核的学生 public static object GetWaitingStudents(object json) { try { var body = Helper.JsonConverter.Decode(json); var sec_id = int.Parse(body["sec_id"]); var course_id = int.Parse(body["course_id"]); var semester = body["semester"]; var year = int.Parse(body["year"]); using (var context = new NBackendContext()) { var waiting_students = context.Takes.Where(a => a.secId == sec_id && a.courseId == course_id && a.semester == semester && a.year == year && a.validate_status == false); var students_info = (from student in waiting_students join info in context.Users on student.StudentId equals info.Id select new { student_id = student.StudentId, user_name = info.user_name, avatar = info.avatar }).ToArray(); var data = new { students_info }; return(Helper.JsonConverter.BuildResult(data)); } } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "数据库中可能存在不一致现象,请检查")); } }
private static List <Broadcast> _getGlobalBroadcasts(NBackendContext ctx) { var q = ctx.Broadcasts.Where(bro => bro.scope == SCOPE_GOLBAL); var bros = q.ToList(); return(bros); }
public static object DeleteCourseware(object json) { try { var body = Helper.JsonConverter.Decode(json); var courseware_id = int.Parse(body["courseware_id"]); using (var context = new NBackendContext()) { var any_courseware = context.CourseWares.Where(a => a.CourseWareId == courseware_id); if (!any_courseware.Any()) { return(Helper.JsonConverter.Error(400, "这个课件有问题")); } var the_courseware = any_courseware.Single(); context.CourseWares.Remove(the_courseware); context.SaveChanges(); return(Helper.JsonConverter.BuildResult(null)); } } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "数据库中可能存在不一致现象,请检查")); } }
//获取某个课程的所有题目 public static object getQuestionsOfCourse(string token, object json) { try { int user_id = JwtManager.DecodeToken(token); var body = Helper.JsonConverter.Decode(json); int course_id = int.Parse(body["course_id"]); NBackendContext ctx = new NBackendContext(); var q = ctx.Questions.Where(qu => qu.courseId == course_id); List <Question> questions = q.ToList(); List <object> data = new List <object>(); foreach (Question qu in questions) { data.Add(new { question_id = qu.QuestionId, course_id = qu.courseId, chapter = qu.chapter, content = qu.content, answer = qu.answer, options = qu.options, }); } return(Helper.JsonConverter.BuildResult(data)); } catch (Exception e) { return(Helper.JsonConverter.Error(400, "信息填写有误?")); } }
public static object GetAttendanceSummary(object json, string token) { try { var body = Helper.JsonConverter.Decode(json); var semester = body["semester"]; var year = int.Parse(body["year"]); var user_id = Helper.JwtManager.DecodeToken(token); using (var context = new NBackendContext()) { var total_records = context.Attentions.Where(a => a.StudentId == user_id && a.semester == semester && a.year == year); var total_absent = total_records.Where(a => a.status == 2 || a.status == 3); var data = new { total_attendance = total_records.Count(), total_absent = total_absent.Count() }; return(Helper.JsonConverter.BuildResult(data)); } } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "数据库中可能存在不一致现象,请检查")); } }
//根据学生id获取其队伍列表 public static object GetItsTeams(object json) { try { var body = Helper.JsonConverter.Decode(json); var student_id = int.Parse(body["user_id"]); using (var context = new NBackendContext()) { var any_student = context.Users.Where(a => a.Id == student_id); if (!any_student.Any()) { return(Helper.JsonConverter.Error(400, "这个人有问题")); } var teams = context.TeamStudents.Where(a => a.studentId == student_id); var list = new List <object>(); foreach (var each_team in teams) { var team_members = context.TeamStudents.Where(a => a.teamId == each_team.teamId); var member_list = new List <object>(); var team_info = context.Teams.Single(a => a.TeamId == each_team.teamId); var course_info = context.Courses.Single(a => a.CourseId == team_info.courseId); foreach (var team_member in team_members) { member_list.Add(new { student_id = team_member.studentId, student_name = context.Users.Single(a => a.Id == team_member.studentId).user_name }); } list.Add(new { year = team_info.year, semester = team_info.semester, sec_id = team_info.secId, course_id = team_info.courseId, course_name = course_info.course_name, team_id = each_team.teamId, team_name = team_info.team_name, students = JsonConvert.SerializeObject(member_list) }); } var data = new { teams = list }; return(Helper.JsonConverter.BuildResult(data)); } } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "数据库中可能存在不一致现象,请检查")); } }
public static object getTwis(object json) { NBackendContext ctx = new NBackendContext(); Dictionary <string, string> body = JsonConverter.Decode(json); int user_id = int.Parse(body["user_id"]); return(ListToObj(ctx, getSelfTwis(ctx, user_id))); }
// public static List <object> getAllBroadcasts(string token) { NBackendContext ctx = new NBackendContext(); var bros = _getAllExamsOfAllClass(ctx, token); return(ListToObj(bros)); }
//学生提交试卷 public static object finishExam(string token, object json) { int user_id = JwtManager.DecodeToken(token); NBackendContext ctx = new NBackendContext(); User user = UserBiz.getUserById(ctx, user_id); //var body = Helper.JsonConverter.Decode(json); try { var body = JsonConvert.DeserializeObject <Dictionary <string, object> >(json.ToString()); var exam_id = (int)(long)body["exam_id"]; var questions = (JArray)body["questions"]; //var _body = JsonConvert.DeserializeObject<List<object>>(questions); List <object> ques_ans = new List <object>(); int total_score = 0; foreach (var qu in questions) { IDictionary <string, JToken> rates = (JObject)qu; // Explicit typing just for "proof" here Dictionary <string, object> __body = rates.ToDictionary(pair => pair.Key, pair => (object)pair.Value); int question_id = ((JValue)__body["question_id"]).Value <int>(); string answer = ((JValue)__body["answer"]).Value <string>(); Question question = getQuestionById(ctx, question_id); if (question.answer.Equals(answer)) { int single_score = getScoreById(ctx, question_id, exam_id); total_score += single_score; } } ctx.TakesExams.Add(new TakesExam { StudentId = user_id, ExamId = (int)exam_id, score = total_score }); ctx.SaveChanges(); return(Helper.JsonConverter.BuildResult(null)); } catch (Exception e) { //throw e; return(Helper.JsonConverter.Error(400, "提交失败")); } }
public static object GetOneDiscussion(object json) { try { var body = Helper.JsonConverter.Decode(json); var discussion_id = int.Parse(body["discussion_id"]); using (var context = new NBackendContext()) { var a_discussion = context.Discussions.Where(a => a.DisscussionId == discussion_id); if (!a_discussion.Any()) { return(Helper.JsonConverter.Error(400, "这个讨论不存在")); } var the_discussion = a_discussion.Single(); var replys = the_discussion.comments.ToList(); var list = new List <object>(); if (the_discussion.is_comment != true) { foreach (var each_reply in replys) { list.Add(new { discussion_id = each_reply.DisscussionId, user_id = each_reply.userId, user_name = context.Users.Single(a => a.Id == each_reply.userId).user_name, role = context.Users.Single(a => a.Id == each_reply.userId).role, content = each_reply.content, time = each_reply.time, avatar = context.Users.Single(a => a.Id == each_reply.userId).avatar, question_id = the_discussion.DisscussionId }); } } var data = new { discussion_id = the_discussion.DisscussionId, user_id = the_discussion.userId, user_name = context.Users.Single(a => a.Id == the_discussion.userId).user_name, role = context.Users.Single(a => a.Id == the_discussion.userId).role, avatar = context.Users.Single(a => a.Id == the_discussion.userId).avatar, content = the_discussion.content, time = the_discussion.time, replys = list }; return(Helper.JsonConverter.BuildResult(data)); } } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "数据库中可能存在不一致现象,请检查")); } }
public static object postTwi(string token, object json) { Dictionary <string, string> body = JsonConverter.Decode(json); NBackendContext ctx = new NBackendContext(); int user_id = JwtManager.DecodeToken(token); //var user_id = int.Parse(body["user_id"]); if (UserBiz.getUserById(ctx, user_id) == null) { return(Helper.JsonConverter.Error(400, "你这个人是谁哦")); } var content = body["content"]; var time = body["time"]; var image = body["image"]; Twitter twi = new Twitter { //TwitterId = 1, userId = user_id, content = content, time = time, image = image }; ctx.Twitters.Add(twi); try { ctx.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } var data = new { twitter_id = twi.TwitterId, user_id = twi.userId, image = twi.image, time = twi.time, content = twi.content, }; return(JsonConverter.BuildResult(data)); }
//获取广播的具体信息 public static object getBroastInfo(string token, object json) { try { var body = JsonConverter.Decode(json); int broadcast_id = int.Parse(body["broadcast_id"]); NBackendContext ctx = new NBackendContext(); var q = ctx.Broadcasts.Where(bro => bro.BroadcastId == broadcast_id); if (!q.Any()) { return(JsonConverter.Error(400, "该广播不存在!")); } var broadcast = q.Single(); object data; if (broadcast.scope == SCOPE_CLASS) { data = new { broadcast_id, broadcast.content, broadcast.type, broadcast.scope, sec_id = broadcast.secId, course_id = broadcast.courseId, broadcast.semester, broadcast.year, broadcast.start_time, broadcast.end_time, broadcast.publish_time, }; } else { data = new { broadcast_id, broadcast.content, broadcast.type, broadcast.scope, broadcast.start_time, broadcast.end_time, broadcast.publish_time, }; } return(JsonConverter.BuildResult(data)); } catch (Exception e) { return(JsonConverter.Error(400, "请检查输入字段格式或者值")); } }
private static Question getQuestionById(NBackendContext ctx, int question_id) { var q = ctx.Questions.Where(qu => qu.QuestionId == question_id); if (!q.Any()) { return(null); } return(q.Single()); }
private static Exam getExamById(NBackendContext ctx, int exam_id) { var q = ctx.Exams.Where(exam => exam.ExamId == exam_id); if (!q.Any()) { return(null); } return(q.Single()); }
public static object GetDiscussions(object json) { try { var body = Helper.JsonConverter.Decode(json); var sec_id = int.Parse(body["sec_id"]); var course_id = int.Parse(body["course_id"]); var semester = body["semester"]; var year = int.Parse(body["year"]); using (var context = new NBackendContext()) { var a_class = context.Sections.Where(a => a.SecId == sec_id && a.courseId == course_id && a.semester == semester && a.year == year); if (!a_class.Any()) { return(Helper.JsonConverter.Error(400, "不存在这个班级")); } var discussions = context.Discussions.Where(a => a.courseId == course_id && a.secId == sec_id && a.semester == semester && a.year == year && a.is_comment == false); var list = new List <object>(); if (discussions.Any()) { foreach (var a_discussion in discussions) { var user_info = context.Users.Single(a => a.Id == a_discussion.userId); list.Add(new { discussion_id = a_discussion.DisscussionId, user_id = user_info.Id, user_name = user_info.user_name, role = user_info.role, content = a_discussion.content, time = a_discussion.time, avatar = user_info.avatar //question_id = a_discussion.Discussion_DisscussionId }); } } var data = new { questions = list }; return(Helper.JsonConverter.BuildResult(data)); } } catch (Exception e) { System.Console.Write(e.Message); return(Helper.JsonConverter.Error(410, "输入字段格式可能存在问题,或者数据库中可能存在不一致现象,请检查")); } }
//在section表中找到某条记录 public static Section getSection(NBackendContext ctx, int sec_id, int course_id, int year, string semester) { var q = ctx.Sections.Where(sec => sec.SecId == sec_id && sec.courseId == course_id && sec.year == year && sec.semester == semester ); if (!q.Any()) { return(null); } return(q.Single()); }
public static object Login(object json) { try { var body = JsonConverter.Decode(json); var user_id = int.Parse(body["user_id"]); var password = body["password"]; NBackendContext ctx = new NBackendContext(); var q = ctx.Users.Where(_user => _user.Id == user_id); if (!q.Any()) { return(JsonConverter.Error(400, "用户id不正确")); } // User user = q.Single(); //待修改 string encoded_password = UserHelper.Encrypt(user_id, password); if (!user.password.Equals(password) && !user.password.Equals(encoded_password)) { return(JsonConverter.Error(400, "密码错误")); } int following_num = user.following.Count(); int followers_num = user.followers.Count(); var token = Helper.JwtManager.GenerateToken(user_id); var data = new { user_id = user_id, user_name = user.user_name, department = user.department, phone_number = user.phone_number, email = user.mail, avatar = user.avatar, role = user.role, token = token, following = following_num, follower = followers_num, }; return(JsonConverter.BuildResult(data, 200, "ok")); } catch { return(Helper.JsonConverter.Error(400, "登陆失败,请确认您的密码或者id")); } }
private static int getScoreById(NBackendContext ctx, int question_id, int exam_id) { var q = ctx.ExamQuestions.Where(eq => eq.questionId == question_id && eq.examId == exam_id); if (!q.Any()) { return(-1); } else { return(q.Single().score); } }