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); }
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)); }