public async Task <IEnumerable <Course> > Join(int courseId, string token) { var course = await _context.Courses .Include(x => x.Tokens) .SingleOrDefaultAsync(x => x.Id == courseId); if (course == null) { throw new UserException("CourseId and/or token wrong.", 404); } if (course.Tokens.Any(x => x.Active && x.Token == token)) { if (course.Members == null) { course.Members = new List <CourseMember>(); } course.Members.Add(new CourseMember { Course = course, CourseId = course.Id, MemberId = GetUserId() }); await _context.SaveChangesAsync(); return(await Get()); } throw new UserException("CourseId and/or token wrong.", 404); }
public async Task <PushTokens> SaveToken(string userId, string token, string deviceId) { ILAUser user = await _context.Users.FindAsync(userId); PushTokens pushToken = await _context.PushTokens.Where(x => x.DeviceId == deviceId).SingleOrDefaultAsync(x => x.User.Id == userId); if (pushToken == null) { pushToken = new PushTokens { DeviceId = deviceId, User = user, Token = token }; await _context.PushTokens.AddAsync(pushToken); } else { pushToken.Token = token; pushToken.User = user; _context.PushTokens.Update(pushToken); } await _context.SaveChangesAsync(); pushToken.User = null; return(pushToken); }
public async Task <Pause> PostPause(int lectureId) { Lecture lecture = await _context.Lectures .Include(x => x.Pauses) .ThenInclude(x => x.User) .FirstOrDefaultAsync(x => x.Id == lectureId); ILAUser user = await _context.Users.FindAsync(GetUserId()); if (lecture == null) { throw new UserException("Lecture not found", 404); } if (user == null) { throw new UserException("Internal server Error", 500); } Pause pause = new Pause { Lecture = lecture, TimeStamp = DateTime.Now.ToUniversalTime(), User = user }; if (lecture.Pauses.Any(x => x.User.Id == GetUserId() && (pause.TimeStamp - x.TimeStamp).TotalSeconds < 120)) { throw new UserException("You can pause ery 120 seconds only.", 481); } await _context.Pauses.AddAsync(pause); await _context.SaveChangesAsync(); pause.User = null; pause.Lecture = null; await _hubContext.Clients.Group(lectureId.ToString()).SendAsync("Pause", pause); return(pause); }
public async Task <Question> PostQuestion(int lectureId, [FromBody] QuestionCreate model) { Lecture lecture = await _context.Lectures .Where(x => x.Id == lectureId) .Where(x => x.Course.Members.Any(y => y.MemberId == GetUserId())) .Include(x => x.Questions) .ThenInclude(x => x.Answers) .SingleOrDefaultAsync(); ILAUser user = await _context.Users.FindAsync(GetUserId()); Question question = new Question { PointedQuestion = model.PointedQuestion, Lecture = lecture, User = user }; await _context.Questions.AddAsync(question); await _context.SaveChangesAsync(); question.User = null; question.Lecture = null; return(question); }
public async Task <IActionResult> Create([Bind("Id,Title,Description,Archived")] Course course) { if (ModelState.IsValid) { ILAUser user = await _context.Users.FindAsync(GetUserId()); if (user == null) { return(NotFound()); } course.Owner = user; _context.Add(course); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(course)); }
public async Task <IActionResult> Create([Bind("Id,Title,Description,Visible,Start,Stop,CourseId")] Lecture lecture) { var course = await _context.Courses.FirstOrDefaultAsync(x => x.Id == lecture.CourseId && x.Owner.Id == GetUserId()); if (course == null) { return(Forbid()); } if (ModelState.IsValid) { _context.Add(lecture); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(lecture)); }