public async Task <IActionResult> Put(Guid id, [FromBody] TodoBag value)
        {
            var todo = await _context.Todos.Where(TodoSpecifications.ById(id).Expression).FirstOrDefaultAsync();

            if (todo == null)
            {
                return(WhenTodoNull(id));
            }

            todo.UpdateFrom(value);
            await _context.SaveChangesAsync();

            return(AcceptedAtAction("Get", new { id = todo.Id }, todo));
        }
        public async Task <IActionResult> Delete(Guid id)
        {
            var todo = await _context.Todos.Where(TodoSpecifications.ById(id).Expression).FirstOrDefaultAsync();

            if (todo == null)
            {
                return(WhenTodoNull(id));
            }

            todo.MarkAs(TodoStatus.Abandoned);
            await _context.SaveChangesAsync();

            return(NoContent());
        }
        public async Task <IActionResult> Get(Guid id)
        {
            var todo = await _context.Todos.Where(TodoSpecifications.ById(id).Expression).FirstOrDefaultAsync();

            if (todo == null)
            {
                return(WhenTodoNull(id));
            }

            return(Ok(new
            {
                todo
            }));
        }