Пример #1
0
        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 }));
            }
        }