public async Task <IEnumerable <CreatedTask> > BulkCreateAsync(BulkCreate model, IValidator <BulkCreate> validator)
        {
            ValidateAndThrow(model, validator);

            var task = _mapper.Map <ToDoTask>(model);

            var now = DateTime.UtcNow;

            var tasks = model.TasksText.Split("\n")
                        .Where(task => !string.IsNullOrWhiteSpace(task))
                        .Select(task => new ToDoTask
            {
                ListId           = model.ListId,
                Name             = task.Trim(),
                IsOneTime        = model.TasksAreOneTime,
                PrivateToUserId  = model.TasksArePrivate ? model.UserId : (int?)null,
                AssignedToUserId = null,
                CreatedDate      = now,
                ModifiedDate     = now
            }
                                ).ToList();

            IEnumerable <ToDoTask> createdTasks = await _tasksRepository.BulkCreateAsync(tasks, model.TasksArePrivate, model.UserId);

            var result = createdTasks.Select(x => _mapper.Map <CreatedTask>(x));

            return(result);
        }
Пример #2
0
        public async Task <IActionResult> BulkCreate([FromBody] BulkCreate dto)
        {
            if (dto == null)
            {
                return(BadRequest());
            }

            try
            {
                dto.UserId = IdentityHelper.GetUserId(User);
            }
            catch (UnauthorizedAccessException)
            {
                return(Unauthorized());
            }

            IEnumerable <CreatedTask> createdTasks = await _taskService.BulkCreateAsync(dto, _bulkCreateValidator);

            // Notify
            var usersToBeNotified = await _userService.GetToBeNotifiedOfListChangeAsync(dto.ListId, dto.UserId, dto.TasksArePrivate);

            if (usersToBeNotified.Any())
            {
                var currentUser = await _userService.GetAsync(dto.UserId);

                SimpleList list = await _listService.GetAsync(dto.ListId);

                foreach (CreatedTask task in createdTasks)
                {
                    foreach (var user in usersToBeNotified)
                    {
                        CultureInfo.CurrentCulture = new CultureInfo(user.Language, false);
                        var message = _localizer["CreatedTaskNotification", IdentityHelper.GetUserName(User), task.Name, list.Name];

                        var createNotificationDto = new CreateOrUpdateNotification(user.Id, dto.UserId, list.Id, task.Id, message);
                        var notificationId        = await _notificationService.CreateOrUpdateAsync(createNotificationDto);

                        var pushNotification = new PushNotification
                        {
                            SenderImageUri = currentUser.ImageUri,
                            UserId         = user.Id,
                            Application    = "To Do Assistant",
                            Message        = message,
                            OpenUrl        = GetNotificationsPageUrl(notificationId)
                        };

                        _senderService.Enqueue(pushNotification);
                    }
                }
            }

            return(StatusCode(201));
        }