public async Task <Result <TicketTask> > AddTaskAsync(TicketTask task) { await using var context = Context; Ticket ticket = context.Tickets .Include(t => t.CorrespondingProject) .FirstOrDefault(t => t.TicketId == task.TicketId); if (ticket != null) { User notifier = await context.Users.FindAsync(UserId); IReadOnlyCollection <User> usersToNotify = await context.Members .Where(member => member.ProjectId == ticket.ProjectId) .Include(member => member.CorrespondingUser) .Select(member => member.CorrespondingUser) .ToListAsync(); var notificationBuilder = new NotificationBuilder(notifier, usersToNotify); IReadOnlyCollection <Notification> notifications = notificationBuilder.BuildTaskCreateNotifications(ticket.CorrespondingProject, ticket, task); await context.Notifications.AddRangeAsync(notifications); } await context.Tasks.AddAsync(task); await context.SaveChangesAsync(); return(new Result <TicketTask> { Payload = task, ResultType = ResultType.Ok }); }
public async Task <Result <string> > DeleteTaskAsync(int taskId) { await using var context = Context; TicketTask task = await context.Tasks.FindAsync(taskId); Ticket ticket = context.Tickets .Include(t => t.CorrespondingProject) .FirstOrDefault(t => t.TicketId == task.TicketId); User notifier = await context.Users.FindAsync(UserId); IReadOnlyCollection <User> usersToNotify = await context.Members .Where(member => member.ProjectId == ticket.ProjectId) .Include(member => member.CorrespondingUser) .Select(member => member.CorrespondingUser) .ToListAsync(); var notificationBuilder = new NotificationBuilder(notifier, usersToNotify); IReadOnlyCollection <Notification> notifications = notificationBuilder.BuildTaskDeleteNotifications(ticket.CorrespondingProject, ticket, task); TicketTask correspondingTask = await context.Tasks.FindAsync(taskId); if (correspondingTask == null) { return(new Result <string> { ResultType = ResultType.NotFound, Message = "No task to delete." }); } await context.Notifications.AddRangeAsync(notifications); context.Tasks.Remove(correspondingTask); await context.SaveChangesAsync(); return(new Result <string> { ResultType = ResultType.Ok, Message = "Deleted" }); }
public async Task <Result <TicketTask> > ModifyTaskAsync(TicketTask task) { await using var context = Context; if (!context.Tasks.Any(t => t.TaskId == task.TaskId)) { return(new Result <TicketTask> { ResultType = ResultType.NotFound, Message = "No task to update." }); } Ticket ticket = context.Tickets .Include(t => t.CorrespondingProject) .FirstOrDefault(t => t.TicketId == task.TicketId); if (task.Done && ticket != null) { User notifier = await context.Users.FindAsync(UserId); IReadOnlyCollection <User> usersToNotify = await context.Members .Where(member => member.ProjectId == ticket.ProjectId) .Include(member => member.CorrespondingUser) .Select(member => member.CorrespondingUser) .ToListAsync(); var notificationBuilder = new NotificationBuilder(notifier, usersToNotify); IReadOnlyCollection <Notification> notifications = notificationBuilder.BuildTaskModifyNotifications(ticket.CorrespondingProject, ticket, task); await context.Notifications.AddRangeAsync(notifications); } context.Tasks.Update(task); await context.SaveChangesAsync(); return(new Result <TicketTask> { ResultType = ResultType.Ok, Payload = task }); }
public IReadOnlyCollection <Notification> BuildTaskDeleteNotifications(Project project, Ticket ticket, TicketTask task) { var notifications = new List <Notification>(); foreach (User observer in _observers) { var notification = new Notification { CreatedDate = DateTime.Now, Title = "Подзадача удалена", Message = $"{project.Name}: {_notifier.FirstName} {_notifier.LastName} удалил подзадачу {task.Title} в задаче {ticket.Title}.", RecipientId = observer.UserId, }; notifications.Add(notification); } return(notifications); }