public async Task<IHttpActionResult> PutTodo(long id, Todo todo)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            Todo existing = await Todos.FirstOrDefaultAsync(x => x.Id == id);

            if (existing == null)
            {
                return NotFound();
            }

            existing.Name = todo.Name;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TodoExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return StatusCode(HttpStatusCode.NoContent);
        }
        public async Task<IHttpActionResult> ClearCompleted()
        {
            var completedTodoIds = await Todos.Where(x => x.State == TodoState.Completed).Select(x => x.Id).ToArrayAsync();

            foreach (var id in completedTodoIds)
            {
                var todo = new Todo { Id = id };
                db.Entry(todo).State = EntityState.Deleted;
            }

            await db.SaveChangesAsync();

            return Ok(completedTodoIds);
        }
        public async Task<IHttpActionResult> ResetDemo()
        {
            var idsToDelete = await Todos.Select(x => x.Id).ToArrayAsync();

            foreach (var id in idsToDelete)
            {
                var todo = new Todo { Id = id };
                db.Entry(todo).State = EntityState.Deleted;
            }

            db.Todos.AddRange(new[] {
                new Todo { Name = "Dryclean cape" },
                new Todo { Name = "Clean cave" },
                new Todo { Name = "Save Gotham" },
            });

            await db.SaveChangesAsync();

            return Ok();
        }
        public async Task<IHttpActionResult> PostTodo(Todo todo)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            db.Todos.Add(todo);
            await db.SaveChangesAsync();

            return CreatedAtRoute("GetTodo", new { id = todo.Id }, todo);
        }