Exemple #1
0
        public async Task <ActionResult <ResponseTaskDetail> > PostTask([FromBody] CreateTask createTask)
        {
            if (string.IsNullOrEmpty(createTask.Title))
            {
                return(UnprocessableEntity(new List <ValidatorException> {
                    new ValidatorException
                    {
                        Field = "Title",
                        Message = "TITLE_IS_REQUIRED",
                        Description = "Поле Название обязательное для заполнения"
                    }
                }));
            }


            var email  = User.Identity.Name;
            var author = await _context.Workers.SingleOrDefaultAsync(x => x.Email == email);

            var file = await _context.Files.SingleOrDefaultAsync(x => x.Id == createTask.FileId);

            var newTask = new Models.Task
            {
                Title           = createTask.Title,
                Description     = createTask.Description,
                ExpirationDate  = DateTime.ParseExact(createTask.ExpiredDate, "dd.MM.yyyy", null),
                RewardCoins     = createTask.RewardCoins,
                RewardXp        = createTask.RewardXp,
                DifficultyId    = createTask.DifficultyId,
                PriorirtyId     = createTask.PriorityId,
                AttachedFileUrl = Constans.ApiUrl + Constans.FileDownloadPart + file.Name,
                Status          = await _context.Statuses.SingleAsync(x => x.Name == "to_do"),
                WorkerId        = createTask.WorkerId,
                AuthorId        = author.Id
            };

            _context.Tasks.Add(newTask);
            await _context.SaveChangesAsync();

            var createdTask = await _context.Tasks
                              .Include(x => x.Worker)
                              .ThenInclude(x => x.Speciality)
                              .Include(x => x.Status)
                              .Include(x => x.Priorirty)
                              .Include(x => x.Difficulty)
                              .SingleAsync(x => x.Id == newTask.Id);

            var icon = await _context.Files.SingleOrDefaultAsync(x => x.Name == "Draft.png");

            return(Ok(ResponseTaskDetail.FromApiTask(createdTask,
                                                     icon: icon,
                                                     author: author,
                                                     file: file,
                                                     avatarWorker: _getAvatar(createdTask.Worker.AvatarUrl),
                                                     avatarAuthor: _getAvatar(author.AvatarUrl)
                                                     )));
        }
Exemple #2
0
        public async Task <ActionResult <ResponseTaskDetail> > GetMyTask(int id)
        {
            var email = User.Identity.Name;
            var task  = await _context.Tasks
                        .Include(x => x.Worker)
                        .ThenInclude(x => x.Speciality)
                        .Include(x => x.Priorirty)
                        .Include(x => x.Difficulty)
                        .Include(x => x.Status)
                        .SingleOrDefaultAsync(x => x.Id == id && x.Worker.Email == email);


            if (task == null)
            {
                return(NotFound(new ExceptionInfo
                {
                    Message = TasksErrorsMessages.TaskNotFound,
                    Description = "Задача не найдена",
                }));
            }

            var fileName = task?.AttachedFileUrl?.Replace(Constans.ApiUrl + Constans.FileDownloadPart, string.Empty);

            var file = fileName != null ? await _context.Files.SingleOrDefaultAsync(x => x.Name == fileName) : null;

            var isExpired = DateTime.Now > task.ExpirationDate;
            var iconName  = task.Status.IconUrl.Replace(Constans.ApiUrl + Constans.FileDownloadPart, string.Empty);
            var icon      = isExpired ?
                            await _context.Files.SingleOrDefaultAsync(x => x.Name == "Expired.png") :
                            await _context.Files.SingleOrDefaultAsync(x => x.Name == iconName);

            var author = _context.Workers
                         .Include(x => x.Speciality)
                         .SingleOrDefault(x => x.Id == task.AuthorId);

            return(Ok(ResponseTaskDetail.FromApiTask(task,
                                                     author: author,
                                                     icon: icon,
                                                     file: file,
                                                     avatarWorker: _getAvatar(task.Worker.AvatarUrl),
                                                     avatarAuthor: _getAvatar(author.AvatarUrl)
                                                     )));
        }