Ejemplo n.º 1
0
        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);
            }
        }