public HttpResponseMessage CreateList(TodolistModel model,
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))]
            string accessToken)
        {
            return this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new TasksManagerDbContext();
                var meUser = this.GetUserByAccessToken(accessToken, context);
                this.ValidateList(model);

                var listEntity = model.ToEntity();
                listEntity.Owner = meUser;
                meUser.TodoLists.Add(listEntity);
                context.SaveChanges();

                var responseModel = new ListCreatedModel()
                {
                    Id = listEntity.Id,
                    Owner = meUser.Username
                };
                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { listId = listEntity.Id }));
                return response;
            });
        }
        public HttpResponseMessage ChangeTodoStatus(int todoId,
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))]
            string accessToken)
        {
            return this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new TasksManagerDbContext();

                var meUser = this.GetUserByAccessToken(accessToken, context);

                var todo = context.Todos.Find(todoId);
                if (todo == null)
                {
                    throw new ArgumentNullException("Wrong Todo");
                }

                if (todo.List.Owner != meUser)
                {
                    throw new InvalidOperationException("This is no your todo to check");
                }

                todo.IsDone = (todo.IsDone) ? false : true;
                context.SaveChanges();


                var responseModel = new ListCreatedModel()
                {
                    Id = todo.List.Id,
                    Owner = meUser.Username
                };
                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { listId = responseModel.Id }));
                return response;
            });
        }
        public HttpResponseMessage CreateTodoForList(int listId, TodoModel model,
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))]
            string accessToken)
        {
            return this.ExecuteOperationAndHandleExceptions(() =>
            {
                var context = new TasksManagerDbContext();
                var meUser = this.GetUserByAccessToken(accessToken, context);
                var list = context.TodoLists.Find(listId);
                if (list == null)
                {
                    throw new ArgumentNullException("Wrong TODO list");
                }

                if (string.IsNullOrEmpty(model.Text))
                {
                    throw new ArgumentNullException("Invalid TODO properties");
                }
                
                var todoEntity = new Todo()
                {
                    Text = model.Text,
                    IsDone = false
                };

                list.Todos.Add(todoEntity);
                context.SaveChanges();

                var responseModel = new ListCreatedModel()
                {
                    Id = listId,
                    Owner = meUser.Username
                };
                var response = this.Request.CreateResponse(HttpStatusCode.Created, responseModel);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { listId = responseModel.Id }));
                return response;
            });
        }