public async Task <TasksViewModel> Handle(CreateTaskRequest request, CancellationToken cancellationToken) { //var task = new Tasks //{ // IdCampaign = request.Task.IdCampaign, // IdWriter = request.Task.IdWriter, // Description = request.Task.Description, // Deadline = request.Task.Deadline, // PublishTime = request.Task.PublishTime, // Title = request.Task.Title, // StartedDate = DateTime.UtcNow, // ModifiedDate = DateTime.UtcNow, // Status = 1 //}; //contentodbContext.Tasks.Add(task); //await contentodbContext.SaveChangesAsync(); //return task; var transaction = contentodbContext.Database.BeginTransaction(); try { var Tags = new List <TasksTags>(); foreach (var item in request.Task.Tags) { var tag = new TasksTags { IdTag = item.Id, CreatedDate = DateTime.UtcNow }; Tags.Add(tag); } var task = new Tasks { IdCampaign = request.Task.IdCampaign, IdWriter = request.Task.IdWriter, Deadline = request.Task.Deadline, Description = request.Task.Description, PublishTime = request.Task.PublishTime, Title = request.Task.Title, StartedDate = DateTime.UtcNow, ModifiedDate = DateTime.UtcNow, TasksTags = Tags, Status = 1 }; contentodbContext.Attach(task); contentodbContext.Tasks.Add(task); await contentodbContext.SaveChangesAsync(cancellationToken); var ReturnTags = new List <TagsViewModel>(); foreach (var item in task.TasksTags) { var tag = new TagsViewModel { Id = item.IdTag, Name = contentodbContext.Tags.Find(item.IdTag).Name }; ReturnTags.Add(tag); } var status = new StatusModels(); status.Id = task.Status; status.Name = contentodbContext.StatusTasks.FirstOrDefault(x => x.Id == task.Status).Name; status.Color = contentodbContext.StatusTasks.FirstOrDefault(x => x.Id == task.Status).Color; var writer = new UsersModels { Id = task.IdWriter, Name = contentodbContext.Users.FirstOrDefault(x => x.Id == task.IdWriter).Name }; var taskModel = new TasksViewModel { Deadline = task.Deadline, Writer = writer, Id = task.Id, Description = task.Description, StartedDate = task.StartedDate, PublishTime = task.PublishTime, Tags = ReturnTags, Status = status, Title = task.Title, }; var upStatus = contentodbContext.Campaign.FirstOrDefault(y => y.Id == request.Task.IdCampaign); if (upStatus.Status == 1) { upStatus.Status = 2; contentodbContext.Attach(upStatus); contentodbContext.Entry(upStatus).Property(x => x.Status).IsModified = true; await contentodbContext.SaveChangesAsync(cancellationToken); } transaction.Commit(); return(taskModel); } catch (Exception e) { transaction.Rollback(); return(null); } }
public async Task <ReturnUpdateTaskModel> Handle(UpdateTaskEditorCommand request, CancellationToken cancellationToken) { var transaction = contentodbContext.Database.BeginTransaction(); try { var upTask = contentodbContext.Tasks.AsNoTracking().Include(y => y.TasksTags).FirstOrDefault(x => x.Id == request.IdTask); var resultReturn = new ReturnUpdateTaskModel(); var Tags = new List <TasksTags>(); var TagsReturn = new List <TagsViewModel>(); var writer = new UsersModels(); if (upTask == null) { return(null); } if (upTask.Status == 1) { foreach (var item in request.Tags) { var tag = new TasksTags { IdTag = item.Id, ModifiedDate = DateTime.UtcNow }; var tagReturn = new TagsViewModel { Id = item.Id, Name = contentodbContext.Tags.FirstOrDefault(x => x.Id == item.Id).Name }; Tags.Add(tag); TagsReturn.Add(tagReturn); } contentodbContext.TasksTags.RemoveRange(upTask.TasksTags); upTask.Title = request.Title; upTask.IdWriter = request.IdWriter; upTask.Description = request.Description; upTask.Deadline = request.Deadline; upTask.PublishTime = request.PublishTime; upTask.TasksTags = Tags; upTask.ModifiedDate = DateTime.UtcNow; contentodbContext.Attach(upTask); contentodbContext.Entry(upTask).State = EntityState.Modified; await contentodbContext.SaveChangesAsync(cancellationToken); writer.Id = upTask.IdWriter; writer.Name = contentodbContext.Users.FirstOrDefault(x => x.Id == upTask.IdWriter).Name; resultReturn.Title = upTask.Title; resultReturn.Writer = writer; resultReturn.Description = upTask.Description; resultReturn.Deadline = upTask.Deadline; resultReturn.PublishTime = upTask.PublishTime; resultReturn.Tags = TagsReturn; resultReturn.Id = request.IdTask; transaction.Commit(); return(resultReturn); } //update with status !=1 foreach (var item in request.Tags) { var tag = new TasksTags { IdTag = item.Id, ModifiedDate = DateTime.UtcNow }; var tagReturn = new TagsViewModel { Id = item.Id, Name = contentodbContext.Tags.FirstOrDefault(x => x.Id == item.Id).Name }; Tags.Add(tag); TagsReturn.Add(tagReturn); } upTask.Deadline = request.Deadline; upTask.PublishTime = request.PublishTime; if (request.Deadline > DateTime.UtcNow) { upTask.Status = 2; } contentodbContext.Attach(upTask); contentodbContext.Entry(upTask).State = EntityState.Modified; await contentodbContext.SaveChangesAsync(cancellationToken); var Status = new StatusModels() { Id = upTask.Status, Name = contentodbContext.StatusTasks.FirstOrDefault(x => x.Id == upTask.Status).Name, Color = contentodbContext.StatusTasks.FirstOrDefault(x => x.Id == upTask.Status).Color }; writer.Id = upTask.IdWriter; writer.Name = contentodbContext.Users.FirstOrDefault(x => x.Id == upTask.IdWriter).Name; resultReturn.Title = upTask.Title; resultReturn.Writer = writer; resultReturn.Description = upTask.Description; resultReturn.Deadline = upTask.Deadline; resultReturn.PublishTime = upTask.PublishTime; resultReturn.Tags = TagsReturn; resultReturn.Status = Status; resultReturn.Id = request.IdTask; resultReturn.Deadline = upTask.Deadline; transaction.Commit(); return(resultReturn); } catch (Exception e) { transaction.Rollback(); return(null); } }