public HttpResponseMessage Put(int id, Task task)
        {
            using (var unitOfWork = _unitOfWorkFactory.CreateUnitOfWork())
            {
                if (ModelState.IsValid && id == task.Id)
                {
                    unitOfWork.Repository<Task>().AttachItem(task);

                    try
                    {
                        unitOfWork.SaveChanges();
                    }
                    catch (DbUpdateConcurrencyException)
                    {
                        return Request.CreateResponse(HttpStatusCode.NotFound);
                    }

                    return Request.CreateResponse(HttpStatusCode.OK);
                }
                else
                {
                    return Request.CreateResponse(HttpStatusCode.BadRequest);
                }
            }
        }
        public HttpResponseMessage Post(Task task)
        {
            if (ModelState.IsValid)
            {
                using (var unitOfWork = _unitOfWorkFactory.CreateUnitOfWork())
                {
                     unitOfWork.Repository<Task>().AddItem(task);
                }

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, task);
            //                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = task.Id }));
                response.Headers.Location = new Uri(Url.Link("PostTask", new { id = task.Id }));
                return response;
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }
 private bool AreSubtasksDone(Task task)
 {
     return task.Subtasks.Count() == task.Subtasks.Count(st => st.IsDone);
 }