Ejemplo n.º 1
0
        public static async Task <IActionResult> Run(
            [SignalRTrigger(Constants.SignalRTasksHubName, "messages", UpdateTaskMessage.MethodName, ConnectionStringSetting = Constants.SignalRConnectionStringSetting)] InvocationContext invocationContext,
            [SignalRParameter] UpdateTaskMessage argument,

            [CosmosDB(Constants.CosmosDbDatabase, Constants.CosmosDbTasksCollection, ConnectionStringSetting = Constants.CosmosDbConnectionStringSetting)] DocumentClient documentClient,
            [SignalR(HubName = Constants.SignalRTasksHubName, ConnectionStringSetting = Constants.SignalRConnectionStringSetting)] IAsyncCollector <SignalRMessage> signalRMessages,
            ILogger log)
        {
            // Parse body
            var taskListId = argument.TaskListId;
            var task       = argument.QuickTask;

            // Send new task to everyone in group
            await signalRMessages.AddAsync(new SignalRMessage
            {
                GroupName = taskListId,
                Target    = GotUpdatedTaskMessage.MethodName,
                Arguments = new object[] { new GotUpdatedTaskMessage(task)
                                           {
                                               IgnoreConnectionId = invocationContext.ConnectionId
                                           } }
            });

            // Get entire task list
            var uri            = UriFactory.CreateDocumentUri("TaskorateDb", "tasks", taskListId.ToString());
            var requestOptions = new RequestOptions {
                PartitionKey = new PartitionKey(taskListId.ToString()), JsonSerializerSettings = new JsonSerializerSettings {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                }
            };
            var taskList = await documentClient.ReadDocumentAsync <QuickTaskList>(uri, requestOptions);

            // Add task to task list
            if (taskList.Document == null)
            {
                return(new NotFoundResult());
            }
            if (taskList.Document.Tasks == null)
            {
                return(new BadRequestObjectResult("No tasks found for this list."));
            }

            var index = taskList.Document.Tasks.FindIndex(t => t.Id == task.Id);

            if (index == -1)
            {
                return(new BadRequestObjectResult($"Task with id {task.Id} not found on this list."));
            }

            taskList.Document.Tasks[index] = task;

            await documentClient.ReplaceDocumentAsync(uri, taskList.Document, requestOptions);

            return(new OkObjectResult(task));
        }
        private void UpdateTask(UpdateTaskMessage msg)
        {
            using (DataContext database = new DataContext())
            {
                var tasks = from t in database.Tasks where t.Id == msg.TaskToUpdate.Id select t;

                foreach (ToDoTask task in tasks)
                {
                    task.Title            = msg.TaskToUpdate.Title;
                    task.ShortDescription = msg.TaskToUpdate.ShortDescription;
                    task.LongDescription  = msg.TaskToUpdate.LongDescription;
                    task.Deadline         = msg.TaskToUpdate.Deadline;
                }

                database.SaveChanges();
            }

            CurrentTaskTitle   = msg.TaskToUpdate.Title;
            DescribeSection    = msg.TaskToUpdate.ShortDescription;
            CurrentTaskDetails = msg.TaskToUpdate.LongDescription;

            updateTasksList(TasksList);
        }