public async Task <IActionResult> EnrollInClass([FromBody] ClassUser classUser, [FromQuery] string action, [FromQuery] string userId) { var lang = Request.Headers["language"].ToString(); var errorMessages = new List <string>(); try { if (string.IsNullOrEmpty(classUser.ClassId) || classUser.UserId == null) { errorMessages.Add(_translator.GetTranslation("ERROR", lang)); return(BadRequest(new { errors = errorMessages })); } var cls = _classRepository.FindById(classUser.ClassId); var member = await _userManager.FindByIdAsync(classUser.UserId); if (cls == null || member == null) { errorMessages.Add(_translator.GetTranslation("ERROR", lang)); return(BadRequest(new { errors = errorMessages })); } if (action == "enroll") { var newClassUser = new ClassUser() { Class = cls, ClassId = classUser.ClassId, User = member, UserId = classUser.UserId, EnrollDateTime = DateTime.Now }; cls.ClassUsers.Add(newClassUser); } else if (action == "disenroll") { var enrollement = cls.ClassUsers .SingleOrDefault(e => e.ClassId == classUser.ClassId && e.UserId == classUser.UserId); _doneSessionRepository.DeleteAllByCourseUser(cls.Course.Id, classUser.UserId); cls.ClassUsers.Remove(enrollement); } var updatedClass = _classRepository.Update(cls); if (updatedClass != null) { if (action == "enroll") { await _notificationRepository.Create(new Notification() { Type = "ENROLLEMENT", Text = $"{member.FirstName} {member.LastName} enrolled in class [ {cls.Name_EN} ]", DateTime = DateTime.Now, Info = null, IsSeen = false, }); } else if (action == "disenroll") { await _notificationRepository.Create(new Notification() { Type = "ENROLLEMENT", Text = $"{member.FirstName} {member.LastName} disenrolled from class [ {cls.Name_EN} ]", DateTime = DateTime.Now, Info = null, IsSeen = false, }); } } var user = await _userManager.FindByIdAsync(userId); bool isAdmin = false; if (user != null) { isAdmin = user.IsAdmin && (await _userManager.IsInRoleAsync(user, "Admin")); } return(Ok(new { updatedClass = ResponseGenerator.GenerateClassResponse(cls, isAdmin) })); } catch { errorMessages.Add(_translator.GetTranslation("ERROR", lang)); return(BadRequest(new { errors = errorMessages })); } }