Пример #1
0
        // обновить файл решения
        public async Task <OperationDetailDTO> UpdateSolutionFileAsync(int fileID, string newUserFileName, string newUniqueFileName)
        {
            var detail = new OperationDetailDTO();

            try
            {
                var file = await _context.SolutionFiles.FindAsync(fileID);

                if (file == null)
                {
                    detail.ErrorMessages.Add("Ошибка при обновлении файла решения задачи: файл не найден.");
                }

                file.FileName = newUserFileName;
                file.Path     = SolutionFilePath + newUniqueFileName;
                file.FileURI  = SolutionFileURI + newUniqueFileName;

                _context.SolutionFiles.Update(file);
                await _context.SaveChangesAsync();

                detail.Succeeded = true;
                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add("Ошибка при обновлени файла решения задачи: " + e.Message);
                return(detail);
            }
        }
        public async Task <IActionResult> DeleteRepoAsync([FromBody] int[] id)
        {
            var detail = new OperationDetailDTO();

            try
            {
                var res = await _teacherService.DeleteRepositoryAsync(id[0]);

                if (res.Succeeded)
                {
                    detail.Succeeded = true;
                    foreach (var path in res.Data)
                    {
                        var filePath = _environment.WebRootPath + path;
                        if (System.IO.File.Exists(filePath))
                        {
                            System.IO.File.Delete(filePath);
                        }
                    }
                }
                return(Ok(detail));
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add("Ошибка на сервере при удалении файлов репозитория. Описании ошибки: " + e.Message);
                Debug.WriteLine(e.InnerException);
                Debug.WriteLine("Source :" + e.Source);
                return(Ok(detail));
            }
        }
        // получение данных профиля преподавателя
        public async Task <OperationDetailDTO <TeacherDTO> > GetProfileDataAsync()
        {
            var detail = new OperationDetailDTO <TeacherDTO>();

            try
            {
                var currentUserEntity = await GetUserFromClaimsAsync();

                var teacherEntity = await _context.Teachers
                                    .Include(t => t.User)
                                    .Include(t => t.Department)
                                    .ThenInclude(d => d.Faculty)
                                    .Where(t => t.UserId == currentUserEntity.Id)
                                    .FirstOrDefaultAsync();

                var dto = TeacherDTO.Map(teacherEntity);

                detail.Succeeded = true;
                detail.Data      = dto;
                return(detail);
            }
            catch (Exception e)
            {
                detail.Succeeded = false;
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
        public async Task <OperationDetailDTO <List <string> > > DeleteRepositoryAsync(int id)
        {
            var detail        = new OperationDetailDTO <List <string> >();
            var removingFiles = new List <string>();

            var entity = await _context.RepositoryModels
                         .Include(r => r.Files)
                         .Where(r => r.Id == id)
                         .FirstOrDefaultAsync();

            if (entity != null)
            {
                foreach (var fileEntity in entity.Files)
                {
                    removingFiles.Add(fileEntity.Path);
                }
                _context.RepositoryModels.Remove(entity);
                await _context.SaveChangesAsync();

                detail.Data      = removingFiles;
                detail.Succeeded = true;
            }
            else
            {
                detail.ErrorMessages.Add("Репозиторий не найден.");
            }

            return(detail);
        }
        // test
        public async Task <OperationDetailDTO <List <SubjectDTO> > > GetRepositoryListFilters()
        {
            var detail = new OperationDetailDTO <List <SubjectDTO> >();

            var resultSubjectDTOList = new List <SubjectDTO>();

            var currentUserEntity = await GetUserFromClaimsAsync();

            var teacherEntity = await _context.Teachers
                                .Where(t => t.UserId == currentUserEntity.Id)
                                .FirstOrDefaultAsync();

            IQueryable <RepositoryModel> repositories = from r in _context.RepositoryModels
                                                        .Include(r => r.Teacher)
                                                        .Include(r => r.Subject)
                                                        .Where(r => r.TeacherId == teacherEntity.Id)
                                                        select r;

            foreach (var repo in repositories)
            {
                SubjectDTO subjectDTO;
                if ((subjectDTO = resultSubjectDTOList.FirstOrDefault(s => s.Id == repo.SubjectId)) != null)
                {
                }
                else
                {
                    subjectDTO = SubjectDTO.Map(repo.Subject);
                    resultSubjectDTOList.Add(subjectDTO);
                }
            }

            detail.Data      = resultSubjectDTOList;
            detail.Succeeded = true;
            return(detail);
        }
Пример #6
0
        public async Task <OperationDetailDTO <StudentDTO> > GetProfileDataAsync()
        {
            var detail = new OperationDetailDTO <StudentDTO>();

            try
            {
                var currentUserEntity = await GetUserFromClaimsAsync();

                var studentEntity = await _context.Students
                                    .Include(s => s.User)
                                    .Include(s => s.Group)
                                    .ThenInclude(g => g.Faculty)
                                    .Where(s => s.UserId == currentUserEntity.Id)
                                    .FirstOrDefaultAsync();

                var dto = StudentDTO.Map(studentEntity);

                detail.Succeeded = true;
                detail.Data      = dto;
                return(detail);
            }
            catch (Exception e)
            {
                detail.Succeeded = false;
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
        public async Task <OperationDetailDTO> UpdateRepositoryAsync(RepositoryCreateModelDTO dto)
        {
            var detail = new OperationDetailDTO();

            if (dto != null)
            {
                var repoEntity = await _context.RepositoryModels
                                 .FindAsync(dto.Id);

                if (repoEntity == null)
                {
                    detail.ErrorMessages.Add("Репозиторий не найден.");
                    return(detail);
                }

                repoEntity.ContentText = dto.ContentText;
                repoEntity.Name        = dto.Name;

                _context.RepositoryModels.Update(repoEntity);
                await _context.SaveChangesAsync();

                detail.Succeeded = true;
            }
            else
            {
                detail.ErrorMessages.Add("Объекта параметра репозитория был равен null");
            }

            return(detail);
        }
Пример #8
0
        public async Task <OperationDetailDTO <RepositoryDTO> > GetRepositoryByID(int id)
        {
            var detail = new OperationDetailDTO <RepositoryDTO>();

            try
            {
                var repoEntity = await _context.RepositoryModels
                                 .Include(r => r.Files)
                                 .FirstOrDefaultAsync(r => r.Id == id);

                if (repoEntity != null)
                {
                    var dto = RepositoryDTO.Map(repoEntity);
                    detail.Data      = dto;
                    detail.Succeeded = true;
                }
                else
                {
                    detail.ErrorMessages.Add("Репозиторий не найден");
                }
                return(detail);
            }

            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
        // done
        public async Task <OperationDetailDTO> CloseTaskAsync(int id)
        {
            var detail = new OperationDetailDTO <TaskDTO>();

            try
            {
                var entity = await _context.TaskModels.FindAsync(id);

                if (entity == null)
                {
                    detail.ErrorMessages.Add("Задача не найдена.");
                    return(detail);
                }

                entity.IsOpen     = false;
                entity.UpdateDate = DateTime.Now;

                _context.TaskModels.Update(entity);
                await _context.SaveChangesAsync();

                detail.Succeeded = true;
                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
Пример #10
0
        // удаление из БД группы
        public async Task <OperationDetailDTO> DeleteGroupAsync(int id)
        {
            var detail = new OperationDetailDTO();

            try
            {
                var group = await _context.Groups.FindAsync(id);

                if (group != null)
                {
                    _context.Groups.Remove(group);
                    await _context.SaveChangesAsync();

                    detail.Succeeded = true;
                }
                else
                {
                    detail.ErrorMessages.Add("Ошибка при удалении: группа не найдена");
                }
                return(detail);
            }
            catch (Exception e)
            {
                return(new OperationDetailDTO {
                    Succeeded = false, ErrorMessages = { _serverErrorMessage + e.Message }
                });
            }
        }
Пример #11
0
        public async Task <OperationDetailDTO <TaskDTO> > GetTaskByIDAsync(int id)
        {
            var detail = new OperationDetailDTO <TaskDTO>();

            try
            {
                var entity = await _context.TaskModels.FindAsync(id);

                if (entity != null)
                {
                    var dto = TaskDTO.Map(entity);
                    detail.Succeeded = true;
                    detail.Data      = dto;
                }
                else
                {
                    detail.ErrorMessages.Add("Задание не найдено.");
                }
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
            }
            return(detail);
        }
        // TEST: files for solutions
        // done
        public async Task <OperationDetailDTO <TaskDTO> > GetTaskByIDAsync(int id)
        {
            var detail             = new OperationDetailDTO <TaskDTO>();
            var resultTaskDTO      = new TaskDTO();
            var resSolutionDTOList = new List <SolutionDTO>();
            var resStudentDTOList  = new List <StudentDTO>();

            try
            {
                var entity = await _context.TaskModels
                             .Include(t => t.Group)
                             .Include(t => t.TaskStudentItems)
                             .Include(t => t.Solutions)
                             .Include(t => t.Subject)
                             .Include(t => t.Type)
                             .Include(t => t.File)
                             .Include(t => t.Teacher)
                             .FirstOrDefaultAsync(t => t.Id == id);

                if (entity == null)
                {
                    detail.ErrorMessages.Add("Задача не найдена.");
                    return(detail);
                }

                foreach (var ts in entity.TaskStudentItems)
                {
                    var studentEntuty = await _context.Students.FindAsync(ts.StudentId);

                    resStudentDTOList.Add(StudentDTO.Map(studentEntuty));
                }

                // [files]
                foreach (var solution in entity.Solutions)
                {
                    var solutionEntity = await _context.Solutions
                                         .Include(s => s.File)
                                         .Where(s => s == solution)
                                         .FirstOrDefaultAsync();

                    resSolutionDTOList.Add(SolutionDTO.Map(solutionEntity));
                }

                resultTaskDTO = TaskDTO.Map(entity);
                _taskService.GetCurrentTimePercentage(ref resultTaskDTO);
                resultTaskDTO.Solutions = resSolutionDTOList;
                resultTaskDTO.Students  = resStudentDTOList;

                detail.Data      = resultTaskDTO;
                detail.Succeeded = true;
                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
Пример #13
0
        public async Task <OperationDetailDTO> UpdateProfileDataAsync(StudentDTO newStudentDTO)
        {
            var detail = new OperationDetailDTO <TeacherDTO>();

            try
            {
                List <string> errorMessages = new List <string>();

                var currentUserEntity = await GetUserFromClaimsAsync();

                var studentUser = await _context.Users
                                  .Where(u => u.Id == currentUserEntity.Id)
                                  .FirstOrDefaultAsync();

                if (!UserValidator.Validate(newStudentDTO, out errorMessages))
                {
                    detail.ErrorMessages = errorMessages;
                    return(detail);
                }

                if (await _context.StudentRegisterRequests.AnyAsync(x => x.UserName == newStudentDTO.UserName) ||
                    await _context.TeacherRegisterRequests.AnyAsync(x => x.UserName == newStudentDTO.UserName) ||
                    newStudentDTO.UserName != studentUser.UserName && await _userManager.FindByNameAsync(newStudentDTO.UserName) != null)
                {
                    detail.ErrorMessages.Add("Пользователь с таким именем пользователя уже существует, подберите другое.");
                    return(detail);
                }

                if (studentUser != null)
                {
                    studentUser.Email    = newStudentDTO.Email;
                    studentUser.UserName = newStudentDTO.UserName;

                    var validateRes = _userValidator.ValidateAsync(_userManager, studentUser);
                    if (validateRes.Result.Succeeded)
                    {
                        await _userManager.UpdateNormalizedEmailAsync(studentUser);

                        await _userManager.UpdateNormalizedUserNameAsync(studentUser);

                        detail.Succeeded = true;
                    }
                    else
                    {
                        detail.ErrorMessages.Add("Данные пользователя не прошли валидацию. Подробнее: " + validateRes.Result.Errors.ToList());
                        return(detail);
                    }
                    await _context.SaveChangesAsync();
                }

                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
        public async Task <IActionResult> AddStudentRegRequestAsync([FromBody] StudentRegisterDTO dto)
        {
            var test   = JsonConvert.SerializeObject(dto);
            var detail = new OperationDetailDTO();
            var res    = await _accountService.CreateStudentRegisterRequestAsync(dto);

            detail = res;
            return(Ok(detail));
        }
Пример #15
0
        // --приём заявки  преподавтеля
        public async Task <OperationDetailDTO> CreateTeacherAsync(TeacherRegisterRequest registerEntity)
        {
            OperationDetailDTO resultDetail;
            List <string>      errors = new List <string>();

            try
            {
                var user       = GetTeacherUserFromRegEntity(registerEntity);
                var userResult = await _userManager.CreateAsync(user, registerEntity.PasswordHash);

                if (userResult.Succeeded)
                {
                    var roleResult = await _userManager.AddToRoleAsync(user, Role.Types.Teacher.ToString());

                    if (roleResult.Succeeded)
                    {
                        resultDetail = new OperationDetailDTO {
                            Succeeded = true
                        };
                    }
                    else
                    {
                        await _userManager.DeleteAsync(user);

                        foreach (var error in userResult.Errors)
                        {
                            errors.Add("Ошибка при регистрации пользователя-преподавателя. Код ошибки: " + error.Code + ". Описание ошибки: " + error.Description);
                        }
                        resultDetail = new OperationDetailDTO {
                            Succeeded = false, ErrorMessages = errors
                        };
                    }
                }
                else
                {
                    foreach (var error in userResult.Errors)
                    {
                        errors.Add("Ошибка при регистрации пользователя-преподавателя. Код ошибки: " + error.Code + " Описание ошибки: " + error.Description);
                    }
                    resultDetail = new OperationDetailDTO {
                        Succeeded = false, ErrorMessages = errors
                    };
                }
                return(resultDetail);
            }

            catch (Exception e)
            {
                errors.Add(_serverErrorMessage + e.Message);
                return(new OperationDetailDTO {
                    Succeeded = false, ErrorMessages = errors
                });
            }
        }
Пример #16
0
        public async Task <OperationDetailDTO> UpdatePasswordAsync(PasswordUpdateDTO dto)
        {
            var detail = new OperationDetailDTO();

            if (dto == null)
            {
                detail.ErrorMessages.Add("Параметр, полученный от клиентского приложения, был равен null");
                return(detail);
            }

            try
            {
                var user = await GetUserFromClaimsAsync();

                if (String.IsNullOrEmpty(dto.CurrentPassword) || String.IsNullOrEmpty(dto.NewPassword))
                {
                    detail.ErrorMessages.Add("Введены некорректные данные.");
                    return(detail);
                }

                var passwordRes = _userManager.PasswordHasher.VerifyHashedPassword(user, user.PasswordHash, dto.CurrentPassword);

                if (passwordRes == PasswordVerificationResult.Success)
                {
                    var passwordResetToken = await _userManager.GeneratePasswordResetTokenAsync(user);

                    var passwordResetResult = await _userManager.ResetPasswordAsync(user, passwordResetToken, dto.NewPassword);

                    if (passwordResetResult.Succeeded)
                    {
                        detail.Succeeded = true;
                    }
                    else
                    {
                        detail.ErrorMessages.Add("Некорректно введён новый пароль.");
                        foreach (var error in passwordResetResult.Errors.ToList())
                        {
                            detail.ErrorMessages.Add(error.Description);
                        }
                    }
                }
                else
                {
                    detail.ErrorMessages.Add("Введён неверный текущий пароль.");
                }

                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
        public async Task <IActionResult> AddFileForRepositoryaAsync()
        {
            string repoFileLoadPath = _environment.WebRootPath + "\\Files\\" + "\\RepoFiles\\";
            var    detail           = new OperationDetailDTO();

            try
            {
                var          allForms = Request.Form;
                StringValues repoIdString;
                var          taskIdRes = allForms.TryGetValue(allForms.Keys.First(), out repoIdString);
                var          strId     = repoIdString.ToString();
                var          id        = Convert.ToInt32(strId);
                var          file      = Request.Form.Files[0];
                if (file != null)
                {
                    var fileName = file.FileName;
                    var fileRes  = new OperationDetailDTO();

                    var newFileName = System.Guid.NewGuid() + fileName;
                    using (var fileStream = System.IO.File.Create(repoFileLoadPath + newFileName))
                    {
                        file.CopyTo(fileStream);
                    }
                    fileRes = await _repoService.AddFileToRepoAsync(id, fileName, newFileName);

                    if (!fileRes.Succeeded)
                    {
                        detail.ErrorMessages.Add("Не удалось загрузить файл для репозитория.");
                        detail.ErrorMessages.AddRange(fileRes.ErrorMessages);
                        return(Ok(detail));
                    }
                    else
                    {
                        detail.Succeeded = true;
                        return(Ok(detail));
                    }
                }
                else
                {
                    detail.ErrorMessages.Add("Файл равен null");
                    return(Ok(detail));
                }
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add("Ошибка на сервере при загрузке файлов: " + e.Message);
                Debug.WriteLine(e.InnerException);
                Debug.WriteLine("Source :" + e.Source);
                return(Ok(detail));
            }
        }
        // test
        public async Task <OperationDetailDTO <List <RepositoryDTO> > > GetRepositoriesFromDBAsync(FilterDTO[] filters = null)
        {
            var detail = new OperationDetailDTO <List <RepositoryDTO> >();

            var resultList = new List <RepositoryDTO>();

            var currentUserEntity = await GetUserFromClaimsAsync();

            var teacherEntity = await _context.Teachers
                                .Include(t => t.User)
                                .Where(t => t.UserId == currentUserEntity.Id)
                                .FirstOrDefaultAsync();


            var repos = from r in _context.RepositoryModels
                        .Where(r => r.TeacherId == teacherEntity.Id)
                        .Include(r => r.Subject)
                        .Include(r => r.Files)
                        select r;

            repos.OrderBy(r => r.Name);

            if (filters != null)
            {
                foreach (var filter in filters)
                {
                    switch (filter.Name)
                    {
                    case "subjectId":
                    {
                        var value = Convert.ToInt32(filter.Value);
                        if (value > 0)
                        {
                            repos = repos.Where(r => r.SubjectId == value);
                        }
                        break;
                    }
                    }
                }
            }

            foreach (var entity in repos)
            {
                var repoDTO = RepositoryDTO.Map(entity);
                resultList.Add(repoDTO);
            }

            detail.Data      = resultList;
            detail.Succeeded = true;
            return(detail);
        }
Пример #19
0
        public async Task <OperationDetailDTO <List <RepositoryDTO> > > GetRepositoriesFromDBAsync(FilterDTO[] filters)
        {
            var detail = new OperationDetailDTO <List <RepositoryDTO> >();

            try
            {
                var resultList = new List <RepositoryDTO>();

                var repos = from r in _context.RepositoryModels
                            .Include(r => r.Subject)
                            .Include(r => r.Files)
                            .Include(r => r.Teacher)
                            select r;

                repos.OrderBy(r => r.Teacher.Name);

                if (filters != null)
                {
                    foreach (var filter in filters)
                    {
                        switch (filter.Name)
                        {
                        case "subjectId":
                        {
                            var value = Convert.ToInt32(filter.Value);
                            if (value > 0)
                            {
                                repos = repos.Where(r => r.SubjectId == value);
                            }
                            break;
                        }
                        }
                    }
                }

                foreach (var entity in repos)
                {
                    var repoDTO = RepositoryDTO.Map(entity);
                    resultList.Add(repoDTO);
                }

                detail.Data      = resultList;
                detail.Succeeded = true;
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
            }

            return(detail);
        }
Пример #20
0
        public async Task <OperationDetailDTO> AddFileToRepoAsync(int id, string userfileName, string uniquefileName = null)
        {
            var detail = new OperationDetailDTO();

            try
            {
                var repo = await _context.RepositoryModels.FindAsync(id);

                if (repo != null)
                {
                    RepoFile newFile;
                    if (uniquefileName != null)
                    {
                        newFile = new RepoFile
                        {
                            RepositoryModel = repo,
                            FileName        = userfileName,
                            Path            = RepoFilePath + uniquefileName,
                            FileURI         = RepoFileURI + uniquefileName
                        };
                    }
                    else
                    {
                        newFile = new RepoFile
                        {
                            RepositoryModel = repo,
                            FileName        = userfileName,
                            Path            = RepoFilePath + userfileName,
                            FileURI         = RepoFileURI + userfileName
                        };
                    }

                    await _context.RepoFiles.AddAsync(newFile);

                    await _context.SaveChangesAsync();

                    detail.Succeeded = true;
                }
                else
                {
                    detail.ErrorMessages.Add("Ошибка при добавлении файла: репозиторий не найден.");
                }
                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add("Ошибка при добавлении файла к репозиторию " + e.Message);
                return(detail);
            }
        }
Пример #21
0
        // добавить файл к задаче
        public async Task <OperationDetailDTO> AddFileToTaskAsync(int taskID, string userFileName, string uniquefileName = null)
        {
            var detail = new OperationDetailDTO();

            try
            {
                var task = await _context.TaskModels.FindAsync(taskID);

                if (task != null)
                {
                    TaskFile newFile;
                    if (uniquefileName != null)
                    {
                        newFile = new TaskFile
                        {
                            TaskModel = task,
                            FileName  = userFileName,
                            Path      = TaskFilePath + uniquefileName,
                            FileURI   = TaskFileURI + uniquefileName,
                        };
                    }
                    else
                    {
                        newFile = new TaskFile
                        {
                            TaskModel = task,
                            FileName  = userFileName,
                            Path      = TaskFilePath + userFileName,
                            FileURI   = TaskFileURI + userFileName,
                        };
                    }

                    await _context.TaskFiles.AddAsync(newFile);

                    await _context.SaveChangesAsync();

                    detail.Succeeded = true;
                }
                else
                {
                    detail.ErrorMessages.Add("Ошибка при добавлении файла: задание не найдено.");
                }
                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add("Ошибка при добавлении файла к заданию. " + e.Message);
                return(detail);
            }
        }
Пример #22
0
        // добавить файл к решению
        public async Task <OperationDetailDTO> AddFileToSolutionAsync(int solutionID, string userFileName, string uniquefileName = null)
        {
            var detail = new OperationDetailDTO();

            try
            {
                var solution = await _context.Solutions.FindAsync(solutionID);

                if (solution != null)
                {
                    SolutionFile newFile;
                    if (uniquefileName != null)
                    {
                        newFile = new SolutionFile
                        {
                            Solution = solution,
                            FileName = userFileName,
                            Path     = SolutionFilePath + uniquefileName,
                            FileURI  = SolutionFileURI + uniquefileName,
                        };
                    }
                    else
                    {
                        newFile = new SolutionFile
                        {
                            Solution = solution,
                            FileName = userFileName,
                            Path     = SolutionFilePath + userFileName,
                            FileURI  = SolutionFileURI + userFileName,
                        };
                    }

                    await _context.SolutionFiles.AddAsync(newFile);

                    await _context.SaveChangesAsync();

                    detail.Succeeded = true;
                }
                else
                {
                    detail.ErrorMessages.Add("Ошибка при добавлении файла: решениие задачи не найдено.");
                }
                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add("Ошибка при добавлении файла к решению задачи. " + e.Message);
                return(detail);
            }
        }
        // создание сущности задачи и добавление в БД
        public async Task <OperationDetailDTO <string> > CreateNewTaskAsync(TaskCreateModelDTO dto = null)
        {
            var detail = new OperationDetailDTO <string>();

            try
            {
                var currentUserEntity = await GetUserFromClaimsAsync();

                var teacherEntity = await _context.Teachers
                                    .Include(t => t.User)
                                    .Where(t => t.UserId == currentUserEntity.Id)
                                    .FirstOrDefaultAsync();

                if (dto != null)
                {
                    var newTask = TaskCreateModelDTO.Map(dto);
                    newTask.TeacherId = teacherEntity.Id;

                    await AddStudentsToTaskAsync(newTask, dto.StudentIds);

                    await _context.TaskModels.AddAsync(newTask);

                    await _context.SaveChangesAsync();

                    var createdTask = await _context.TaskModels.FirstOrDefaultAsync(t => t == newTask);

                    if (createdTask != null)
                    {
                        detail.Data      = createdTask.Id.ToString();
                        detail.Succeeded = true;
                    }
                    else
                    {
                        detail.ErrorMessages.Add(_serverErrorMessage + "При создании задачи что-то пошло не так.");
                    }
                    return(detail);
                }
                else
                {
                    detail.ErrorMessages.Add("Параметр модели создаваемой задачи был равен NULL.");
                    return(detail);
                }
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(e.Message);
                return(detail);
            }
        }
        // test
        // add try - catch
        public async Task <OperationDetailDTO <string> > CreateNewRepositoryAsync(RepositoryCreateModelDTO dto = null)
        {
            var detail = new OperationDetailDTO <string>();

            if (dto != null)
            {
                var currentUserEntity = await GetUserFromClaimsAsync();

                var teacherEntity = await _context.Teachers
                                    .Where(t => t.UserId == currentUserEntity.Id)
                                    .FirstOrDefaultAsync();

                var subject = await _context.Subjects.FindAsync(dto.SubjectId);

                if (subject != null)
                {
                    var repositoryEntity = RepositoryCreateModelDTO.Map(dto);
                    repositoryEntity.Teacher = teacherEntity;
                    repositoryEntity.Subject = subject;
                    await _context.RepositoryModels.AddAsync(repositoryEntity);

                    await _context.SaveChangesAsync();

                    var createdRepo = await _context.RepositoryModels.FirstOrDefaultAsync(r => r == repositoryEntity); // by id ?

                    if (createdRepo != null)
                    {
                        detail.Data      = createdRepo.Id.ToString();
                        detail.Succeeded = true;
                    }
                    else
                    {
                        detail.ErrorMessages.Add("Не удалось получить созданный репозиторий");
                    }
                }
                else
                {
                    detail.ErrorMessages.Add("Параметр учебного предмета создаваемого репозитория был равен NULL");
                }

                return(detail);
            }

            else
            {
                detail.ErrorMessages.Add("Входные данные создаваемого репозитория равны NULL");
                return(detail);
            }
        }
        // Test
        public async Task <OperationDetailDTO <List <SubjectDTO> > > GetRepoCreateSubjectFiltersAsync()
        {
            var detail = new OperationDetailDTO <List <SubjectDTO> >();

            var resultSubjectDTOList = new List <SubjectDTO>();

            var subjects = await _context.Subjects.ToListAsync();

            foreach (var sub in subjects)
            {
                resultSubjectDTOList.Add(SubjectDTO.Map(sub));
            }

            detail.Data      = resultSubjectDTOList;
            detail.Succeeded = true;
            return(detail);
        }
        public async Task <IActionResult> SignInAsync([FromBody] UserLoginDTO dto)
        {
            OperationDetailDTO <SignInDetailDTO> detailResult = new OperationDetailDTO <SignInDetailDTO>();
            var serviceResult = await _accountService.SignInAsync(dto);

            try
            {
                if (!serviceResult.Succeeded)
                {
                    detailResult.ErrorMessages = serviceResult.ErrorMessages;
                    return(Ok(detailResult));
                }

                else
                {
                    var userRoles   = serviceResult.Data.UserRoles;
                    var tokenResult = _jwtTokenGenerator.Generate(serviceResult.Data.User, userRoles);

                    //HttpContext.Response.Cookies.Append(".AspNetCore.Application.Id",
                    //tokenResult.AccessToken, new CookieOptions { MaxAge = TimeSpan.FromMinutes(60) });
                    //HttpContext.Response.Cookies.Append("token",
                    //    tokenResult.AccessToken, new CookieOptions { MaxAge = TimeSpan.FromMinutes(60) });

                    detailResult = new OperationDetailDTO <SignInDetailDTO>
                    {
                        Succeeded = true,
                        Data      = new SignInDetailDTO
                        {
                            Role    = serviceResult.Data.UserRoles.FirstOrDefault().ToLowerInvariant(),
                            IdToken = tokenResult.AccessToken
                        },
                    };

                    return(Ok(detailResult));
                }
            }
            catch (Exception e)
            {
                detailResult.ErrorMessages.Add("Произошло исключение на сервере при попытке авторизации. " + e.Message);
                return(Ok(detailResult));
            }
        }
Пример #27
0
        public async Task <OperationDetailDTO> UpdateSolutionAsync(SolutionCreateModelDTO dto)
        {
            var detail = new OperationDetailDTO <TaskDTO>();

            try
            {
                if (dto == null)
                {
                    detail.ErrorMessages.Add("Объект входного параметра был равен NULL.");
                    return(detail);
                }

                var entity = await _context.Solutions.FindAsync(dto.Id);

                if (entity == null)
                {
                    detail.ErrorMessages.Add("Решение задачи не найдено.");
                    return(detail);
                }

                entity.ContentText  = dto.ContentText;
                entity.CreationDate = DateTime.Now;

                if (String.IsNullOrEmpty(entity.ContentText))
                {
                    detail.ErrorMessages.Add("Данные решения задачи введены некорректно. Поробуйте снова.");
                    return(detail);
                }

                _context.Solutions.Update(entity);
                await _context.SaveChangesAsync();

                detail.Succeeded = true;
                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
Пример #28
0
        public async Task <OperationDetailDTO <List <SubjectDTO> > > GetRepoFiltersAsync()
        {
            var detail = new OperationDetailDTO <List <SubjectDTO> >();

            try
            {
                var currentUserEntity = await GetUserFromClaimsAsync();

                var studentEntity = await _context.Students
                                    .Include(s => s.Group)
                                    .ThenInclude(g => g.Faculty)
                                    .Where(s => s.UserId == currentUserEntity.Id)
                                    .FirstOrDefaultAsync();

                var resultSubjectDTOList = new List <SubjectDTO>();

                var subjects = await _context.Subjects
                               .Include(s => s.Repositories)
                               .Where(s => s.Repositories.Count > 0)
                               .ToListAsync();

                foreach (var subject in subjects)
                {
                    SubjectDTO subjectDTO = SubjectDTO.Map(subject);
                    resultSubjectDTOList.Add(subjectDTO);
                }

                resultSubjectDTOList.OrderBy(s => s.Name);

                detail.Data      = resultSubjectDTOList;
                detail.Succeeded = true;
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
            }

            return(detail);
        }
Пример #29
0
        public async Task <OperationDetailDTO <string> > CreateSolutionAsync(SolutionCreateModelDTO dto)
        {
            var detail = new OperationDetailDTO <string>();

            try
            {
                var currentUserEntity = await GetUserFromClaimsAsync();

                var studentEntity = await _context.Students
                                    .Include(s => s.User)
                                    .Where(s => s.UserId == currentUserEntity.Id)
                                    .FirstOrDefaultAsync();

                if (dto != null)
                {
                    var taskEntity = await _context.TaskModels.FindAsync(dto.TaskId);

                    if (taskEntity == null)
                    {
                        detail.ErrorMessages.Add("Задача не найдена.");
                        return(detail);
                    }

                    Solution solutionEntity = new Solution
                    {
                        ContentText  = dto.ContentText,
                        Student      = studentEntity,
                        TaskModel    = taskEntity,
                        CreationDate = DateTime.Now
                    };

                    if (taskEntity.FinishDate > solutionEntity.CreationDate)
                    {
                        solutionEntity.InTime = true;
                    }

                    await _context.Solutions.AddAsync(solutionEntity);

                    await _context.SaveChangesAsync();

                    var createdSolution = await _context.Solutions.FirstOrDefaultAsync(t => t == solutionEntity);

                    if (createdSolution != null)
                    {
                        detail.Succeeded = true;
                        detail.Data      = createdSolution.Id.ToString();
                    }
                    else
                    {
                        detail.ErrorMessages.Add(_serverErrorMessage + "При создании решения задачи что-то пошло не так.");
                    }
                    return(detail);
                }

                else
                {
                    detail.ErrorMessages.Add("Параметр модели создаваемого решения был равен NULL.");
                    return(detail);
                }
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }
Пример #30
0
        public async Task <OperationDetailDTO <TaskDTO> > GetTaskByIDAsync(int id)
        {
            var         detail         = new OperationDetailDTO <TaskDTO>();
            var         resultTaskDTO  = new TaskDTO();
            SolutionDTO resSolutionDTO = null;
            Solution    solutionEntity;

            try
            {
                var currentUserEntity = await GetUserFromClaimsAsync();

                var studentEntity = await _context.Students
                                    .Include(s => s.User)
                                    .Include(s => s.Solutions)
                                    .Where(s => s.UserId == currentUserEntity.Id)
                                    .FirstOrDefaultAsync();

                var taskEntity = await _context.TaskModels
                                 .Include(t => t.Group)
                                 .Include(t => t.Solutions)
                                 .Include(t => t.Subject)
                                 .Include(t => t.Type)
                                 .Include(t => t.File)
                                 .Include(t => t.Teacher)
                                 .Include(t => t.TaskStudentItems)
                                 .FirstOrDefaultAsync(t => t.Id == id);

                if (taskEntity == null)
                {
                    detail.ErrorMessages.Add("Задача не найдена.");
                    return(detail);
                }

                resultTaskDTO = TaskDTO.Map(taskEntity);
                _taskService.GetCurrentTimePercentage(ref resultTaskDTO);

                solutionEntity = await _context.Solutions
                                 .Include(s => s.Student)
                                 .Include(s => s.File)
                                 .Where(s => s.TaskId == id)
                                 .Where(s => s.StudentId == studentEntity.Id)
                                 .FirstOrDefaultAsync();


                if (solutionEntity != null)
                {
                    resSolutionDTO = SolutionDTO.Map(solutionEntity);
                }

                resultTaskDTO.Solution  = resSolutionDTO;
                resultTaskDTO.Solutions = null;

                detail.Data      = resultTaskDTO;
                detail.Succeeded = true;
                return(detail);
            }
            catch (Exception e)
            {
                detail.ErrorMessages.Add(_serverErrorMessage + e.Message);
                return(detail);
            }
        }