public int Post([FromBody]WorkProcExtension workProcExt)
        {
            if (workProcExt == null)
            {
                ThrowBadRequest();
            }

            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == workProcExt.Entity.PackId);

            if (pack == null)
            {
                ThrowNotFound();
            }

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                ThrowBadRequest();
            }

            WorkCommitService service = new WorkCommitService(db);
            return service.CommitWorkProc(workProcExt);
        }
        public IHttpActionResult Post([FromBody]NewWorkProcData procData)
        {
            if (procData == null)
            {
                return BadRequest();
            }

            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == procData.PackId);

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

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                return BadRequest();
            }

            WorkCommitService service = new WorkCommitService(db);
            bool actionResult = service.CreateWorkProc(procData.PackId, procData.WorkId, procData.Date);

            if (actionResult)
            {
                db.SaveChanges();
                return Ok();
            }

            return BadRequest();
        }
        // GET api/<controller>
        //public IEnumerable<string> Get()
        //{
        //    return new string[] { "value1", "value2" };
        //}
        //// GET api/<controller>/5
        //public string Get(int id)
        //{
        //    return "value";
        //}
        // POST api/<controller>
        public HttpResponseMessage Post([FromBody]WorkStage workStage)
        {
            var inserted = db.WorkStages.Add(workStage);
            db.SaveChanges();

            WorkCommitService service = new WorkCommitService(db);
            service.CreateWorkStageProcs(workStage);

            return Request.CreateResponse(HttpStatusCode.OK, inserted.Id);
        }
        // DELETE api/<controller>/5
        public void Delete(int id)
        {
            var localWorkStage = db.WorkStages.Find(id);

            if (localWorkStage != null)
            {
                WorkCommitService service = new WorkCommitService(db);
                service.RemoveWorkStage(id);

                var subStages = db.WorkStages.Where(ws => ws.ParentWorkStageId == id).ToList();
                db.WorkStages.RemoveRange(subStages);
                db.WorkStages.Remove(localWorkStage);
                db.SaveChanges();
            }
        }
        // DELETE api/<controller>/5
        public HttpResponseMessage Delete(int id)
        {
            var work = db.Works.Find(id);

            if(work == null)
            {
                return Request.CreateResponse(HttpStatusCode.NotFound);
            }
            else
            {
                WorkCommitService service = new WorkCommitService(db);
                service.RemoveWorkProcs(work.Id);

                db.WorkStages.RemoveRange(db.WorkStages.Where(ws => ws.WorkId == work.Id));
                db.Works.Remove(work);
                db.SaveChanges();
                return Request.CreateResponse(HttpStatusCode.OK);
            }
        }
        public WorkProc Get([FromUri] int packId, [FromUri] int workId)
        {
            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == packId);

            if (pack == null)
            {
                ThrowNotFound();
            }

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                ThrowBadRequest();
            }

            WorkCommitService service = new WorkCommitService(db);
            return service.GetWorkProc(packId, workId);
        }
        // GET api/<controller>
        public IHttpActionResult Get(int id)
        {
            var user = GetCurrentUser();

            var pack = db.Packs.FirstOrDefault(p => p.Id == id);

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

            var course = db.Courses.Find(pack.CourseId);

            if (course.UserId != user.Id)
            {
                return BadRequest();
            }

            WorkCommitService service = new WorkCommitService(db);

            return Json(service.GetWorkIds(id));
        }